Timer kullanmadan zamanlı kod yazılabilirmi yardım edin..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
tugsat
Üye
Mesajlar: 132
Kayıt: 04 May 2009 09:30

Timer kullanmadan zamanlı kod yazılabilirmi yardım edin..

Mesaj gönderen tugsat »

S.a. her şeyi timerlerle ayrı ayrı yapmak çok uzun oluyor.Bunun kısayolu varmı bir kodu vs.
Örneğin ; bir butona tıklayınca deneme isimli formu açacak 5 saniye açık kalacak , 5 saniye sonra bu form kapanacak bu form kapanıncada deneme1 isimli formu açacak gibi...

Bunları yaparken örneğim butona tıklayınca ayrı ayrı timerlere yönlendiriyorsun.Ancak bunu timersiz direk butonun click prosedürüne yazarak timer kullanmadan yapmak için bir kodu vesaire varmı ?

İyi günler..
tugsat
Üye
Mesajlar: 132
Kayıt: 04 May 2009 09:30

Re: Timer kullanmadan zamanlı kod yazılabilirmi yardım edin..

Mesaj gönderen tugsat »

:|
tugsat
Üye
Mesajlar: 132
Kayıt: 04 May 2009 09:30

Re: Timer kullanmadan zamanlı kod yazılabilirmi yardım edin..

Mesaj gönderen tugsat »

Artık delphiTurkiye'ye giren yok herhalde :roll: :roll:
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Timer kullanmadan zamanlı kod yazılabilirmi yardım edin..

Mesaj gönderen CiTiZEN »

sanırım Tthread ile halledilir bi araştır
UWESIS CORPORATION
khanco
Üye
Mesajlar: 226
Kayıt: 01 Eki 2007 04:39
Konum: İzmir
İletişim:

Re: Timer kullanmadan zamanlı kod yazılabilirmi yardım edin..

Mesaj gönderen khanco »

sleep(ms) işini görür mü?
tugsat
Üye
Mesajlar: 132
Kayıt: 04 May 2009 09:30

Re: Timer kullanmadan zamanlı kod yazılabilirmi yardım edin..

Mesaj gönderen tugsat »

khanco yazdı:sleep(ms) işini görür mü?
s.a.
sleep(ms) nedir tam ayrıntılı yazsanız belki işime yarayabilir..

iyi günler..
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Timer kullanmadan zamanlı kod yazılabilirmi yardım edin..

Mesaj gönderen vkamadan »

Merhabalar ,
Sleep(ms) verilen milisaniye kadar bekler bunu kullanabilirsiniz, fakat beklerken uygulama yanıt vermiyor gibi görünür, benimde bir projemde bekleme işlemlerini timer olamadan halletmem gerekiyordu aşağıdaki metodu kullandım,

Kod: Tümünü seç

procedure Delay(Milliseconds: Integer);
var
  Tick: DWORD;
  Event: THandle;
begin
  Event := CreateEvent(nil, False, False, nil);
  try
    Tick := GetTickCount + DWORD(Milliseconds);
    while (Milliseconds > 0) and
      (MsgWaitForMultipleObjects(1, Event, False, Milliseconds,
      QS_ALLINPUT) <> WAIT_TIMEOUT) do
    begin
      Application.ProcessMessages;
      Milliseconds := Tick - GetTickCount;
    end;
  finally
    CloseHandle(Event);
  end;
end;

Örneğin 5 sn beklemek için Delay(5000); şeklinde kullanabilirsiniz, bu metodun Sleep ten farkı, bekleme yaparken uygulamanın işletim sistemi mesajlarını işlemeye devam edebilmesidir.

Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Timer kullanmadan zamanlı kod yazılabilirmi yardım edin..

Mesaj gönderen conari »

@Volkan iyi kod.
Eline sağlık. :bravo:
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
tugsat
Üye
Mesajlar: 132
Kayıt: 04 May 2009 09:30

Re: Timer kullanmadan zamanlı kod yazılabilirmi yardım edin..

Mesaj gönderen tugsat »

vkamadan yazdı:Merhabalar ,
Sleep(ms) verilen milisaniye kadar bekler bunu kullanabilirsiniz, fakat beklerken uygulama yanıt vermiyor gibi görünür, benimde bir projemde bekleme işlemlerini timer olamadan halletmem gerekiyordu aşağıdaki metodu kullandım,

Kod: Tümünü seç

procedure Delay(Milliseconds: Integer);
var
  Tick: DWORD;
  Event: THandle;
begin
  Event := CreateEvent(nil, False, False, nil);
  try
    Tick := GetTickCount + DWORD(Milliseconds);
    while (Milliseconds > 0) and
      (MsgWaitForMultipleObjects(1, Event, False, Milliseconds,
      QS_ALLINPUT) <> WAIT_TIMEOUT) do
    begin
      Application.ProcessMessages;
      Milliseconds := Tick - GetTickCount;
    end;
  finally
    CloseHandle(Event);
  end;
end;

Örneğin 5 sn beklemek için Delay(5000); şeklinde kullanabilirsiniz, bu metodun Sleep ten farkı, bekleme yaparken uygulamanın işletim sistemi mesajlarını işlemeye devam edebilmesidir.

Kolay gelsin.

"vkamadan" size çok teşekkür ederim abi.Abi diyorum çünkü lise sondayım yani yaşlılık kopmleksine girmeyin. :mrgreen: Aradığım şeyi tamamen karşılıyor.Bu arada CiTiZeN abimizede teşekkür ederim.Onun sayesinde thread nedir araştırmış oldum.Threadda çok onemli bir mesele programcı olmak isteyen herkesin thread ile ilgili makale okumasını tavsiye ederim.

Hayırlı günler..
tugsat
Üye
Mesajlar: 132
Kayıt: 04 May 2009 09:30

Re: Timer kullanmadan zamanlı kod yazılabilirmi yardım edin..

Mesaj gönderen tugsat »

showmessagedeyken showmessageyi kapatıp diğer işlemlere nasıl geçebilirim ? (Otomatik)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Timer kullanmadan zamanlı kod yazılabilirmi yardım edin..

Mesaj gönderen mrmarman »

Bu mümkün, oluşturduğun mesaj penceresinin handle nosunu global bir değişkenle tutarsan, timer intervalinde süre sonunda bu mesaj penceresine konumlanıp ilk butona veya sonrakine vs. bastırabilirsin.

Sana bir özel bir örnek hazırladım. Bu örnekte bir fonksiyon göreceksin. Bu fonksiyon dahilinde daha önce belirlediğin sürede bir mesaj penceresi ve butonları görüntülenecek sorna da kullanıcı belirlenen sürede butornlara basmazsa kendiliğinden ilk butona basılacak.

Kod: Tümünü seç

function OtomatikMesaj(FormHandle: HWND; Mesaj, Baslik:string; iButton, Sure:Integer ) : Integer;
var
  Timer_ID  : integer;

  procedure TimerProc(  wnd :HWND; uMsg    :UINT; idEvent :UINT; dwTime  :DWORD ); stdcall;      
  var
    Hand :HWND;
  begin
    Hand := GetWindow(wnd,  GW_HWNDPREV);
    Hand := GetWindow(Hand, GW_CHILD   );
    SendMessage(Hand, WM_LBUTTONDOWN, MK_LBUTTON, 0);
    SendMessage(Hand, WM_LBUTTONUP,   MK_LBUTTON, 0);
  end;
begin
  Timer_ID := SetTimer(FormHandle, 0, Sure*1000, @TimerProc);
  Result   := MessageBox(FormHandle, PChar(Mesaj), PChar(Baslik), iButton);
  KillTimer(FormHandle, Timer_ID);
end;
Kullanımı ise şöyle oluyor...

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  Sonuc : Integer;
begin
  Sonuc := OtomatikMesaj( Form1.Handle, 'Messaj', 'Başlık', MB_YesNo, 1 );
  case Sonuc of
  mrYes : ShowMessage('Evet Basıldı');
  mrNo  : ShowMessage('Hayır Basıldı');
  end;
end;
Başarılar...
Resim
Resim ....Resim
tugsat
Üye
Mesajlar: 132
Kayıt: 04 May 2009 09:30

Re: Timer kullanmadan zamanlı kod yazılabilirmi yardım edin..

Mesaj gönderen tugsat »

"mrmarman" yardımlarınızdan dolayı size çok teşekkür ederim. :bravo: :alkis:
Cevapla