Thread içinde form yaratmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
YuNuSAYD
Üye
Mesajlar: 7
Kayıt: 13 Eki 2003 07:18
Konum: ist
İletişim:

Thread içinde form yaratmak

Mesaj gönderen YuNuSAYD »

Merabalar Thread içersinde yarattigim formlar Show edildkten sonra anında yok oluyor Hide oluyor mu diye kontrol koyuyorum ama hide da edilmiyor ustelik yeniden yaratilmaya calisrken ki eger zaten yaratilmissa tekrar yaratma kismindan zaten yaratildi olarak geciyor

Sevgi , Saygi , Hurmet
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Merhaba,
Delphi'nin çoğu görsel nesnesi thread uyumlu değildir.
Tthread nesnesi kullanıyorsanız, Synchronize fonksiyonuyla bu işlemleri yapın. Synchronize'a verdiğin procedure main thread'de çalıştırılır. Böylelikle thread uyumsuz nesnelerin çıkartacağı aksaklıklar giderilmiş olur.

Kod: Tümünü seç

Procedure Tthread1.FormCreate;
begin
  Application.createform(Tform1, Formnesnem);
end;

Procedure Tthread1.Formshow;
begin
   Formnesnem.show;  
end;

....
İhtiyacın olduğu yerde :
  synchronize(FormCreate); 
veya 
  synchronize(FormShow); 
şeklinde kullanabilirsiniz.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Thread içinde neden form açıyorsun?
YuNuSAYD
Üye
Mesajlar: 7
Kayıt: 13 Eki 2003 07:18
Konum: ist
İletişim:

Mesaj gönderen YuNuSAYD »

Procedure Tthread1.FormCreate;
begin
Application.createform(Tform1, Formnesnem);
end;

Procedure Tthread1.Formshow;
begin
Formnesnem.show;
end;

....
İhtiyacın olduğu yerde :
synchronize(FormCreate);
veya
synchronize(FormShow);
şeklinde kullanabilirsiniz.

evet bende aynen bu dedigin gibi yapiyorum ama neticede form gorunup kayboluyor..

Neden form kullanmak gerektigime gelince projem 15 vcl formlu dllden olusuyor bu dlli tetikleyen tek bir exe var ve bi form uzerinde bi query sonucu beklenirken ki duruma gore bu 2-3 dakika surebiliyor diger modulleri kullanamiyor. Ve her formu duzenleyip uzun zaman alacak kısımları ayıramam cunku 1319 form var bunun yerine tetiklerken formu ayri kanalda yaratmayi dusundum

Sevgi, saygı, hürmet
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Show yerine ShowModal kullan bir de. ShowModal bir döngü içinde Formu ekranda kapatılana kadar bekletir. Show sadece formu show yapar ve çıkar. Çıktığı için de senin thread terminate oluyor. Sorunun buna benziyor.
YuNuSAYD
Üye
Mesajlar: 7
Kayıt: 13 Eki 2003 07:18
Konum: ist
İletişim:

Mesaj gönderen YuNuSAYD »

duzelmesine duzeldi ama eskisi gibi tek kanal gibi oluo yani bi form ile is bitmeden digerine zaten gecemiyorsun modal yapinca
ama thread nesnemi yaratip yapinca oldu yani with TMyThread.Create degilde tanimlamis oldugum bir thread objesi yapiipo ondan thread olusturdugumda sorun olmadi fekat
simdi bi formdaki uzun suren raporu tikladigimda yine baska biyeri kullanmiorum query sonucu donene dek ilginc degil mi

===============
Sevgi, Saygı, Hürmet
İnsanları en cok yamyamlar sever....
YuNuSAYD
Üye
Mesajlar: 7
Kayıt: 13 Eki 2003 07:18
Konum: ist
İletişim:

Mesaj gönderen YuNuSAYD »

neden undefined in soyledigi gibi Synchronize() fonksiyonu ile main thread de calistirilio boylece eskisinden bi farki kalmiyor.
peki baska nasıl altından kalkabilirim bu isin bi fikri olan var mı
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Selamlar.

Thread kullanma amacın query çalıştırdığında işlemin daha hızlı olmasını sağlamak mı ben mi yanlış anlıyorum?
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Tasarımında bir yanlışlık var. Ne yapmak istediğin tam anlaşılmıyor. Bence thread içinde form açmak istemen başlı başına bir hata.

ADLL.BilmemneForm
BDLL.BilmemnedirForm

bu formları Ana uygulama içinde Show ile gösterdiğinde zaten istediğini elde etmiyor musun?
Cevapla