Hepimiz uzun sürecek işlemlerimiz için Cursor'u değiştirip(Genelde kum saati şeklinde yapıp
) sonra işlem bitince eski haline getirme işini kullanıyoruz sanırım.
Ve genelde şöyle bir kodumuz oluyor
Aslında şöyle birşey olsa ne güzel olurdu:
Uzun sürecek işlemden önce Cursor bir yerde saklansa, UzunSurenIslemYap bittiğinde otomatik olarak eski Cursor'umuz geri gelse çok güzel olur.
Delphi sağolsun her işte olduğu gibi bu işte de bize yardımcı oluyor
Her seferinde cursor'u bir değişkene atıp, try-finally kullanmak yerine Interface kullanabiliriz.
Bunun için aşağıdaki basit unit'i oluşturun:
uCursor.pas adında kaydettiğim bu unit'i artık yukarıdaki ihtiyaç ne zaman hasıl olursa şöyle kullanabiliriz:
Bu şekilde UzunSurenIslemYap çalışmaya başladığında cursor'un kum saati şeklini alıp, işlemden sonra eski haline döndüğünü göreceksiniz.
Not: SetCursor'un parametresini kullanıp kum saati yerine başka cursor'lar da kullanabilirsiniz.
Not 2: Uzun zaman önce internette buna benzer örnek bulmuştum ve halen kullanıyorum. Ama asıl kaynağı tespit edemediğim için burada link veremedim.
) sonra işlem bitince eski haline getirme işini kullanıyoruz sanırım.Ve genelde şöyle bir kodumuz oluyor
procedure UzunSurenIslemYap(); var Cur: TCursor; begin Cur := Screen.Cursor; Screen.Cursor := crSQLWait; try // Uzun süren işlemler finally Screen.Cursor := Cur; end; end;
Aslında şöyle birşey olsa ne güzel olurdu:
procedure UzunSurenIslemYap(); begin CursoruDegistir() // Uzun süren işlemler end;
Uzun sürecek işlemden önce Cursor bir yerde saklansa, UzunSurenIslemYap bittiğinde otomatik olarak eski Cursor'umuz geri gelse çok güzel olur.
Delphi sağolsun her işte olduğu gibi bu işte de bize yardımcı oluyor

Her seferinde cursor'u bir değişkene atıp, try-finally kullanmak yerine Interface kullanabiliriz.
Bunun için aşağıdaki basit unit'i oluşturun:
unit uCursor;
interface
uses Controls, Forms;
type
TTmpCursor = class(TInterfacedObject, IInterface)
private
FCursor: TCursor;
public
constructor Create(const ACursor: TCursor);
destructor Destroy; override;
class function SetCursor(const ACursor: TCursor = crHourGlass): IInterface;
end;
implementation
{ TTmpCursor }
constructor TTmpCursor.Create(const ACursor: TCursor);
begin
inherited Create();
FCursor := Screen.Cursor;
Screen.Cursor := ACursor;
end;
destructor TTmpCursor.Destroy;
begin
if Assigned(Screen) then
Screen.Cursor := FCursor;
inherited Destroy();
end;
class function TTmpCursor.SetCursor(const ACursor: TCursor): IInterface;
begin
Result := TTmpCursor.Create(ACursor);
end;
end.
uCursor.pas adında kaydettiğim bu unit'i artık yukarıdaki ihtiyaç ne zaman hasıl olursa şöyle kullanabiliriz:
procedure UzunSurenIslemYap(); begin TTmpCursor.SetCursor(); // Uzun süren işlemler end;
Bu şekilde UzunSurenIslemYap çalışmaya başladığında cursor'un kum saati şeklini alıp, işlemden sonra eski haline döndüğünü göreceksiniz.
Not: SetCursor'un parametresini kullanıp kum saati yerine başka cursor'lar da kullanabilirsiniz.
Not 2: Uzun zaman önce internette buna benzer örnek bulmuştum ve halen kullanıyorum. Ama asıl kaynağı tespit edemediğim için burada link veremedim.
There's no place like 127.0.0.1

