Child form problemi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
cfyasar
Üye
Mesajlar: 169
Kayıt: 31 Oca 2005 05:18
Konum: izmir

Child form problemi

Mesaj gönderen cfyasar »

form1 üzerindeki bir butonla child formlar oluşturuyorum.
Application.Createform(TForm3,Form3); //form3 benim child formum
ve child formumun içinde sadece bir image nesnesi var. bu image nesenesine şu kodla bir çizim yapmak istiyorum
TForm3(findcomponent(form1.ActiveMDIChild.Name)).Image1.Canvas.
MoveTo(X,Y);
ve x y mouse hareketiyle değişyor
TForm3(findcomponent(form1.ActiveMDIChild.Name)).Image1.Canvas.
LineTo(X,Y);
ve access violation hatası veriyor.

Ayrıca açık olan 5 childdan biriyle çalışırken diğerlerinin görünmemesini istiyorum ama Form1.MdiChildren.hide; komutu işe yaramıyor;
Form1.MdiChildren.Close yaparsam formu tekrar çağıramıyorum. Çözümü nedir?
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Access violation almanızın sebebi sanırım, form create edilmeden önce içindeki bir nesneye yani image nesnesine ulaşmaya çalışıyorsun. Tasarımınızı bir daha gözden geçirin.
İkinci olay ise Formun Onclose olayına

Kod: Tümünü seç

  Action := caFree;
  FRM_URUN_GIRIS:= nil;
yazınca düzelmesi lazım .
Kullanıcı avatarı
cfyasar
Üye
Mesajlar: 169
Kayıt: 31 Oca 2005 05:18
Konum: izmir

Mesaj gönderen cfyasar »

child form oluşturduktan sonra formun üzeride mouse la çizim yapıyorum zaten. hatayı ondan vermiş olamaz.
onclose olayına yazdığım kodda formu tamamen kapatıyor. tekrar çağıramıyorum
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Hocam o zaman Formu Hide ile saklayabilirsin .
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Tabi ki SHOW ile de tekrar gösterirsin.
Kullanıcı avatarı
cfyasar
Üye
Mesajlar: 169
Kayıt: 31 Oca 2005 05:18
Konum: izmir

Mesaj gönderen cfyasar »

child formlarda hide, show çalışmıyor. child formu oluşturduktan sonra canvasla çizim yapabiliyorum. ama formun üzerindeki ımage nesnesine çizim yapamıyorum. aynı şekilde diğer elemanlara (edit gibi) da ulaşamıyorum
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

Aşağıdaki kod sana fikir verebilir..

Kod: Tümünü seç

if Form3 = nil then
begin
  Form3 := TForm3.Create(Self);
  Form3.WindowState :? wsNormal;
  Form3.Image1.Canvas.LineTo(1, 50);
  Form3.Show;
end;
DeveloperToolKit

..::|YeşilMavi|::..
Kullanıcı avatarı
sychorax
Üye
Mesajlar: 206
Kayıt: 20 May 2004 04:29

Re: Child form problemi

Mesaj gönderen sychorax »

cfyasar yazdı:TForm3(findcomponent(form1.ActiveMDIChild.Name)).Image1.Canvas.LineTo(X,Y);
Aktif child forma ulaşmak için findcomponent ile arattırmak yerine direk formu referans verebilirsin.

Kod: Tümünü seç

TForm3(ActiveMdiChild).Image1.Canvas.LineTo(X,Y);
Sorunun nedeni findcomponent fonksiyonunun formlar daçalışmaması.İki formluk bir mdi uygulaması oluşturup
ilk önce

Kod: Tümünü seç

if FindComponent(ActiveMDIChild.Name)=Form2 then
showmessage('Oldu') else showmessage('Olmadı');
Denedim olmadı sonucu verdi.
Sonra

Kod: Tümünü seç

if ActiveMDIChild=form2 then
showmessage('Oldu') else showmessage('Olmadı');
Oldu dedi.

Sanırım findcomponent sadece fonksiyonu kullandığınız form/unit içinde çalışıyor.
Kullanıcı avatarı
cfyasar
Üye
Mesajlar: 169
Kayıt: 31 Oca 2005 05:18
Konum: izmir

Mesaj gönderen cfyasar »

şöyle birşey denedim;
child formum form3 ve üzerinde sadece bir tane image nesnesi var.image in onclick olayına şu kodu yazıyorum. bu kod çalışıyor ve yanıtıı alıyorum.
ShowMessage(inttostr(TIMage(Form1.ActiveMDIChild).Width));
aynı onclick olayına şu kodu yazıyorum access violation hatası alıyorum.
TImage(Form1.ActiveMDIChild).Canvas.MoveTo(0,0);
TImage(Form1.ActiveMDIChild).Canvas.LineTo(10,10);
Abrak
Üye
Mesajlar: 189
Kayıt: 18 Kas 2004 05:30

Mesaj gönderen Abrak »

Child formu gizlemek için

Kod: Tümünü seç

ShowWindow(Handle, SW_HIDE);
child form active olduğunda diğerlerini döngü ile kontrol eder gizlersin
tekrar göstermek için SHOW olayını kullanabilirsin
Saygılarımla
Başkasına Olan Saygımız.. Kendimize Olan saygıdır..
Kullanıcı avatarı
cfyasar
Üye
Mesajlar: 169
Kayıt: 31 Oca 2005 05:18
Konum: izmir

Mesaj gönderen cfyasar »

Arkadaşlar çözümü buldum yardımlarınız için teşekkürler. programda mantık hatası yapıyormuşum.
Olayı kısaca özetlemek gerekirse, form1 main form , form3 de child form. sizin bana önerdiklerinizde hep form1 üzerinden form3 içine çizgi çizdirmeyi anlattınız ve ben onları form3 içinden yine form3 e çizdirmeye çalıştığım için hep hata mesajı aldım. ben çizgiyi main formu karıştırmadan çizmeye kalktığımda sorun çözüldü.
sonuç TForm3.Image1MouseDown olayına Image1.Canvas.MoveTo(X,Y);
TForm3.Image1MouseUp olayına Image1.Canvas.LineTo(X,Y) kodu sorunu çözüyor. :oops: :D
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Formlarına Form1, Form2 .... gibi isimler vermek yerine işlemi çağrıştıran isimler vermen daha iyi olur.
Ör. = FRM_ANA , FRM_STOK , FRM_FATURA gibi :wink:
cool_erci
Üye
Mesajlar: 7
Kayıt: 21 Ağu 2004 02:04
İletişim:

Mesaj gönderen cool_erci »

Abrak yazdı:Child formu gizlemek için

Kod: Tümünü seç

ShowWindow(Handle, SW_HIDE);
child form active olduğunda diğerlerini döngü ile kontrol eder gizlersin
tekrar göstermek için SHOW olayını kullanabilirsin
Saygılarımla
Abrak arkadaşım bu kod için sana teşekkür ederim çok işimi gördü, bende tam bununla ilgili aranıyodum, sağolasın ellerine sağlık
Cevapla