![]() |
|
Oluşturulan butonu yok etme - Baskı Önizleme +- Delphi Can (https://www.delphican.com) +-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3) +--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6) +--- Konu Başlığı: Oluşturulan butonu yok etme (/showthread.php?tid=4856) Sayfalar:
1
2
|
Oluşturulan butonu yok etme - ekank - 23-05-2020 Merhaba, Uygulamada bir buton create ediyorum daha sonra bu butonda işim bitince yok olmasını. Fakat yok ederken adres hatası alıyorum bu sorunu nasıl çözebilirim? private
{ Private declarations }
procedure xCreateClick(Sender: TObject);
public
{ Public declarations }
end;
procedure TMainForm.xCreateClick(Sender: TObject); begin if Sender is TButton then begin //işlermer TButton(Sender).Destroy; // yok et ???? TButton(TButton(Sender).Name).Free; // yok et ??? end; end; procedure TForm.ButtonHavuzIptalClick(Sender: TObject); begin With TButton.Create(Panel1) do begin OnClick := xCreateClick; Cursor := crHandPoint; Tag := 1; Name := 'Close'; Align := alRight; Height := 25; Width := 50; Caption := 'Ekle'; parent := Panel1; end; end; Oluşturulan butonu yok etme - Tuğrul HELVACI - 23-05-2020 Proje yazmaya başlamadan evvel dilin ve ortamın temellerini öğrenmeniz sizin için çok faydalı olacaktır. Oluşturulan butonu yok etme - tabikisura10 - 23-05-2020 +1 Bende merak ediyorum. Cvp: Oluşturulan butonu yok etme - Fesih ARSLAN - 23-05-2020 (23-05-2020, Saat: 11:31)tabikisura10 Adlı Kullanıcıdan Alıntı: +1 Bende merak ediyorum. Neyi merak ettiğinizi anlayamadım? Oluşturulan butonu yok etme - mrmarman - 23-05-2020 Size önerim, (1) Burada kodlarını paylaşmak üzere boş bir proje açın (2) Yine panel içerisinde aynı yapıyı kurun (3) Butona basınca, basılı buton yok olmuyorsa çıkan hatayla birlikte öyle sorunuzu yineleyin. Çünkü "// işlemler" ile belirttiğiniz yerde belki de farklı iş yükü arasında kendisini ve/veya owner'ini, onun ownerini vs. birden fazla defa yok etmeye çalışıyor olabilirsiniz bunu bilemeyiz. Sorunuzda yazdığınız gibi soru işareti ile belirtmek istediğini kod satırlarını alt alta aynı anda yazıp çalıştırdığınız yanılgısı yaşıyor olabiliriz. ![]() Buradan çözüm için örnek kod yazmadan önce sizin takıldığınız yeri görmek isteriz. Oluşturulan butonu yok etme - ekank - 23-05-2020 Aynı kodları daha önce FMX tarafında kullanıyordum ve sorun yaşamıyordum. Fakat var olan VCL projemde kodları ekleyince hata almaya başladım. Sorun VCL'den kaynaklanıyor sanıyordum ![]() Hata kodu: First chance exception at $0054EA85. Exception class $C0000005 with message 'access violation at 0x0054ea85: read of address 0x00000008'. Process Arsiv.exe (14964) Tekrar VCL boş proje ile test yaptım hata vermedi. Var olan projemdeki hatayı nasıl çözerim? Oluşturulan butonu yok etme - mrmarman - 23-05-2020 Hata vermeyeceğine ilişkin kuşkum vardı zaten, onun için yazmıştım. Var olan projenizde kodları adımlayarak ( TRACE ) bir aşamada FREE edilmiş olan nesneyi yeniden FREE etmek istiyor olduğunuzu göreceksiniz. Bunu bulduğunuzda çözüm de orada olacak. Şöyle bir senaryo kurayım değerlendirin: * Bir dizi düşünün ( 1,2,3,4,5,6,7,8,9,10 ) * Aradan 5 numaralı olan nesenyi FREE ettik. * Siz projenin bir yerinde tüm diziyi yok et dediniz. Döngüyü nasıl kurarsınız. - 1'den başlayıp 10'a kadar değil mi ? Arada (5) daha önce FREE edildiğine göre işte orada Access Violation hatası alınır. Kontrolünüz ne kadar etkin olursa olsun, free öncesi orada bir nesne var mı diye - if Assigned( nesne ) veya if nesne <> nil gibi - sormalısınız. İşte sorununuza ilişkin senaryoya bunu da ekleyin. Oluşturulan butonu yok etme - tabikisura10 - 23-05-2020 TButton* Btnn[10];
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for (int i = 0; i < 10; i++) {
Btnn[i] = new TButton(Form1);
Btnn[i]->Parent = Form1;
Btnn[i]->Text = i;
Btnn[i]->Position->Y = 30 * i;
}
}
void __fastcall TForm1::Button3Click(TObject *Sender){
for (int i = 0; i < 10; i++) {
Btnn[i]->Free();
}
}
ben böyle kullandım sildi. Oluşturulan butonu yok etme - mrmarman - 23-05-2020 @tabikisura10 Örneğin bir başka buton ile veya butonun kendisi ile Btnn[5]->Free(); ile 5 nolu indeksli olanını tekil olarak sildiniz. * Button3'e tıkladığınızda ne olur ? İşte @ekank 'nı karşılaştığı sorun böyle bir sorun bence. Oluşturulan butonu yok etme - arsl01 - 23-05-2020 Merhaba ben şu şekilde yok ediyorum. RemoveObject(Tobject) Fakat butona name vermeyin. |