Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    1,003

    [Delphi] Distruggere oggetti a runtime

    come si fa a distruggere (a runtime) un oggetto creato ankesso a runtime?

    es ho questo codice


    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    var btn: TButton;
    begin
    btn := TBUtton.create (self);
    btn.parent:= Self;
    btn.left:= X;
    btn.top:= Y;
    btn.Name := 'bottone'+inttostr(count);
    count:=Count+1;
    end;

    variabile count:integer; (privata)

    come si fa a fare in modo ke premendo un pulsante tutti i pulsanti vengano distrutti?

    es.

    for i:=1 to count do
    begin
    s:= 'bottone'+inttostr(i);
    Freeandnil(s);
    end;
    (questo codice da errore di violazione)




  2. #2
    codice:
    for i:=1 to count do
     FreeAndNil(FindComponent( 'bottone'+IntToStr(i) ))
    Ciauz
    www.iTentroPy.it - Elettronica e Programmazione
    Foto

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    1,003
    Originariamente inviato da p87
    codice:
    for i:=1 to count do
     FreeAndNil(FindComponent( 'bottone'+IntToStr(i) ))
    Ciauz

    Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    1,003
    strano nn funziona :master:

    Costant object cannot be passed as var parameter

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    1,003
    risolto!

    bit : TComponent;

    for i:=1 to count do
    begin
    s:= 'bottone'+inttostr(i);
    bit:= FindComponent ('bottone'+inttostr(i));
    FreeAndNil(bit);

    end;

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Poni molta attenzione quando scandisci generalmente gli elementi di una lista, poichè il numero di elementi diminuisce di volta in volta (anche se, in questo caso, non mi sembra che si ricada in una situazione simile poichè la variabile Count è inizializzata manualmente).

    L'approccio generico per la scansione con eliminazione dovrebbe essere, generalmente, percorso a rovescio per evitare "side effects":
    codice:
    for i := Count downto 1 do
      TButton(FindComponent('Bottone' + IntToStr(i))).Free;
    Se generi molti bottoni, prevedi anche l'uso di una lista in cui memorizzarne i riferimenti durante la creazione: l'uso del metodo FindComponent rallenta sempre di più maggiore è il numero di componenti.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    1,003
    Perfetto

    grazie alka




Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.