AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zur Laufzeit erstellte Komponenten freigeben

Ein Thema von BenjaminHelbig · begonnen am 3. Mär 2004 · letzter Beitrag vom 3. Mär 2004
Antwort Antwort
BenjaminHelbig

Registriert seit: 23. Okt 2003
Ort: Mannheim
80 Beiträge
 
Delphi 5 Professional
 
#1

Zur Laufzeit erstellte Komponenten freigeben

  Alt 3. Mär 2004, 09:12
Hi DP'ler

ich habe folgendes Problem:
Ich lasse zur Laufzeit eie Panel erzeugen, welches ich bei Klick auf ein Image innerhalb des Panels wieder freigeben möchte.
Erzeugen lasse ich das Panel mit:

MyPanel := TPanel.Create(Detail1.MainFrame1.QueryFrame1.Panel s2);
MyPanel.Name := 'Panels0';

Bei Klick auf das Image ist foglender Code hinterlegt:

MyPanelTMP := Detail1.MainFrame1.QueryFrame1.FindComponent('Pane ls') as TPanel;
MyPanelTMP.Free;

Das Problem bei der Geschichte ist, dass er MyPanelTMP nil zuweist. Ich vermute einfach mal, dass FindComponent nicht die zur Leufzeit erstellten Komponenten findet, sondern nur die zur Designzeit erstellten, kann das sein? Und wie komme ich da drumrum?

Grüßle Ben
--------
Es ist schon über so viele Dinge Gras gewachsen, dass ich keinem Rasen mehr traue.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#2

Re: Zur Laufzeit erstellte Komponenten freigeben

  Alt 3. Mär 2004, 09:17
Das findet alle Komponenten, egal ob zur Entwurfs-, oder zur Laufzeit erstellt.

Ich vermute mal du läßt FindCompontent an der falschen stelle suchen.

erstellen läßt du das Panel ja als Element von
Detail1.MainFrame1.QueryFrame1.Panels2
und gesucht wird unter
Detail1.MainFrame1.QueryFrame1


Versuch's mal so:
Code:
MyPanel := TPanel.Create(Detail1.MainFrame1.QueryFrame1.Panels2);
MyPanel.Name := 'Panels0';

MyPanelTMP := Detail1.MainFrame1.QueryFrame1.[b]Panels2[/b].FindComponent('Panels') as TPanel;
MyPanelTMP.Free;

[add]
FindComponent durchsucht ja nur das angegebene Objekt und keine Untergeordneten.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: Zur Laufzeit erstellte Komponenten freigeben

  Alt 3. Mär 2004, 09:21
Hallo Benjamin

Auf jeden Fall kannst Du (Wenn das Image direkt auf dem Panel liegt) folgendes versuchen;

Delphi-Quellcode:
procedure TForm1.Image1Click(Sender: TObject);
begin
  Image1.Parent.Free;

  //Folgendes muß sein, damit die Nachricht "On Click" nicht weiter verarbeitet wird
  Abort;
end;
Ciao

marco
Marco Warm
  Mit Zitat antworten Zitat
BenjaminHelbig

Registriert seit: 23. Okt 2003
Ort: Mannheim
80 Beiträge
 
Delphi 5 Professional
 
#4

Re: Zur Laufzeit erstellte Komponenten freigeben

  Alt 3. Mär 2004, 09:39
Hi, das war das Problem, ich muss unter Panel2 suchen.
OK, jetzt stehe ich aber davor, das Teil zu freen. Ich darf ja eine Komponente nicht in einer ihrer Ereignisbehandlungsroutinen freigeben. Wie stelle ich das dann aber an?

Image1.Parent.Free;
abort;

entfällt damit ja leider genauso wir MyPanelTMP.Free;
--------
Es ist schon über so viele Dinge Gras gewachsen, dass ich keinem Rasen mehr traue.
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: Zur Laufzeit erstellte Komponenten freigeben

  Alt 3. Mär 2004, 09:43
Du mußt bloß nach dem freigeben

Abort;

aufrufen - so wird die Ereignisbehandlung nicht forgesetzt und es gibt keinen Fehler.

Nicht die feine Englische - aber es geht

Ciao
Marco
Marco Warm
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#6

Re: Zur Laufzeit erstellte Komponenten freigeben

  Alt 3. Mär 2004, 11:03
Da kannst du ja auch das Freigeben eine andere Prozedur machen lassen, die erst nach dem Beenden der Ereignisprozedur diese Komponente gestartet wird. (z.B. mit einem Timer oder einer Windowsbotschaft an's eigene Programm)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

Re: Zur Laufzeit erstellte Komponenten freigeben

  Alt 3. Mär 2004, 11:08
Ein Timer kann tückisch sein - wenn der Rechner sehr langsam ist oder hängt, kann der Timer u.U. zu früh zuschlagen und zu sehr unangenehmen Resultaten führen
Marco Warm
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#8

Re: Zur Laufzeit erstellte Komponenten freigeben

  Alt 3. Mär 2004, 11:56
Bei der einfach Timer-Komponente (TTimer) braucht man da wohl "keine" Angst zu haben.

Diese kann erst ihre Ereignisprozedur aufrufen, wenn der Hauptthread arbeitet und die Botschaftswarteschlange verarbeitet, denn der arbeitet ja über diese.
Und die Ereignis-Procedur hält ja diesen an, es sei denn, man fügt Application.ProcessMessages; in den Code diese Prozedur mit ein.


Nimm dir z.B. mal 'nen Button und einen Timer mit dem Interval von 1 (ms) und den einfachen Code
Delphi-Quellcode:
Procedure TForm1.Timer1Timer(Sender: TObject);
  Begin
    Caption := IntToStr(StrToIntDef(Caption, 1) + 1);
  End;

Procedure TForm1.Button1Click(Sender: TObject);
  Begin
    Sleep(15000);
  End;
Und dann schau mal auf die Titelleiste und drück den Button ^^
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

Re: Zur Laufzeit erstellte Komponenten freigeben

  Alt 3. Mär 2004, 12:01
@himitsu
kannst du garantieren, daß während des Zerstörens des Panels und seiner Komponenten nich doch irgendwo ProcessMessages aufgerufen wird? - ich würd mich nicht drauf verlassen.
Marco Warm
TUO
TheUnknownOnes.net
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Zur Laufzeit erstellte Komponenten freigeben

  Alt 3. Mär 2004, 12:05
Hallo,
dafür finden sich hier einige Beispiele.
Eine eigene Botschaft via PostMessage an das eigene Programm
hat sich immer bestens bewährt.

http://www.delphipraxis.net/internal...ht=postmessage
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:46 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