![]() |
TabSheet zur Laufzeit eintragen?
Hallo,
wie ist es möglich einen TabSheet zur Laufzeit auf ein PageContrl anzubringen? Habe schon im Forum nachgeguckt, auch Google gefragt, aber ich bekomme keine Antworten :( |
Re: TabSheet zur Laufzeit eintragen?
Natürlich
Delphi-Quellcode:
TPageControl.Pages.Add
|
Re: TabSheet zur Laufzeit eintragen?
"Natürlich"
Willst du das anfächten? Ich Nachinein habe ich das gefunden, und es klappt auch ![]() So, ein TabSheet wird hinzugefügt. Nur die sind ja standardmäßig "leer". Ich habe keine Ahnung ob das geht, aber kann man dort dann sich ein Memo drauf "machen" lassen? |
Re: TabSheet zur Laufzeit eintragen?
Delphi-Quellcode:
Memo := TMemo.Create( self);
Memo.Parent := Tab; Memo.Left := .. Memo.Top := .. ... |
Re: TabSheet zur Laufzeit eintragen?
Vorher hatte ich es mal so probiert:
Delphi-Quellcode:
Das klappt soweit auch, wenn er das Memo nicht ständig auf TabSheet 1 schicken würde :idea:
var
Tab: TTabSheet; Memo: TMemo; begin Tab := TTabSheet.Create(self); Tab.PageControl := PageControl2; Tab.Parent := PageControl2; Memo := TMemo.Create(self); Memo.Parent := PageControl2.ActivePage; Tab.Caption := 'Neuer Tab'; Edit:
Delphi-Quellcode:
Diese Zeile war es..
Memo.Parent := Tab;
Danke :thumb: Ich werd mir das mal ansehen alles und durchdenken |
Re: TabSheet zur Laufzeit eintragen?
Delphi-Quellcode:
Jetzt habe ich aber noch ein Problem
Memo := TMemo.Create(self);
Wenn ich beispielsweise Text in dieses Memo laden lassen möchte, dann kann ich ja garkein Memo angeben, da es ja nicht auf dem Formular ist :idea: Wenn ihr versteht was ich meine ..
Delphi-Quellcode:
MemoX.Lines.LoadFromFile('C:\usw...');
|
Re: TabSheet zur Laufzeit eintragen?
Hallo Tommy1988,
Delphi-Quellcode:
Dann müsste es funktionieren.
MemoX := TMemo.Create(self);
Bis bald Chemiker |
Re: TabSheet zur Laufzeit eintragen?
Ich gebs auf
Delphi-Quellcode:
Das, was oben steht funktioniert natürlich, aber mit dem "erstellten" Memo natürlich nicht.
Memo1.SaveToFile(Fn);
ALso ich hab null ahnung wie ich da verfahren soll.. - Ich gebs auf - |
Re: TabSheet zur Laufzeit eintragen?
Hallo Tommy1988,
Du kannst doch das Memo wie beschrieben erstellen.
Delphi-Quellcode:
Bis bald Chemiker
MemoX:= TMemo.Create(self);
MemoX.parent:= TabSheet2; MemoX.Name:= 'TestMemo'; MemoX.SetBounds(16,185,313,185); // MemoX.lines.Add ('Zeile 1'); // MemoX.Lines.Add ('Zeile 2'); // MemoX.Lines.SaveToFile('C:\temp\test'); MemoX.Lines.LoadFromFile('C:\temp\test'); |
Re: TabSheet zur Laufzeit eintragen?
Das klappt schon ;)
Das Problem ist das Speichern aus dem Memo raus. Ich habe z.B. 2 "so" erstellte Memos in 2 TabSheets. Über Memo.SaveToFile.. kann ich das nicht abspeichern.. Weil da müsste ich wenn schon Memo1.Save... oder Memo2.Save... angeben. |
Re: TabSheet zur Laufzeit eintragen?
Du erstellst dir doch dann auch jeweils eine Memo Instanz pro Page selber (also insgesamt 2): Merke dir diese einfach in 2 Variablen und greife dann entsprechend drauf zu. Wo liegt das Problem?
|
Re: TabSheet zur Laufzeit eintragen?
Die Memos erstelle ich durch eine Procedure.
Also eine extra deklarierte. Dort wird ein via openDialog eine Datei geöffnet. Daher würde die Variable immer überschrieben werden :oops: |
Re: TabSheet zur Laufzeit eintragen?
Zitat:
![]() ![]() |
Re: TabSheet zur Laufzeit eintragen?
Das weis ich leider nicht wie geht.. :(
Ich werde mir das jetzt gleich mal ansehen und eine Testanwendung schreiben. Danach melde ich mich |
Re: TabSheet zur Laufzeit eintragen?
Nein, ich gebs vollkommen auf!
Delphi-Quellcode:
Wie das mit dem Arrays funktioniert, was sie machen, wie sie etwas machen usw ist mir jetzt klar..
page[1] := Memo;
aber ich habe null Ahnung wie ich an mein Problem rangehen soll |
Re: TabSheet zur Laufzeit eintragen?
Du musst zuerst eine Referenz auf das Memo ermittlen. dazu solltest du den dynamisch erzeugten Memos namen geben.
Delphi-Quellcode:
Später kannst du dann mit
Memo.Name := 'Memo';
Delphi-Quellcode:
den Inhalt sichern.
(PageControl2.Pages[PageControl2.ActivePage].FindComponent( 'Memo') as TMemo).Lines.SaveToFile(<Dateiname>);
|
Re: TabSheet zur Laufzeit eintragen?
Hallo Tommy1988,
vielleicht sollt du uns mal die Procedure zeigen, damit man dir gezielt weiterhelfen kann. Du kannst doch im Procedure – Kopf Variablen als var Parameter zurückgeben. Alternativ kann man die Variablen auch unter public in der Form – class anlegen. Das ist die Procedure zum Erstellen:
Delphi-Quellcode:
Damit wird das Memo aufgerufen:
procedure MemoErstellen (var MyMemo: TMemo; FileName: String; Tab:TTabSheet);
begin MyMemo.parent:= Tab; MyMemo.Name:= 'TestMemo'; MyMemo.SetBounds(16,185,313,185); MyMemo.Lines.LoadFromFile(FileName); end;
Delphi-Quellcode:
Das ist nur ein Beispiel es gibt noch andere Möglichkeiten.
procedure TForm1.Button1Click(Sender: TObject);
var MemoX: TMemo; begin MemoX:= TMemo.Create(self); // MemoX:= TMemo.Create(self); // MemoX.parent:= TabSheet2; // MemoX.Name:= 'TestMemo'; // MemoX.SetBounds(16,185,313,185); // MemoX.lines.Add ('Zeile 1'); // MemoX.Lines.Add ('Zeile 2'); // MemoX.Lines.SaveToFile('C:\temp\test'); // MemoX.Lines.LoadFromFile('C:\temp\test'); MemoErstellen (MemoX, 'C:\temp\test', TabSheet2); end; Bis bald Chemiker |
Re: TabSheet zur Laufzeit eintragen?
@Chemiker: Ich glaube sein Problem ist nicht, daß das Speichern kurz nach dem Erzeugen nicht klappt, sondern später.
|
Re: TabSheet zur Laufzeit eintragen?
Zitat:
Hatte es schon versucht, mit zurückgreifen auf den Inhalt des Memos, je nachdem welcher tab aktiv ist. Aber da gibt ja sowas wie ein OnClick-Event nicht. Das macht die Sache schwer |
Re: TabSheet zur Laufzeit eintragen?
Schau mal #16, dort wird das memo des aktiven Tab angesprochen.
|
Re: TabSheet zur Laufzeit eintragen?
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe ein gutes Beispiel gefunden, wie man einen "Tabed-Browser" erstellt.
Nur leider ein Problem beim kompilieren: [Fehler] Unit1.pas(149): E2009 Inkompatible Typen: 'Liste der Parameter ist unterschiedlich' Zeile:
Delphi-Quellcode:
Sourcecode im Anhang
fCompletionProposal.OnAfterCodeCompletion := AfterCodeCompletion;
|
Re: TabSheet zur Laufzeit eintragen?
Eine Eventmethode muss eine Methode und keine frei Prozedur sein.
|
Re: TabSheet zur Laufzeit eintragen?
Zu oben Pist #16:
Delphi-Quellcode:
[Fehler] Unit1.pas(404): E2010 Inkompatible Typen: 'Integer' und 'TTabSheet'
(PageControl1.Pages[PageControl1.ActivePage].FindComponent
(fCompletionProposal.Name) as TMemo).Lines.SaveToFile('filename.ext'); Wo hat denn da der Code was mit Integer zu tun :gruebel: Also ich mein, ich findde da nix |
Re: TabSheet zur Laufzeit eintragen?
Dann ändere den Typ doch
|
Re: TabSheet zur Laufzeit eintragen?
Zitat:
|
Re: TabSheet zur Laufzeit eintragen?
Auf den ursprünglichen Beitrag 23
Zu #16, war wohl zu früh:
Delphi-Quellcode:
PageControl1.ActivePage.FindComponent
|
Re: TabSheet zur Laufzeit eintragen?
Liste der Anhänge anzeigen (Anzahl: 1)
Irgentwas mache ich falsch :(
Anhang |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08: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