AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi PageControl: in neuem Tab ein Object erstellen
Thema durchsuchen
Ansicht
Themen-Optionen

PageControl: in neuem Tab ein Object erstellen

Ein Thema von DelTurbo · begonnen am 26. Dez 2009 · letzter Beitrag vom 2. Mär 2010
Antwort Antwort
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#1

PageControl: in neuem Tab ein Object erstellen

  Alt 26. Dez 2009, 22:30
Hi,

ich habe gleich zwei fragen. Eventuell auch nur ein verständniss problem. Ich habe mit PageControl ein Objekt erstellt. Nun kann ich mit fogendem Code dort drin tabs erstllen.

Delphi-Quellcode:
procedure TForm1.bc(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to 3 do
    with TTabSheet.Create(PageControl1) do
    begin
      PageControl := PageControl1;
      Name := 'sname' + IntToStr(i);
      Caption := IntToStr(i);
   end;
end;
Ich weiss ist nicht schön, aber zeigt wie man tabs erstellt. Wie kann ich nun in dieser schleife auch eine RichEdit erstellen? Oder anders gefragt, ich weiss wie man z.b. ein RichEdit zur laufzeit erstellt. Sagen wir mal ich möchte nun RichEdit1 in Tab 1 haben, und RichEdit2 in Tab 2 haben usw.

Wegen dem löschen eines tab mit X erstellung bin ich bei euch schon fündig geworden. Das ist aber im moment erstmal zweitrangig für mich.

Danke im voraus
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: PageControl: in neuem Tab ein Object erstellen

  Alt 26. Dez 2009, 22:41
Hallo,

um mal bei deinem Programmierstil zu bleiben

Delphi-Quellcode:
var
  i: Integer;
  NewTab: TTabSheet;
begin
  for i := 0 to 3 do
  begin
    NewTab := TTabSheet.Create(PageControl1);
    with NewTab do
    begin
      PageControl := PageControl1;
      Name := 'sname' + IntToStr(i);
      Caption := IntToStr(i);

      with TRichEdit.Create(NewTab) do
      begin
        Parent := NewTab;
        Name := 'RichEdit' + IntToStr(i);
        Text := Name;
      end;
    end;
  end;
end;
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#3

Re: PageControl: in neuem Tab ein Object erstellen

  Alt 27. Dez 2009, 10:53
Hi,

erstmal vielen dank. Ich glaube nun blick ich da endlich durch. Ich fasse mal zusammen was ich meine nun zu wissen.

Jedes object hat ein .Create und ein .Create(handle). In diesem handle steht immer das übergeordnete object drin. Um mal bei unserem beipiel zu bleiben.

RichEdit.Create(PageControl1) erzeugt mir ein RichEdit dessen "vater" in dem fall das tab wäre. Ständ dort RichEdit.Create(Form1) wäre der "vater" die Form1 und könnte logischer weise nicht vom PageControl gehandlet werden.

Möchte ich z.b. noch einen text (Label) in dem tab haben kann ich das auch einfach mit TLabel.Cerate(new) machen. Und dann natürlich noch die parameter setzten. Also Top,Left,Caption farben usw.

Genauso muss ich bei dem RichEdit was wir erstellen noch die Positionnen eintragen. Ich denke da der vater das tab ist, ist z.b. Top:=0 Left:=0 nicht linkoben in der Form sondern links oben vom tab. Die höhe und breite muss ich dann vom tab auslesen und dementsprechend in das RichEdit eintragen.

Ich hoffe ich habs richtig verstanden.

Sorry wenn ich soviel fragen muss, aber ich habe bisher nur Assembler (auf div. CPU z.b. 6502,8088,68k,PIC usw.) dann TurboPascal7 (DOS) und diverse algorythmen geschrieben. Dann kam unix mit diversen Daemons (in C und FreePascal) und dann kam PHP, CGI usw. Mit Windows und dem handling hatte ich noch nie was zu tun. Ich weiss zwar was ich progen möchte aber wenn einem das grundverständniss fehlt, oder die syntax, dann steht man halt aufm schlauch.

Schon alleine deswegen finde es toll wie einem hier unter die arme gegriffen wird. Ich versuche zwar viel selber rauszufinden, über google und die suchfunktion hier, aber das dauert immer sehr lange und frustet wenn man merkt das der tag wieder rum ist, und man kaum weitergekommen ist.

Vielen dank
  Mit Zitat antworten Zitat
viakt133

Registriert seit: 16. Feb 2010
18 Beiträge
 
Lazarus
 
#4

Re: PageControl: in neuem Tab ein Object erstellen

  Alt 2. Mär 2010, 07:33
Hallo,

Und wie kann ich danach auf dieses RichEdit zugreifen?

Wenn ich zum Beispiel nach Wechsel der Registerseite in dem RichEdit auf der neuen Registerseite etwas machen will, wozu ich den Zeiger auf das jetzt aktive RichEdit brauche?

Geht das dann einfach über die Name-Eigenschaft?

Ich frage das gleich hier, weil davon der optimale Programmierstil für das Einfügen des RichEdit beim Aufbau der Seiten abhängen könnte.
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#5

Re: PageControl: in neuem Tab ein Object erstellen

  Alt 2. Mär 2010, 10:21
Nein, nicht über den namen. Sondern über das Handle was du beim .Create bekommst. Du kannst dann auch sachen ins RichEdit schreiben oder sonstwas machen, auch wenn es nicht sichtbar ist.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#6

Re: PageControl: in neuem Tab ein Object erstellen

  Alt 2. Mär 2010, 12:14
Zitat von DelTurbo:
Jedes object hat ein .Create und ein .Create(handle). In diesem handle steht immer das übergeordnete object drin.
Ich gehe mal davon aus, dass du mit Objekt nur Komponenten meinst. Diese haben einen Owner als übergeordnetes Element. Es gibt es keinen parameterlosen Konstruktor, sondern nur Create(AOwner), dem man den gewünschten Owner der Komponente übergibt. Bei Controls kommt als zweites übergeordnetes Element noch der Parent dazu - siehe Owner vs. Parent in Delphi Applications.

Zitat von DelTurbo:
Nein, nicht über den namen. Sondern über das Handle was du beim .Create bekommst. Du kannst dann auch sachen ins RichEdit schreiben oder sonstwas machen, auch wenn es nicht sichtbar ist.
Das Handle heißt Referenz oder auch einfach Variable.

Mein Ratschlag dazu wäre: Schmeißt die ganzen withs aus dem Code raus, dann wird diese ganze Diskussion überflüssig.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
  NewTab: TTabSheet;
  RichEdit: TRichEdit;
begin
  for i := 0 to 3 do
  begin
    NewTab := TTabSheet.Create(Self);
    NewTab.PageControl := PageControl1;
    NewTab.Name := 'sname' + IntToStr(i);
    NewTab.Caption := IntToStr(i);

    RichEdit := TRichEdit.Create(Self);
    RichEdit.Parent := NewTab;
    RichEdit.Name := 'RichEdit' + IntToStr(i);
    RichEdit.Text := RichEdit.Name;
  end;
end;
Ich hab hier als Owner überall die Form übergeben. Die Hierarchie wird über die Parents hergestellt. So macht's auch Delphi, wenn man die Komponenten per Formdesigner erstellt.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: PageControl: in neuem Tab ein Object erstellen

  Alt 2. Mär 2010, 12:21
Zitat von uligerhardt:
Mein Ratschlag dazu wäre: Schmeißt die ganzen withs aus dem Code raus, dann wird diese ganze Diskussion überflüssig.
Ich unterstütze den Antrag! Hätte Dijkstra das with kennengelernt, so hätte er sicherlich "With considered harmfull" geschrieben.


Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  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 14:59 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