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.
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.
(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ı: 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.
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ı: 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.
(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ı: 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ı: 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.