Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Oluşturulan butonu yok etme
#1
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;
Cevapla
#2
Proje yazmaya başlamadan evvel dilin ve ortamın temellerini öğrenmeniz sizin için çok faydalı olacaktır.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#3
+1 Bende merak ediyorum.
Cevapla
#4
(23-05-2020, Saat: 11:31)tabikisura10 Adlı Kullanıcıdan Alıntı: +1 Bende merak ediyorum.

Neyi merak ettiğinizi anlayamadım?
DelphiCan'dır!
Cevapla
#5
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.  Exclamation

Buradan çözüm için örnek kod yazmadan önce sizin takıldığınız yeri görmek isteriz.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#6
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 Sad

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?
Cevapla
#7
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. Idea

İşte sorununuza ilişkin senaryoya bunu da ekleyin.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#8
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.
Cevapla
#9
@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.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#10
Merhaba ben şu şekilde yok ediyorum.
 RemoveObject(Tobject)

Fakat butona name vermeyin.
Muharrem ARSLAN
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Information Uygulama yönetici olarak mı çalışıyor? (runtime tespit etme) bakyuz 0 521 28-04-2025, Saat: 17:22
Son Yorum: bakyuz
  Json Data Binding ile oluşturulan json içine Array ekleme aegean 4 1.839 17-05-2024, Saat: 12:36
Son Yorum: Tuğrul HELVACI
  WebBrowser Pdf Kayıt Etme sadoal351 1 1.368 11-07-2023, Saat: 12:39
Son Yorum: delphiman
  cxgrid Excel içine sayfa sayfa export Etme Mesut 2 1.901 08-09-2022, Saat: 15:39
Son Yorum: Mesut
  Delphi 'de exe içinde ki database ip tespit etme delphiX14 6 3.897 29-08-2022, Saat: 13:09
Son Yorum: tuna



Konuyu Okuyanlar: 1 Ziyaretçi