Child form problemi
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Child form problemi
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?
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?
-
- Kıdemli Üye
- Mesajlar: 574
- Kayıt: 01 Şub 2004 12:29
- Konum: Erdemli - MERSİN
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
yazınca düzelmesi lazım .
İkinci olay ise Formun Onclose olayına
Kod: Tümünü seç
Action := caFree;
FRM_URUN_GIRIS:= nil;
-
- Kıdemli Üye
- Mesajlar: 574
- Kayıt: 01 Şub 2004 12:29
- Konum: Erdemli - MERSİN
-
- Kıdemli Üye
- Mesajlar: 574
- Kayıt: 01 Şub 2004 12:29
- Konum: Erdemli - MERSİN
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;
Re: Child form problemi
Aktif child forma ulaşmak için findcomponent ile arattırmak yerine direk formu referans verebilirsin.cfyasar yazdı:TForm3(findcomponent(form1.ActiveMDIChild.Name)).Image1.Canvas.LineTo(X,Y);
Kod: Tümünü seç
TForm3(ActiveMdiChild).Image1.Canvas.LineTo(X,Y);
ilk önce
Kod: Tümünü seç
if FindComponent(ActiveMDIChild.Name)=Form2 then
showmessage('Oldu') else showmessage('Olmadı');
Sonra
Kod: Tümünü seç
if ActiveMDIChild=form2 then
showmessage('Oldu') else showmessage('Olmadı');
Sanırım findcomponent sadece fonksiyonu kullandığınız form/unit içinde çalışıyor.
şö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);
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);
Child formu gizlemek için
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
Kod: Tümünü seç
ShowWindow(Handle, SW_HIDE);
tekrar göstermek için SHOW olayını kullanabilirsin
Saygılarımla
Başkasına Olan Saygımız.. Kendimize Olan saygıdır..
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.

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.


-
- Kıdemli Üye
- Mesajlar: 574
- Kayıt: 01 Şub 2004 12:29
- Konum: Erdemli - MERSİN
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ıkAbrak yazdı:Child formu gizlemek içinchild form active olduğunda diğerlerini döngü ile kontrol eder gizlersinKod: Tümünü seç
ShowWindow(Handle, SW_HIDE);
tekrar göstermek için SHOW olayını kullanabilirsin
Saygılarımla