![]() |
Zur Laufzeit erstellte Komponente benutzen?
Nabend DP,
Forensuche hat mir leider nicht geholfen... ich habe mit
Delphi-Quellcode:
Ein neues Tab (während der Laufzeit) in meinem PageControl erstellt, welches ein Memo enthält...
var Tab: TTabsheet;
Memo: TMemo; begin Tab := TTabsheet.Create(Form1.PageControl1); tab.Caption := 'Neues Dokument'; tab.PageControl := Pagecontrol1; memo := Tmemo.Create(tab); memo.Parent := tab; memo.Align := alclient; end; Wenn ich jetzt in meinem Menü z.b "Kopieren" klicke möchte ich den makierten Text im Memo, welches auf dem aktiven Tab ist kopieren... Doch wie spreche ich das Memofeld an wenn ich z.b. 5 Tabs habe? Ich habe ja keinen bestimmten namen mit dem ich einfach
Delphi-Quellcode:
benutzen kann
Memo1.CopyToClipboard
Ich hoffe ihr habt meine etwas komische Erklärung jetzt verstanden :D danke schonmal, draGo |
Re: Zur Laufzeit erstellte Komponente benutzen?
leg die tab variable in das public der form und sprich es dann einfach über den namen an.
|
Re: Zur Laufzeit erstellte Komponente benutzen?
Hi fwsp,
ähm..Bahnhof :) Du meinst ich soll die TabVariable ins Public legen... also:
Delphi-Quellcode:
Jedoch kann ich dann trotzdem das Memo nicht über Tab.Memo ansprechen :gruebel:
public
{ Public declarations } Tab: TTabsheet; Hab ich dich falsch verstanden oder bin ich zu blöd? :D mfg draGo |
Re: Zur Laufzeit erstellte Komponente benutzen?
leg das memo auch ins public und dann kannst du es ganz normal ansprechen.
//Edit sind doch beides elemente der form. |
Re: Zur Laufzeit erstellte Komponente benutzen?
Hi fwsp,
nein das geht nicht ^^ Denn durch den obigen Code wird das Memo ja erst erstellt sobald das neue Tab erstellt wird... Somit kann ich es ja nicht vor seiner Existenz ansprechen. mfg draGo |
Re: Zur Laufzeit erstellte Komponente benutzen?
|
Re: Zur Laufzeit erstellte Komponente benutzen?
Hm...
also mit
Delphi-Quellcode:
kann ich nicht auf Finden.CopyToClipboard zugreifen...
Finden := FindComponent('test');
//bzw: Finden := FindComponent('test') as TMemo; Langsam zweifel ich an meinem Gedächtnis :gruebel: Außerdem: Wenn ich 5 Tabs habe (und somit 5 Memos), wie kann ich denen alle gewisse Namen zuweisen mit denen ich auf sie zugreife? Schließlich kann ich ja nicht immer den selben Namen verwenden :gruebel: |
Re: Zur Laufzeit erstellte Komponente benutzen?
Delphi-Quellcode:
sollte eigentlich gehen.
with FindComponent('test') as TMemo do begin
CopyToClipboard; end; Zum 2. Problem: du erstellst die Memos in einer Schleife und beziehst deine Schleifenvariable i in den Namen ein - schon hast du eindeutige Namen die du verwenden kannst! |
Re: Zur Laufzeit erstellte Komponente benutzen?
Liste der Anhänge anzeigen (Anzahl: 1)
Hi meflin,
Delphi-Quellcode:
macht keinen Ärger beim kompilieren, ruft jedoch folgenden Fehler aus sobald man kopieren drückt (Anhang)
with FindComponent('test') as Tmemo do
CopyToClipboard; Deiner Lösung zum zweiten Problem widme ich mich gleich ^^ |
Re: Zur Laufzeit erstellte Komponente benutzen?
Frage: was soll
Delphi-Quellcode:
eigentlich sein? Mein Delphi kennt das irgendwie nicht :stupid:
CopyToClipboard;
Noch ne ösung zu deinem 2. Problem: ein (public) array of TMemo verwenden! Damit könntest du dir dann auch FindComponent sparen... |
Re: Zur Laufzeit erstellte Komponente benutzen?
Zitat:
Delphi-Quellcode:
ist der normale Befehl.
Memox.CopytoClipboard;
|
Re: Zur Laufzeit erstellte Komponente benutzen?
Tatsächlich, kleiner Fehler meinerseits.
Delphi-Quellcode:
funktioniert einwandfrei! du hast also irgendwo einen Fehler drin...
procedure TForm2.Button1Click(Sender: TObject);
var Memo: TMemo; begin Memo := TMemo.Create(self); Memo.Parent := Form2; Memo.Name := 'test'; Memo.Top := 50; Memo.Left := 50; Memo.Width := 100; Memo.Height := 100; Memo.BringToFront; end; procedure TForm2.Button2Click(Sender: TObject); begin with FindComponent('test') as TMemo do CopyToClipboard; end; |
Re: Zur Laufzeit erstellte Komponente benutzen?
Ich habs mit
Delphi-Quellcode:
bemacht. hat auch soweit funktioniert.
TMemo(PageControl1.ActivePage.Controls[0]).CopyToClipboard;
PS: Wenn dein Memo nicht das erste Control ist, musst die Controls[0] durch 1,2,etc ersetzen. |
Re: Zur Laufzeit erstellte Komponente benutzen?
Hi meflin,
habs jetzt mal mit delphi 2006 probiert. Da gehts auf einmal...*blöd schau*. Danke dir :) //Edit: wo war der rote kasten -.-' @Cyber: werde es auch ausprobieren, danke ^^ |
Re: Zur Laufzeit erstellte Komponente benutzen?
Hallo nochmal :)
Sorry, wenn ich das Thema nochmal hochhole (Doppelpost), aber ich muss mich ja bemerkbar machen :angel2: Eine Frage zum Thema hab ich noch. Und zwar: Wenn ich das Memo mit
Delphi-Quellcode:
anspreche, wie kann ich dann das OnKeyDown/Up Ereignis abfangen?
TMemo(PageControl1.ActivePage.Controls[0]).befehl
Müsste ja irgendetwas mit
Delphi-Quellcode:
sein, jedoch blick ich da noch nicht so ganz durch... :gruebel:
TMemo(PageControl1.ActivePage.Controls[0]).OnKeyDown
Danke für eure Hilfe, mfg draGo. |
Re: Zur Laufzeit erstellte Komponente benutzen?
Du musst erst ein OnKeyDown Erreignis erstellen und dann beim Erstellen der neuen Komponente dieses erreignis bekoannt machen.
Delphi-Quellcode:
Die Prozedur MemoKeyDown muss auch im Interface-Teil bekannt gemacht werden.
var
ts: TTabSheet; mem: TWebBrowser; begin //TabSheet erstellen ts := TTabSheet.Create(PageControl1); ts.Caption := 'Window &' + IntToStr(PageControl.PageCount); ts.PageControl := PageControl1; ts.DoubleBuffered := True; PageControl.ActivePage := ts; //Memo erstellen mem := TMemo1.Create(nil); mem.OnKeyDown := MemoKeyDown; |
Re: Zur Laufzeit erstellte Komponente benutzen?
Ahh, vielen Dank :)
Funktioniert gut ^^ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40 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 by Thomas Breitkreuz