![]() |
Memo per ButtonClick schliessen
hoi
ich erstelle zur laufzeit 1 button, 1 memo, 1 tabsheet.
Delphi-Quellcode:
Type TFenster = Record
TabSheet: TTabSheet; Memo: TMemo; Button: TButton; end; ... var dynArray: Array of TFenster; ... procedure TForm1.ButtonClick(Button: TObject); var nummer: string; begin with Button as TButton do begin nummer := Name; delete(nummer, 1, 6); // 1-6 = 'Button' showmessage('Memo' + nummer); (FindComponent('Memo' + nummer) as TMemo).Free; end; end; ... procedure TForm1.ButtonlClick(Sender: TObject); begin SetLength(dynArray, high(dynArray)+2); dynArray[high(dynArray)].TabSheet := TTabSheet.Create(self); with dynArray[high(dynArray)].TabSheet do begin Name := 'TabSheet' + IntToStr(high(dynArray)+1); Caption := 'hi'; PageControl := PageControl1; Show; end; dynArray[high(dynArray)].Memo := TMemo.Create(self); with dynArray[high(dynArray)].Memo do begin Name := 'Memo' + IntToStr(high(dynArray)+1); Parent := dynArray[high(dynArray)].TabSheet; Left := 10; Top := 10; Height := dynArray[high(dynArray)].TabSheet.Height-20; Width := dynArray[high(dynArray)].TabSheet.Width-20; Show; end; dynArray[high(dynArray)].Button := TButton.Create(self); with dynArray[high(dynArray)].Button do begin Name := 'Button' + IntToStr(high(dynArray)+1); Parent := dynArray[high(dynArray)].TabSheet; Left := 50; Top := 50; Height := 21; Width := 70; Show; OnClick := ButtonClick; end; end; wies geht mein memo per Free nicht weg? |
Re: Memo per ButtonClick schliessen
Moin Pseudemys Nelsoni,
das dürfte daran liegen, dass Dein FindComponent im ButtonClick fehlschlägt. Ohne Angabe der zugehörigen Kompo wird das FindComponent des Formulares benutzt, da es in einer Methode des Formulares aufgerufen wird, der Parent für das Memo ist aber das Tabsheet. Somit ist das Memo nicht im Array of Components des Formulares enthalten, und wird dort nicht gefunden. |
Re: Memo per ButtonClick schliessen
hoi,
krieg ichn tip :oops: selbst wenn ich überall als Parent Form1 angebe gehts nicht, hmm |
Re: Memo per ButtonClick schliessen
Moin Pseudemys Nelsoni,
dann leg' doch mal in der ButtonClick Routine noch eine Variable vom Typ TComponent an, und weise dieser das Ergebnis von FindComponent zu, statt es direkt zu benutzen. Anschliessend kannst Du dann ja prüfen, ob FindComponent erfolgreich war oder nicht (Wert der Variablen <> nil => gesuchte Kompo gefunden) |
Re: Memo per ButtonClick schliessen
Hallo Christian,
Delphi-Quellcode:
meinst du so? Das funktioniert auch nicht. :\
procedure TForm1.ButtonClick(Button: TObject);
var nummer: string; tc: TComponent; begin with (Button as TButton) do begin nummer := Name; tc := TComponent.Create(self); delete(nummer, 1, 6); // 1-6 = 'Button' tc := FindComponent('Memo' + nummer); tc.Free; end; end; |
Re: Memo per ButtonClick schliessen
Moin Pseudemys Nelsoni,
im Prinzip meinte ich das so, nur, dass Du erst einmal nachschauen solltest, ob tc überhaupt einen gültigen Wert enthält. |
Re: Memo per ButtonClick schliessen
tc erhält "Memo1"
deswegen hab ich s.o im Test auch "showmessage('Memo' + nummer);" mit drin gehabt, hatte nur vergessen das hier für das forum rauszunehmen |
Re: Memo per ButtonClick schliessen
hm, selbst wenn ich findcomponent direkt "Memo!" gebe schlisst sich das memo1 nicht:
Delphi-Quellcode:
procedure TForm1.ButtonClick(Button: TObject);
var tc: TComponent; begin with (Button as TButton) do begin tc := TComponent.Create(self); tc := FindComponent('Memo1'); tc.Free; end; end; |
Re: Memo per ButtonClick schliessen
lag komischerweise daran, das ich das Memo1.free innerhalb von dem with button as tbutton ausgeführt habe, komisch, wieso das? also es geht so:
Delphi-Quellcode:
bzw so:
procedure TForm1.ButtonClick(Button: TObject);
var tc: TComponent; begin tc := TComponent.Create(self); tc := FindComponent('Memo1'); tc.Free; end;
Delphi-Quellcode:
procedure TForm1.ButtonClick(Button: TObject);
begin TMemo(FindComponent('Memo1')).Free; end; |
Re: Memo per ButtonClick schliessen
Moin Pseudemys Nelsoni,
dann schau Dir mal in der Hilfe die Methoden von TButton an. Danach dürfte klar sein, warum es nicht so funktioniert hat. BTW: In meinem ersten Posting hatte ich Dir ja schon vorgeschlagen mit anzugeben, von welcher Kompo Du das FindComponent benutzen willst. Zugegeben, meine Feststellung mit dem Form1.FindComponent war falsch, weil ich das With nicht beachtet hatte, aber bei direkter Angabe der Kompo vor dem FindComponent hätte es auch innerhalb des With-Blockes funktioniert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz