Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Timer -Procedure ?
#1
İyi günler,
Aklıma takılan bir durum var ;
Daha önce procedure ya da function kullanmadım.
Kitap ve bir kaç websitesinden gördüğüm kadarıyla biliyorum. fakat bir procedure'ü bir bileşenin yerine değişmek ne kadar mantıklı bir iştir kavrayamadım.

bileşenlerin procedure'leri ile özel procedure'ler arasında bir fark var mı ?
Kitapta ;
Her bileşen olayı bir procedure'dür. 
yazıyor fakat yine de sorup daha emin olmak istedim.

Örneğin ;

procedure TForm1.deneme();
begin
TThread.Sleep(500);
Button1.Text := 'test';
Button1.Width := 100;
Button1.Height := 50;
Exit
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
deneme();
end;

Gibi timer yerine bu şekilde procedure kullansam ilerde timer'ı aratır mı bana ?

Kod uzunluğu
Aynı anda Farklı işlemler gerçekleştirme
formlar arası iletişim

Gibi durumlar da sonuçlar aynı mı olur ?
Hayat bakış açına göredir ; Baktığında gördüğün görmeni istedikleridir...
Cevapla
#2
Hayır bir sıkıntı yaşamazsınız o konuda timer le de yapsanız aynı işlevi görücektir. Ama bi ayrıntı
Delphi de bilmiyorum ama c# da TThread.Sleep komutu çalışırken programın tüm fonksiyonları devre dışı kalır yani programı komple donduruyor diye biliyorum timer ise programı dondurmadan çalışıyor diye biliyorum.
Cevapla
#3
(23-05-2019, Saat: 02:14)crowlin Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Hayır bir sıkıntı yaşamazsınız o konuda timer le de yapsanız aynı işlevi görücektir. Ama bi ayrıntı
Delphi de bilmiyorum ama c# da TThread.Sleep komutu çalışırken programın tüm fonksiyonları devre dışı kalır yani programı komple donduruyor diye biliyorum timer ise programı dondurmadan çalışıyor diye biliyorum.

Net bir bilgi bilmek güzel. Teşekkürler hocam.
Delphi de de sadece Sleep() komutu programı pert ediyor bunun için TThread.Sleep() kullandım hocam.
Timer'lardan kurtulayım da TThread yardımcı olur bize artık. Shy
Hayat bakış açına göredir ; Baktığında gördüğün görmeni istedikleridir...
Cevapla
#4
Merhaba,
@crowlin in belirttiği hususlara katılıyorum. Maksat bir timer kullanmaksa bunu bir kanal açarak, ana thread'dan bağımsız çalışmasını gerçekleştirebilirsiniz.
Bunun için daha önce paylaştığım bir konuya (Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.) göz atabilirsiniz.
Procedure veya function'ların bir bileşen yerine kullanılması veya bir bileşenin herhangi bir olayı işimizi görüyorsa yalnızca bu olay için o bileşenin kullanılması pek mantıklı değil. 

Procedure ve function'ların asıl amacı işleri kategorize etmektir. 
Örneğin,
Firmanıza ait bir deponuz var. 
Sorumlu personele: "Bana depodan 2 adet bilgisayar getir. Bu bilgisayarların RAM'lerini yükselteceğiz, bunun için de eski bilgisayarlardan 2 Adet RAM sök, getir."
Yada: "Bugün tüm  malzemeleri sayalım."
İlk olayda, bir istek yapılıyor. Sonuç olarak 2 adet PC ve 2 adet RAM isteniyor. Function'ların amacı da tıpkı böyledir; parametre gönderiyorsunuz (olmayabilir de) ve bir sonuç bekliyorsunuz. Sonucu alıp ihtiyacınızı gideriyorsunuz. 
İkinci olayda, bir iş isteği yapılıyor. Sonuç alınabilir veya sonra değerlendirilebilir. Procedure'lerin amacı ana işlerden bağımsız bir işi gerçekleştirmektir. 

Peki bileşen ile bu Procedure veya function'lar arasındaki fark nedir? 
Bileşen bu firmadır. 
Çalışanları (her biri ayrı bir thread olarak düşünebilirsiniz), her çalışanın kendine özgü özel becerileri (bunları da bileşenin property'lerine benzetebiliriz), sabahları yapılacak işler (initilization veya create), akşam firmayı kapatmadan son kontroller ve son işler (finalization veya destroy), yönetimin verdiği talimatlar ve istekleri (procedure, function) gibi daha bir çok işlevi barındırır.

Procedure veya function'lar bileşenin ayrılmaz bir üyesidir. Bileşenler ise bir sektörden sorumlu komplike yapılardır.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#5
Normalde hazır kod vermeyi sevmem ama bu kodu incele biraz vcl uygulaması ama kullanım hakkında çok fikir verecek Wink


Aşağıdaki linkte formun çalışma videosu var onu da izle.

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.


unit UpdateForm;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, dxGDIPlusClasses, Vcl.ExtCtrls, cxGraphics, cxLookAndFeels,
 cxLookAndFeelPainters, Vcl.Menus, dxSkinsCore, dxSkinBlack, dxSkinBlue, dxSkinBlueprint, dxSkinCaramel, dxSkinCoffee,
 dxSkinDarkRoom, dxSkinDarkSide, dxSkinDevExpressDarkStyle, dxSkinDevExpressStyle, dxSkinFoggy, dxSkinGlassOceans,
 dxSkinHighContrast, dxSkiniMaginary, dxSkinLilian, dxSkinLiquidSky, dxSkinLondonLiquidSky, dxSkinMcSkin,
 dxSkinMetropolis, dxSkinMetropolisDark, dxSkinMoneyTwins, dxSkinOffice2007Black, dxSkinOffice2007Blue,
 dxSkinOffice2007Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinOffice2010Black, dxSkinOffice2010Blue,
 dxSkinOffice2010Silver, dxSkinOffice2013DarkGray, dxSkinOffice2013LightGray, dxSkinOffice2013White, System.math,
 dxSkinOffice2016Colorful, dxSkinOffice2016Dark, dxSkinPumpkin, dxSkinSeven, dxSkinSevenClassic, dxSkinSharp,
 dxSkinSharpPlus, dxSkinSilver, dxSkinSpringTime, dxSkinStardust, dxSkinSummer2008, dxSkinTheAsphaltWorld,
 dxSkinTheBezier, dxSkinsDefaultPainters, dxSkinValentine, dxSkinVisualStudio2013Blue, dxSkinVisualStudio2013Dark,
 dxSkinVisualStudio2013Light, IdComponent, Zip, dxSkinVS2010, dxSkinWhiteprint, dxSkinXmas2008Blue, Vcl.StdCtrls, cxButtons, shellapi,
 IdHTTP, Vcl.ComCtrls, clMultiDC, clSingleDC, clDownLoader, clResourceState;

type
 TMyHTTP = class(TIdHTTP)
 public
   FileSize: Int64;
 end;

 TFrmUpdate = class(TForm)
   Image1: TImage;
   Image2: TImage;
   Image3: TImage;
   Label1: TLabel;
   btn_sil: TcxButton;
   cxButton1: TcxButton;
   Image4: TImage;
   Image5: TImage;
   LabelVersion: TLabel;
   Prg1: TProgressBar;
   Label2: TLabel;
   whatisnew: TcxButton;
   procedure cxButton1Click(Sender: TObject);

   procedure IndirAnimation;
   procedure Start;
   procedure StartDownload(Url, FileName, FilePath: String);
   procedure FormCreate(Sender: TObject);
   procedure btn_silClick(Sender: TObject);
   procedure doVisibile;
   procedure whatisnewClick(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 FrmUpdate: TFrmUpdate;
 BlogUrl: String = 'https://blog.yakupulutas.com/uzak-masaustu-baglantisi-remote-desktop-connection-uygulamasi/';
 DownloadUrl: String = 'https://blog.yakupulutas.com/wp-content/uploads/Uzakv3.zip';
 Animation: TThread;
 Terminated: boolean = False;

implementation

{$R *.dfm}

uses MainForm;

procedure TFrmUpdate.btn_silClick(Sender: TObject);
begin
 doVisibile;
 btn_sil.Enabled := False;
 cxButton1.Enabled := False;
 Start;
 StartDownload(DownloadUrl, 'Uzakv3.zip', ExtractFileDir(Application.ExeName) + '\');
end;

procedure TFrmUpdate.cxButton1Click(Sender: TObject);
begin
 Close;
end;

procedure TFrmUpdate.doVisibile;
begin
 LabelVersion.Visible := not LabelVersion.Visible;
 Image3.Visible := not Image3.Visible;
 Label1.Visible := not Label1.Visible;
 whatisnew.Visible := not whatisnew.Visible;
 Image4.Visible := not Image4.Visible;
 Image5.Visible := not Image5.Visible;
end;

procedure TFrmUpdate.FormCreate(Sender: TObject);
begin
 Animation := TThread.CreateAnonymousThread(
   procedure
   var
     i: integer;
   begin
     while Terminated do
     begin
       TThread.Queue(nil,
         procedure
         begin
           IndirAnimation;
         end);
       Sleep(250);
     end;
   end);
end;

procedure TFrmUpdate.IndirAnimation;
var
 lbl: TLabel;
begin
 lbl := TLabel.Create(Self);
 lbl.Parent := Image1.Parent;
 lbl.Left := RandomRange(160, 240);
 lbl.Top := 200;
 lbl.Width := 31;
 lbl.Height := 13;
 lbl.Caption := Inttostr(Random(2));
 TThread.CreateAnonymousThread(
   procedure
   var
     i: integer;
     ilbl: TLabel;
   begin
     ilbl := lbl;
     for I := ilbl.Top to 410 do
     begin
       TThread.Queue(nil,
         procedure
         begin
           ilbl.Top := i;
           if i > 408 then
             ilbl.Visible := False;
         end);
       Sleep(10);
     end;
   end).Start;
end;

procedure TFrmUpdate.Start;
begin
 if Terminated = False then
 begin
   Terminated := True;
   Animation.Start;
 end
 else
 begin
   Terminated := False;
 end;
end;

procedure TFrmUpdate.StartDownload(Url, FileName, FilePath: String);
var
 Down: TclDownLoader;
begin
 Down := TclDownLoader.Create(nil);
 try
   try
     Down.Url := StringReplace(Url, '\', '/', [rfReplaceAll]);
     Down.LocalFile := FilePath + FileName;
     Down.Start(False);
     if FileExists(FilePath + FileName) then
     begin
       TThread.CreateAnonymousThread(
         procedure
         var
           Zip: TZipFile;
         begin
           Sleep(500);
           Zip := TZipFile.Create;
           if FileExists(ExtractFileDir(Application.ExeName) + '\' + Application.ExeName + '_old') then
             Deletefile(ExtractFileDir(Application.ExeName) + '\' + Application.ExeName + '_old');

           RenameFile(Application.ExeName, Application.ExeName + '_old');
           Zip.Open(ExtractFileDir(Application.ExeName) + '\' + 'Uzakv3.zip', zmRead);
           Sleep(500);
           Zip.ExtractAll(ExtractFileDir(Application.ExeName) + '\');

           if FileExists(ExtractFileDir(Application.ExeName) + '\' + 'Uzakv3.zip') then
             Deletefile(ExtractFileDir(Application.ExeName) + '\' + 'Uzakv3.zip');
           Terminated := False;
           TThread.Queue(nil,
             procedure
             begin
               ShowMessage('Güncelleme tamamlandı, bir sonraki açılışta güncel uygulama açılacak');
               Close;
             end);

           if Assigned(Zip) then
             Zip.Free;
         end).Start;
     end
     else
     begin
       ShowMessage('Güncelleme esnasında hata meydana geldi.');
     end;
   except
     on E: Exception do
     begin
       ShowMessage(E.Message);
     end;
   end;
 finally
   Down.Free;
 end;
end;

procedure TFrmUpdate.whatisnewClick(Sender: TObject);
begin
ShellExecute(Handle, 'open', PWideChar(BlogUrl), nil, nil, SW_SHOW);
end;

end.

(23-05-2019, Saat: 02:14)crowlin Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Hayır bir sıkıntı yaşamazsınız o konuda timer le de yapsanız aynı işlevi görücektir. Ama bi ayrıntı
Delphi de bilmiyorum ama c# da TThread.Sleep komutu çalışırken programın tüm fonksiyonları devre dışı kalır yani programı komple donduruyor diye biliyorum timer ise programı dondurmadan çalışıyor diye biliyorum.

aynen öyle MainThreadı durduruyorsun bu durumda kullanıcı girişlerini yakalayamazsın bu sleepi 5 saniye ve üzerinde olursa windows tarafında not respondinge düşersin
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#6
(23-05-2019, Saat: 09:16)Fesih ARSLAN 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,
@crowlin in belirttiği hususlara katılıyorum. Maksat bir timer kullanmaksa bunu bir kanal açarak, ana thread'dan bağımsız çalışmasını gerçekleştirebilirsiniz.
Bunun için daha önce paylaştığım bir konuya (Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.) göz atabilirsiniz.
Procedure veya function'ların bir bileşen yerine kullanılması veya bir bileşenin herhangi bir olayı işimizi görüyorsa yalnızca bu olay için o bileşenin kullanılması pek mantıklı değil. 

Procedure ve function'ların asıl amacı işleri kategorize etmektir. 
Örneğin,
Firmanıza ait bir deponuz var. 
Sorumlu personele: "Bana depodan 2 adet bilgisayar getir. Bu bilgisayarların RAM'lerini yükselteceğiz, bunun için de eski bilgisayarlardan 2 Adet RAM sök, getir."
Yada: "Bugün tüm  malzemeleri sayalım."
İlk olayda, bir istek yapılıyor. Sonuç olarak 2 adet PC ve 2 adet RAM isteniyor. Function'ların amacı da tıpkı böyledir; parametre gönderiyorsunuz (olmayabilir de) ve bir sonuç bekliyorsunuz. Sonucu alıp ihtiyacınızı gideriyorsunuz. 
İkinci olayda, bir iş isteği yapılıyor. Sonuç alınabilir veya sonra değerlendirilebilir. Procedure'lerin amacı ana işlerden bağımsız bir işi gerçekleştirmektir. 

Peki bileşen ile bu Procedure veya function'lar arasındaki fark nedir? 
Bileşen bu firmadır. 
Çalışanları (her biri ayrı bir thread olarak düşünebilirsiniz), her çalışanın kendine özgü özel becerileri (bunları da bileşenin property'lerine benzetebiliriz), sabahları yapılacak işler (initilization veya create), akşam firmayı kapatmadan son kontroller ve son işler (finalization veya destroy), yönetimin verdiği talimatlar ve istekleri (procedure, function) gibi daha bir çok işlevi barındırır.

Procedure veya function'lar bileşenin ayrılmaz bir üyesidir. Bileşenler ise bir sektörden sorumlu komplike yapılardır.

Detaylı, Örnekli ve Güzel anlatım için çok teşekkürler hocam.
İnsan, kitapta da olsun istiyor böyle bir anlatım tarzı  Shy

(23-05-2019, Saat: 12:06)yhackup Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Normalde hazır kod vermeyi sevmem ama bu kodu incele biraz vcl uygulaması ama kullanım hakkında çok fikir verecek Wink


Aşağıdaki linkte formun çalışma videosu var onu da izle.

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.


unit UpdateForm;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, dxGDIPlusClasses, Vcl.ExtCtrls, cxGraphics, cxLookAndFeels,
 cxLookAndFeelPainters, Vcl.Menus, dxSkinsCore, dxSkinBlack, dxSkinBlue, dxSkinBlueprint, dxSkinCaramel, dxSkinCoffee,
 dxSkinDarkRoom, dxSkinDarkSide, dxSkinDevExpressDarkStyle, dxSkinDevExpressStyle, dxSkinFoggy, dxSkinGlassOceans,
 dxSkinHighContrast, dxSkiniMaginary, dxSkinLilian, dxSkinLiquidSky, dxSkinLondonLiquidSky, dxSkinMcSkin,
 dxSkinMetropolis, dxSkinMetropolisDark, dxSkinMoneyTwins, dxSkinOffice2007Black, dxSkinOffice2007Blue,
 dxSkinOffice2007Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinOffice2010Black, dxSkinOffice2010Blue,
 dxSkinOffice2010Silver, dxSkinOffice2013DarkGray, dxSkinOffice2013LightGray, dxSkinOffice2013White, System.math,
 dxSkinOffice2016Colorful, dxSkinOffice2016Dark, dxSkinPumpkin, dxSkinSeven, dxSkinSevenClassic, dxSkinSharp,
 dxSkinSharpPlus, dxSkinSilver, dxSkinSpringTime, dxSkinStardust, dxSkinSummer2008, dxSkinTheAsphaltWorld,
 dxSkinTheBezier, dxSkinsDefaultPainters, dxSkinValentine, dxSkinVisualStudio2013Blue, dxSkinVisualStudio2013Dark,
 dxSkinVisualStudio2013Light, IdComponent, Zip, dxSkinVS2010, dxSkinWhiteprint, dxSkinXmas2008Blue, Vcl.StdCtrls, cxButtons, shellapi,
 IdHTTP, Vcl.ComCtrls, clMultiDC, clSingleDC, clDownLoader, clResourceState;

type
 TMyHTTP = class(TIdHTTP)
 public
   FileSize: Int64;
 end;

 TFrmUpdate = class(TForm)
   Image1: TImage;
   Image2: TImage;
   Image3: TImage;
   Label1: TLabel;
   btn_sil: TcxButton;
   cxButton1: TcxButton;
   Image4: TImage;
   Image5: TImage;
   LabelVersion: TLabel;
   Prg1: TProgressBar;
   Label2: TLabel;
   whatisnew: TcxButton;
   procedure cxButton1Click(Sender: TObject);

   procedure IndirAnimation;
   procedure Start;
   procedure StartDownload(Url, FileName, FilePath: String);
   procedure FormCreate(Sender: TObject);
   procedure btn_silClick(Sender: TObject);
   procedure doVisibile;
   procedure whatisnewClick(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 FrmUpdate: TFrmUpdate;
 BlogUrl: String = 'https://blog.yakupulutas.com/uzak-masaustu-baglantisi-remote-desktop-connection-uygulamasi/';
 DownloadUrl: String = 'https://blog.yakupulutas.com/wp-content/uploads/Uzakv3.zip';
 Animation: TThread;
 Terminated: boolean = False;

implementation

{$R *.dfm}

uses MainForm;

procedure TFrmUpdate.btn_silClick(Sender: TObject);
begin
 doVisibile;
 btn_sil.Enabled := False;
 cxButton1.Enabled := False;
 Start;
 StartDownload(DownloadUrl, 'Uzakv3.zip', ExtractFileDir(Application.ExeName) + '\');
end;

procedure TFrmUpdate.cxButton1Click(Sender: TObject);
begin
 Close;
end;

procedure TFrmUpdate.doVisibile;
begin
 LabelVersion.Visible := not LabelVersion.Visible;
 Image3.Visible := not Image3.Visible;
 Label1.Visible := not Label1.Visible;
 whatisnew.Visible := not whatisnew.Visible;
 Image4.Visible := not Image4.Visible;
 Image5.Visible := not Image5.Visible;
end;

procedure TFrmUpdate.FormCreate(Sender: TObject);
begin
 Animation := TThread.CreateAnonymousThread(
   procedure
   var
     i: integer;
   begin
     while Terminated do
     begin
       TThread.Queue(nil,
         procedure
         begin
           IndirAnimation;
         end);
       Sleep(250);
     end;
   end);
end;

procedure TFrmUpdate.IndirAnimation;
var
 lbl: TLabel;
begin
 lbl := TLabel.Create(Self);
 lbl.Parent := Image1.Parent;
 lbl.Left := RandomRange(160, 240);
 lbl.Top := 200;
 lbl.Width := 31;
 lbl.Height := 13;
 lbl.Caption := Inttostr(Random(2));
 TThread.CreateAnonymousThread(
   procedure
   var
     i: integer;
     ilbl: TLabel;
   begin
     ilbl := lbl;
     for I := ilbl.Top to 410 do
     begin
       TThread.Queue(nil,
         procedure
         begin
           ilbl.Top := i;
           if i > 408 then
             ilbl.Visible := False;
         end);
       Sleep(10);
     end;
   end).Start;
end;

procedure TFrmUpdate.Start;
begin
 if Terminated = False then
 begin
   Terminated := True;
   Animation.Start;
 end
 else
 begin
   Terminated := False;
 end;
end;

procedure TFrmUpdate.StartDownload(Url, FileName, FilePath: String);
var
 Down: TclDownLoader;
begin
 Down := TclDownLoader.Create(nil);
 try
   try
     Down.Url := StringReplace(Url, '\', '/', [rfReplaceAll]);
     Down.LocalFile := FilePath + FileName;
     Down.Start(False);
     if FileExists(FilePath + FileName) then
     begin
       TThread.CreateAnonymousThread(
         procedure
         var
           Zip: TZipFile;
         begin
           Sleep(500);
           Zip := TZipFile.Create;
           if FileExists(ExtractFileDir(Application.ExeName) + '\' + Application.ExeName + '_old') then
             Deletefile(ExtractFileDir(Application.ExeName) + '\' + Application.ExeName + '_old');

           RenameFile(Application.ExeName, Application.ExeName + '_old');
           Zip.Open(ExtractFileDir(Application.ExeName) + '\' + 'Uzakv3.zip', zmRead);
           Sleep(500);
           Zip.ExtractAll(ExtractFileDir(Application.ExeName) + '\');

           if FileExists(ExtractFileDir(Application.ExeName) + '\' + 'Uzakv3.zip') then
             Deletefile(ExtractFileDir(Application.ExeName) + '\' + 'Uzakv3.zip');
           Terminated := False;
           TThread.Queue(nil,
             procedure
             begin
               ShowMessage('Güncelleme tamamlandı, bir sonraki açılışta güncel uygulama açılacak');
               Close;
             end);

           if Assigned(Zip) then
             Zip.Free;
         end).Start;
     end
     else
     begin
       ShowMessage('Güncelleme esnasında hata meydana geldi.');
     end;
   except
     on E: Exception do
     begin
       ShowMessage(E.Message);
     end;
   end;
 finally
   Down.Free;
 end;
end;

procedure TFrmUpdate.whatisnewClick(Sender: TObject);
begin
ShellExecute(Handle, 'open', PWideChar(BlogUrl), nil, nil, SW_SHOW);
end;

end.

(23-05-2019, Saat: 02:14)crowlin Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Hayır bir sıkıntı yaşamazsınız o konuda timer le de yapsanız aynı işlevi görücektir. Ama bi ayrıntı
Delphi de bilmiyorum ama c# da TThread.Sleep komutu çalışırken programın tüm fonksiyonları devre dışı kalır yani programı komple donduruyor diye biliyorum timer ise programı dondurmadan çalışıyor diye biliyorum.

aynen öyle MainThreadı durduruyorsun bu durumda kullanıcı girişlerini yakalayamazsın bu sleepi 5 saniye ve üzerinde olursa windows tarafında not respondinge düşersin

Hocam eklediğiniz kütüphane kadar kod yazmışlığım var mı diye şüphe ettim doğrusu  Smile
Ve HAZIR KOD için de sağolun  Smile
İlk başta benim için kafa karıştırıcı görünüyor ama zamanla daha iyi oturacaktır yerine  Shy
Hayat bakış açına göredir ; Baktığında gördüğün görmeni istedikleridir...
Cevapla
#7
(23-05-2019, Saat: 13:21)Mr.Developer 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 eklediğiniz kütüphane kadar kod yazmışlığım var mı diye şüphe ettim doğrusu  Smile
Ve HAZIR KOD için de sağolun  Smile
İlk başta benim için kafa karıştırıcı görünüyor ama zamanla daha iyi oturacaktır yerine  Shy


seneye tekrar gel bak Smile diyeceksin ki iki satırlık kodmuş aslında Big Grin
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#8
(23-05-2019, Saat: 14:19)yhackup Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(23-05-2019, Saat: 13:21)Mr.Developer 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 eklediğiniz kütüphane kadar kod yazmışlığım var mı diye şüphe ettim doğrusu  Smile
Ve HAZIR KOD için de sağolun  Smile
İlk başta benim için kafa karıştırıcı görünüyor ama zamanla daha iyi oturacaktır yerine  Shy


seneye tekrar gel bak Smile diyeceksin ki iki satırlık kodmuş aslında Big Grin

O hissi yaşamayı çok seviyorum   Smile
Hayat bakış açına göredir ; Baktığında gördüğün görmeni istedikleridir...
Cevapla
#9
timer kullanmak daha kolay ve sorunsuz sanarım timer de zahmeti çalıştırma durdur gibi zorlukları var ama tek satırlık bekletme de ayrı sorunları var gibi görünüyor
Cevapla
#10
(23-05-2019, Saat: 17:04)nguzeller Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.timer kullanmak daha kolay ve sorunsuz sanarım timer de zahmeti çalıştırma durdur gibi zorlukları var ama tek satırlık bekletme de ayrı sorunları var gibi görünüyor

Projemdeki timer'ları çoktan procedure'lerle değiştirdim hocam. bundan sonrası Allah kerim diyelim. Smile
Hayat bakış açına göredir ; Baktığında gördüğün görmeni istedikleridir...
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  bileşen - timer vs kalabalığıdan kurtulma ? Mr.Developer 13 1.540 18-07-2018, Saat: 15:35
Son Yorum: Mr.Developer
  Timer stringlist dilo 6 929 26-02-2018, Saat: 22:49
Son Yorum: Halil Han Badem



Konuyu Okuyanlar: 1 Ziyaretçi