Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
İşlem Yapılırken "Lütfen Bekleyiniz" Yazısı
#1
Arkadaşlar Merhaba; Program da INSERT işlemleri yapılırken kullanıcıya mesaj verdirmek istedim beklemesi gerektiğini bilmesi için ve sitelerde araştırırken şöyle bir kod yapısı buldum uyarlamaya çalıştım hata verdi. Düzeltmeler için yardımcı olabilecek misiniz?

TStatusWindowHandle = type HWND;  -> Hata: Expected ':' but '=' Found 

Delphi7 kullandığım için mi acaba ?


unit bekle;

interface
 uses
 Windows,Messages,SysUtils,Variants,Classes,Graphics,
 Controls,Forms;

type
TStatusWindowHandle = type HWND;

function CreateStatusWindow(const Text: string): TStatusWindowHandle;
procedure RemoveStatusWindow(StatusWindow: TStatusWindowHandle);

implementation
function CreateStatusWindow(const Text: string): TStatusWindowHandle;
var
 FormWidth,
 FormHeight: integer;
begin
 FormWidth  := 600;//Genişliğini istediğiniz gibi ayarlayın
 FormHeight := 180;// Yüksekliğini istediğiniz gibi ayarlayın
 result := CreateWindow(‘STATIC’,
                        PChar(Text),
                        WS_OVERLAPPED or WS_POPUPWINDOW or WS_THICKFRAME or SS_CENTER or SS_CENTERIMAGE,
                        (Screen.Width – FormWidth) div 2,
                        (Screen.Height – FormHeight) div 2,
                        FormWidth,
                        FormHeight,
                        Application.Mainform.Handle,
                        0,
                        HInstance,
                        nil);
 ShowWindow(result, SW_SHOWNORMAL);
 UpdateWindow(result);
end;
procedure RemoveStatusWindow(StatusWindow: TStatusWindowHandle);
begin
 DestroyWindow(StatusWindow);
end;
end.


Daha sonra nerede işlem yapacaksanız aşağıdaki örnek kod ile işlem yapın.

var 
hwnd : TStatusWindowHandle;
 begin
  hwnd := CreateStatusWindow('Lütfen Bekleyiniz');
  try
    //işlemler vb. işler


  finally
   RemoveStatusWindow(hwnd);
  end;
 end;

Bu statuswindowlar sayesinde çok daha hızlı formu application dondurmadan işlemler yapabilirsiniz.İşlemler bitincede otomatik olarak kaybolur.
Cevapla
#2
Hocam Selamlar,

Verdiğiniz Kodu Delphi 10.3 ve Lazarus ile denedim ve çalışıyor. hatta size Delphi projesini komple sıkıştırıp gönderiyorum. "bekle.pas" dosyasını projenize dahil edip direkt kullanabilirsiniz. 

unit bekle;

interface
uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms;

type
TStatusWindowHandle = type THandle;

function CreateStatusWindow(const Text: string): TStatusWindowHandle;
procedure RemoveStatusWindow(StatusWindow: TStatusWindowHandle);

implementation
function CreateStatusWindow(const Text: string): TStatusWindowHandle;
var
FormWidth,
FormHeight: integer;
begin
FormWidth  := 600;
FormHeight := 180;
result := CreateWindow('STATIC',
                       PChar(Text),
                       WS_OVERLAPPED or WS_POPUPWINDOW or WS_THICKFRAME or SS_CENTER or SS_CENTERIMAGE,
                       (Screen.Width-FormWidth) div 2,
                       (Screen.Height-FormHeight) div 2,
                       FormWidth,
                       FormHeight,
                       Application.Mainform.Handle,
                       0,
                       HInstance,
                       nil);
ShowWindow(result, SW_SHOWNORMAL);
UpdateWindow(result);
end;
procedure RemoveStatusWindow(StatusWindow: TStatusWindowHandle);
begin
DestroyWindow(StatusWindow);
end;
end.


Ek Dosyalar
.zip   bekle.zip (Dosya Boyutu: 686,8 KB / İndirme Sayısı: 10)
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

Sadece Hobiciyim..
WWW
Cevapla
#3
(21-04-2019, Saat: 11:48)Merhaba, Ben Delphi 7 de denediğim için çalışmıyor. SercanTEK Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Hocam Selamlar,

Verdiğiniz Kodu Delphi 10.3 ve Lazarus ile denedim ve çalışıyor. hatta size Delphi projesini komple sıkıştırıp gönderiyorum. "bekle.pas" dosyasını projenize dahil edip direkt kullanabilirsiniz. 

unit bekle;

interface
uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms;

type
TStatusWindowHandle = type THandle;

function CreateStatusWindow(const Text: string): TStatusWindowHandle;
procedure RemoveStatusWindow(StatusWindow: TStatusWindowHandle);

implementation
function CreateStatusWindow(const Text: string): TStatusWindowHandle;
var
FormWidth,
FormHeight: integer;
begin
FormWidth  := 600;
FormHeight := 180;
result := CreateWindow('STATIC',
                       PChar(Text),
                       WS_OVERLAPPED or WS_POPUPWINDOW or WS_THICKFRAME or SS_CENTER or SS_CENTERIMAGE,
                       (Screen.Width-FormWidth) div 2,
                       (Screen.Height-FormHeight) div 2,
                       FormWidth,
                       FormHeight,
                       Application.Mainform.Handle,
                       0,
                       HInstance,
                       nil);
ShowWindow(result, SW_SHOWNORMAL);
UpdateWindow(result);
end;
procedure RemoveStatusWindow(StatusWindow: TStatusWindowHandle);
begin
DestroyWindow(StatusWindow);
end;
end.
Cevapla
#4
Hatta kendi Projemde "showmessage" yerine kullanmak için aşağıdaki şekilde düzenledim.

unit BilgilendirmePenceresi;

interface

uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms;

type
  TStatusWindowHandle = type THandle;

procedure BilgiVer(const Mesaj: string; EkranSuresi : integer = 1000);

implementation

procedure Gecikme(ms: longint);
// Gecikme Fonksiyonu
var
  TheTime: LongInt;
begin
  TheTime := GetTickCount + ms;
  while GetTickCount < TheTime do
    Application.ProcessMessages;
end;

procedure BilgiVer(const Mesaj: string; EkranSuresi : integer = 1000);
// Verilen Mesaj Süresi kadar Bilgi Penceresini Ekranda Tutar.
var
  FormWidth, FormHeight: integer;
  hwnd: TStatusWindowHandle;
begin
  if length(Mesaj.Trim) > 0 then
  begin
    try

      FormWidth := (Mesaj.Length*10)+30;
      FormHeight := 180;

      hwnd := CreateWindow('STATIC', PWideChar(Mesaj), WS_OVERLAPPED or WS_POPUPWINDOW or
        WS_THICKFRAME or SS_CENTER or SS_CENTERIMAGE, (Screen.Width - FormWidth) div 2,
        (Screen.Height - FormHeight) div 2, FormWidth, FormHeight, Application.Mainform.Handle, 0,
        HInstance, nil);
      ShowWindow(hwnd, SW_SHOWNORMAL);
      UpdateWindow(hwnd);
    finally
      Gecikme(EkranSuresi);
      DestroyWindow(hwnd);
    end;
  end;
end;

end.



Kullanımı : 

Bilgiver('Lütfen bekleyiniz...'); // 1000 ms (1sn) boyunca uyarı ekranda kalır.

Bilgiver('Lütfen bekleyiniz...',2000); // 2000 ms (2sn) boyunca ekranda kalır

(21-04-2019, Saat: 13:09)OZCANK Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Merhaba, Ben Delphi 7 de denediğim için çalışmıyor. 

Delphi 7 indirip deneceğim. Merak Ettim açıkçası. mevcutta Delphi 10.3 ve Lazarus Kuruluydu onlarla denedim.

Delphi 7 indirdim ve kurdum sizin verdiğiniz kodları direkt derledi. Delphi 7 projesi olarak ekliyorum. @OZCANK

sanırım sizin delphi 7 de sorun var ? Eğer mahsuru yoksa güncel bir süreme geçmeyi tavsiye edeceğim.


Ek Dosyalar
.zip   BekleDeneme.zip (Dosya Boyutu: 200,93 KB / İndirme Sayısı: 15)
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

Sadece Hobiciyim..
WWW
Cevapla
#5
(21-04-2019, Saat: 13:37)Merhaba Kardeşim ; Bende denedim şimdi ve programıma entegre ettim.Te şekkür ederim SercanTEK Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Hatta kendi Projemde "showmessage" yerine kullanmak için aşağıdaki şekilde düzenledim.

unit BilgilendirmePenceresi;

interface

uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms;

type
  TStatusWindowHandle = type THandle;

procedure BilgiVer(const Mesaj: string; EkranSuresi : integer = 1000);

implementation

procedure Gecikme(ms: longint);
// Gecikme Fonksiyonu
var
  TheTime: LongInt;
begin
  TheTime := GetTickCount + ms;
  while GetTickCount < TheTime do
    Application.ProcessMessages;
end;

procedure BilgiVer(const Mesaj: string; EkranSuresi : integer = 1000);
// Verilen Mesaj Süresi kadar Bilgi Penceresini Ekranda Tutar.
var
  FormWidth, FormHeight: integer;
  hwnd: TStatusWindowHandle;
begin
  if length(Mesaj.Trim) > 0 then
  begin
    try

      FormWidth := (Mesaj.Length*10)+30;
      FormHeight := 180;

      hwnd := CreateWindow('STATIC', PWideChar(Mesaj), WS_OVERLAPPED or WS_POPUPWINDOW or
        WS_THICKFRAME or SS_CENTER or SS_CENTERIMAGE, (Screen.Width - FormWidth) div 2,
        (Screen.Height - FormHeight) div 2, FormWidth, FormHeight, Application.Mainform.Handle, 0,
        HInstance, nil);
      ShowWindow(hwnd, SW_SHOWNORMAL);
      UpdateWindow(hwnd);
    finally
      Gecikme(EkranSuresi);
      DestroyWindow(hwnd);
    end;
  end;
end;

end.



Kullanımı : 

Bilgiver('Lütfen bekleyiniz...'); // 1000 ms (1sn) boyunca uyarı ekranda kalır.

Bilgiver('Lütfen bekleyiniz...',2000); // 2000 ms (2sn) boyunca ekranda kalır

(21-04-2019, Saat: 13:09)OZCANK Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Merhaba, Ben Delphi 7 de denediğim için çalışmıyor. 

Delphi 7 indirip deneceğim. Merak Ettim açıkçası. mevcutta Delphi 10.3 ve Lazarus Kuruluydu onlarla denedim.

Delphi 7 indirdim ve kurdum sizin verdiğiniz kodları direkt derledi. Delphi 7 projesi olarak ekliyorum. @OZCANK

sanırım sizin delphi 7 de sorun var ? Eğer mahsuru yoksa güncel bir süreme geçmeyi tavsiye edeceğim.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  edit1 change işlem yapma erdogan 10 375 23-08-2019, Saat: 10:25
Son Yorum: erdogan
  Çözüldü-istenen işlem yükseltme gerekiyor hatası delphi7 sadikacar60 7 1.228 19-02-2019, Saat: 10:34
Son Yorum: sadikacar60
  Excelden den import sırasında mükerrer kaydı konrol edip farklı işlem yapma musdi42 1 823 14-11-2017, Saat: 12:21
Son Yorum: uparlayan
  İşlem sonunda editi temizleme hido 8 1.467 11-06-2017, Saat: 00:31
Son Yorum: hido
  Aktif form dan diğer formlara işlem gönderme esistem 8 2.096 10-04-2017, Saat: 13:18
Son Yorum: witalihakko



Konuyu Okuyanlar: 1 Ziyaretçi