Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TabSheet zur Laufzeit eintragen? (https://www.delphipraxis.net/102201-tabsheet-zur-laufzeit-eintragen.html)

Tommy1988 24. Okt 2007 22:01


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 :(

mkinzler 24. Okt 2007 22:05

Re: TabSheet zur Laufzeit eintragen?
 
Natürlich
Delphi-Quellcode:
TPageControl.Pages.Add

Tommy1988 24. Okt 2007 22:10

Re: TabSheet zur Laufzeit eintragen?
 
"Natürlich"

Willst du das anfächten?
Ich Nachinein habe ich das gefunden, und es klappt auch
http://www.delphipraxis.net/internal...ntrol+laufzeit

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?

mkinzler 24. Okt 2007 22:13

Re: TabSheet zur Laufzeit eintragen?
 
Delphi-Quellcode:
Memo := TMemo.Create( self);
Memo.Parent := Tab;
Memo.Left := ..
Memo.Top := ..
...

Tommy1988 24. Okt 2007 22:18

Re: TabSheet zur Laufzeit eintragen?
 
Vorher hatte ich es mal so probiert:

Delphi-Quellcode:
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';
Das klappt soweit auch, wenn er das Memo nicht ständig auf TabSheet 1 schicken würde :idea:
Edit:
Delphi-Quellcode:
Memo.Parent := Tab;
Diese Zeile war es..

Danke :thumb: Ich werd mir das mal ansehen alles und durchdenken

Tommy1988 24. Okt 2007 22:37

Re: TabSheet zur Laufzeit eintragen?
 
Delphi-Quellcode:
Memo := TMemo.Create(self);
Jetzt habe ich aber noch ein Problem
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...');

Chemiker 24. Okt 2007 22:42

Re: TabSheet zur Laufzeit eintragen?
 
Hallo Tommy1988,

Delphi-Quellcode:
MemoX := TMemo.Create(self);
Dann müsste es funktionieren.

Bis bald Chemiker

Tommy1988 24. Okt 2007 23:03

Re: TabSheet zur Laufzeit eintragen?
 
Ich gebs auf
Delphi-Quellcode:
Memo1.SaveToFile(Fn);
Das, was oben steht funktioniert natürlich, aber mit dem "erstellten" Memo natürlich nicht.

ALso ich hab null ahnung wie ich da verfahren soll..

- Ich gebs auf -

Chemiker 24. Okt 2007 23:44

Re: TabSheet zur Laufzeit eintragen?
 
Hallo Tommy1988,

Du kannst doch das Memo wie beschrieben erstellen.

Delphi-Quellcode:
  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');
Bis bald Chemiker

Tommy1988 24. Okt 2007 23:59

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.

Muetze1 25. Okt 2007 00:03

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?

Tommy1988 25. Okt 2007 00:38

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:

Muetze1 25. Okt 2007 00:42

Re: TabSheet zur Laufzeit eintragen?
 
Zitat:

Zitat von Tommy1988
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:

Und warum legst du dir dann nicht eine Variable an, welche mehr als eine Instanz halten kann? Delphi-Referenz durchsuchenArray of, Delphi-Referenz durchsuchenTObjectList, verkettete Liste, etc?

Tommy1988 25. Okt 2007 00:51

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

Tommy1988 25. Okt 2007 01:09

Re: TabSheet zur Laufzeit eintragen?
 
Nein, ich gebs vollkommen auf!

Delphi-Quellcode:
page[1] := Memo;
Wie das mit dem Arrays funktioniert, was sie machen, wie sie etwas machen usw ist mir jetzt klar..

aber ich habe null Ahnung wie ich an mein Problem rangehen soll

mkinzler 25. Okt 2007 06:36

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:
Memo.Name := 'Memo';
Später kannst du dann mit
Delphi-Quellcode:
(PageControl2.Pages[PageControl2.ActivePage].FindComponent( 'Memo') as TMemo).Lines.SaveToFile(<Dateiname>);
den Inhalt sichern.

Chemiker 25. Okt 2007 06:48

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:
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;
Damit wird das Memo aufgerufen:

Delphi-Quellcode:
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;
Das ist nur ein Beispiel es gibt noch andere Möglichkeiten.

Bis bald Chemiker

mkinzler 25. Okt 2007 07:10

Re: TabSheet zur Laufzeit eintragen?
 
@Chemiker: Ich glaube sein Problem ist nicht, daß das Speichern kurz nach dem Erzeugen nicht klappt, sondern später.

Tommy1988 25. Okt 2007 12:07

Re: TabSheet zur Laufzeit eintragen?
 
Zitat:

sondern später.
Ja genau das, leider.

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

mkinzler 25. Okt 2007 12:11

Re: TabSheet zur Laufzeit eintragen?
 
Schau mal #16, dort wird das memo des aktiven Tab angesprochen.

Tommy1988 1. Nov 2007 19:18

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:
fCompletionProposal.OnAfterCodeCompletion := AfterCodeCompletion;
Sourcecode im Anhang

mkinzler 1. Nov 2007 19:23

Re: TabSheet zur Laufzeit eintragen?
 
Eine Eventmethode muss eine Methode und keine frei Prozedur sein.

Tommy1988 1. Nov 2007 19:46

Re: TabSheet zur Laufzeit eintragen?
 
Zu oben Pist #16:

Delphi-Quellcode:
(PageControl1.Pages[PageControl1.ActivePage].FindComponent
(fCompletionProposal.Name) as
TMemo).Lines.SaveToFile('filename.ext');
[Fehler] Unit1.pas(404): E2010 Inkompatible Typen: 'Integer' und 'TTabSheet'

Wo hat denn da der Code was mit Integer zu tun :gruebel:
Also ich mein, ich findde da nix

mkinzler 1. Nov 2007 19:53

Re: TabSheet zur Laufzeit eintragen?
 
Dann ändere den Typ doch

Tommy1988 1. Nov 2007 20:00

Re: TabSheet zur Laufzeit eintragen?
 
Zitat:

Zitat von mkinzler
Dann ändere den Typ doch

Auf welchen Poist war das jezt bezogen?

mkinzler 1. Nov 2007 20:06

Re: TabSheet zur Laufzeit eintragen?
 
Auf den ursprünglichen Beitrag 23

Zu #16, war wohl zu früh:

Delphi-Quellcode:
PageControl1.ActivePage.FindComponent

Tommy1988 1. Nov 2007 21:11

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