AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Komponeten zerstören

Ein Thema von LoL · begonnen am 1. Okt 2003 · letzter Beitrag vom 2. Okt 2003
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
LoL
(Gast)

n/a Beiträge
 
#1

Komponeten zerstören

  Alt 1. Okt 2003, 20:26
hi

ich erzeuge komponeten zur laufzeit. nun will ich diese zerstören. ich will dafür ne allgemein prozedur verwenden etwa so:
Delphi-Quellcode:
procedure Destroy_Component(Compo : TComponent);
begin
  if Compo <> nil then
    begin
      Compo.Destroy;
      Compo := nil;
      Compo.Free;
    end;
end;
das zerstören klappt auch so weit.
wenn ich aber diese komponenten die zerstört ist, wieder erstellen will frage ich
Delphi-Quellcode:
if not(assigned(Compo )) then <--Compo ist die zertörte komponete
....
erstellen der komponente
diese abfrage ist aber false!, d.h. die komponente existiert noch.

wenn ich aber die komponete ohne diese prozedur zerstöre also manuell(z.b. ein panel):
Delphi-Quellcode:
panel.destroy;
panel := nil;
panel.free;
und dann die abfrage mache ob die komponente noch existiert ist diese true! obwohl ich das selbe gemacht habe?

wer kann mir helfen
  Mit Zitat antworten Zitat
Dagon

Registriert seit: 13. Jul 2003
505 Beiträge
 
Delphi 7 Professional
 
#2

Re: Komponeten zerstören

  Alt 1. Okt 2003, 20:29
Versuchs mal mit FreeAndNil:

Delphi-Quellcode:
procedure Destroy_Component(Compo : TComponent);
begin
  if Compo <> nil then
    FreeAndNil(Compo);
end;
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#3

Re: Komponeten zerstören

  Alt 1. Okt 2003, 20:33
will ich nicht kannst du mir sagen woran es liegt
  Mit Zitat antworten Zitat
Dagon

Registriert seit: 13. Jul 2003
505 Beiträge
 
Delphi 7 Professional
 
#4

Re: Komponeten zerstören

  Alt 1. Okt 2003, 20:39
1. Mit Assignde prüfst du ob der Zeiger (hier Compo) den Wert nil hat.

2. Folgendes steht in der OH:
Zitat:
Assigned gibt false zurück, wenn P den Wert nil hat, andernfalls true.
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#5

Re: Komponeten zerstören

  Alt 1. Okt 2003, 20:47
wenn ich die komponente nach obiger prozedur zertöre und frei gebe dann ist sie nil: also warum gibt dann assign true zurück?
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Komponeten zerstören

  Alt 1. Okt 2003, 20:54
Ersetz mal
Delphi-Quellcode:
procedure Destroy_Component(Compo : TComponent);
begin
  if Compo <> nil then
    begin
      Compo.Destroy;
      Compo := nil;
      Compo.Free;
    end;
end;
durch
Delphi-Quellcode:
procedure DestroyComponent(Compo: TComponent);
begin
  if Compo <> nil then
  begin
    Compo.Free;
    Compo := nil;
  end;
end;
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Dagon

Registriert seit: 13. Jul 2003
505 Beiträge
 
Delphi 7 Professional
 
#7

Re: Komponeten zerstören

  Alt 1. Okt 2003, 20:55
Es gibt false zurück!

Du hast ja geschrieben if not(assigned(Compo)) = true ....
Das würde also beduten, diese Aussage ist wahr, wenn Assigned False zurückgibt.

Ergo: Compo ist Nil!
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#8

Re: Komponeten zerstören

  Alt 1. Okt 2003, 21:13
Die Funktion Assigned prüft, ob ein Zeiger oder eine Prozedurvariable den Wert NIL hat (nicht zugewiesen ist).

if Assigned(Component) then //Instanz erstellt

ich frage ja bevor ich die komponete erstelle ob sie nil ist. falls sie nämlich scho existiert bekomme ich ja ne exception!
  Mit Zitat antworten Zitat
Dagon

Registriert seit: 13. Jul 2003
505 Beiträge
 
Delphi 7 Professional
 
#9

Re: Komponeten zerstören

  Alt 1. Okt 2003, 21:15
Das ist genau das was ich gemeint habe.
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#10

Re: Komponeten zerstören

  Alt 1. Okt 2003, 21:28
also passt die abfrage aber was ist der unterschied zwischen dem zerstören in der prozedur und der manuellen zerstörung?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz