Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Cursor Değiştirme
#1
Hepimiz uzun sürecek işlemlerimiz için Cursor'u değiştirip(Genelde kum saati şeklinde yapıp Smile )   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 Smile
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
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter





Konuyu Okuyanlar: 1 Ziyaretçi