Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Prism Item/TPageControl zur Designzeit im Frame (https://www.delphipraxis.net/108674-item-tpagecontrol-zur-designzeit-im-frame.html)

TheThrust 17. Feb 2008 17:14


Item/TPageControl zur Designzeit im Frame
 
Hallo liebe DP.

Ich habe folgendes Problem:
Ich möchte mehrere Frames über PageControl in meine MainForm zur Laufzeit einbinden.
Die Komponenten befinden sich allerdings schon zur Designzeit auf den Frames.
Alle funktionierte schon perfekt, bis ich ein MemoFeld, eine ComboBox oder ähnliches mit properties wie .Items oder .tabs nutzen wollte.

Wenn schon zur Designzeit Items oder Tabs vorhanden waren bekam ich beim kompilieren folgende Fehlermeldung:
Zitat:

Error reading ComboBox1.Items.Strings: Control 'Frame1' has no parent window
Ich habe schon alle möglichen 'Parent'-Properties gesetzt, einschließlich der der ComboBox und des Frames, ich weiß einfach nicht mehr weiter...

Wenn ich die Items erst zur Laufzeit erstellen lasse, habe ich keinerlei Probleme, nur einen riesen Aufwand, den ich wenn möglich vermeiden möchte...

Ich freue mich über jede Lösung bzw. Denkanstöße ;-)

mfg TheThrust

mimi 17. Feb 2008 17:54

Re: Item/TPageControl zur Designzeit im Frame
 
Ich meine du müsstest bevor die Frams nutzt doch noch ein FramSet platzieren... bzw. hinzufügen. Das ist sowas wie ein From.... Aber ich habe Delphi schon länger nicht mehr genutzt... Schau mal bei Delphi unter Neu ob du da was mit FrameSet findest.

TheThrust 17. Feb 2008 21:52

Re: Item/TPageControl zur Designzeit im Frame
 
Das klingt irgentwie logisch, aber ich kann in meiner Tool-Palette kein FrameSet finden, kann es sein, dass ich noch eine extra dll brauche?

mimi 18. Feb 2008 12:31

Re: Item/TPageControl zur Designzeit im Frame
 
Ich meinte ja auch nicht die Komponenten leiste sondern das Neu Menu unter Datei. Da solltest du sowas finden in dieser Richtung, wenn du Delphi benutzt. Ich weiß aber nicht genau ab wann es FramSet gibt in Delphi. Kann sein da du ein Version hast in der du kein FramSet hast.

also nochmal:
MenuPunkt Datei, Neu..., und Irgendwo dort im Dialog sollte sich ein Eintrag verstecken der FramSet oder so ähnlich heißt. Wenn ich mich nicht irre.

marabu 18. Feb 2008 13:36

Re: Item/TPageControl zur Designzeit im Frame
 
Herzlich willkommen in der Delphi-PRAXiS, TheThrust.

FrameSet ist wohl eher ein HTML-Element.

Kannst du ein Miniprojekt bereitstellen - mit einer Anleitung, wie dein Problem nachvollzogen werden kann?

Freundliche Grüße

TheThrust 18. Feb 2008 19:57

Re: Item/TPageControl zur Designzeit im Frame
 
Danke :-D

Ok, ein kleines Beispiel also: Es handelt sich hierbei um ein Form mir 4 eingebundenen Frames:

Delphi-Quellcode:
unit main_fr;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, fr0, fr1, fr2, fr3, Borland.Vcl.Menus, System.ComponentModel,
  Borland.Vcl.StdCtrls, Borland.Vcl.ComCtrls;

type
  Tmain_form = class(TForm)
    MainMenu1: TMainMenu;
    Start1: TMenuItem;
    test1: TMenuItem; //Dies hier ist der Auslöser zum Einbinden der Frames
    Forschung1: TMenuItem;
    PageControl1: TPageControl;
    procedure test1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  main_form: Tmain_form;

implementation

{$R *.nfm}

var
  fr : array[0..3] of TFrame;

procedure Tmain_form.test1Click(Sender: TObject);
var
p : TTabSheet;
i : integer;
begin
  for i := 0 to 3 do
  begin
    p := TTabSheet.Create(PageControl1);
    p.PageControl := PageControl1;
    p.Name := 'nummer_' + IntToStr(i);
    p.Caption := 'caption_' + IntToStr(i);
    p.Show;
    fr[i].parent := p;
    fr[i].Show;
  end;
end;

procedure Tmain_form.FormCreate(Sender: TObject);
begin
  fr[0] := fr0.TFrame1.Create(self);
  fr[1] := fr1.TFrame4.Create(self);
  fr[2] := fr2.TFrame5.Create(self);
  fr[3] := fr3.TFrame6.Create(self);

end;

end.
Per klick auf den Eintrag "test1" im Main-menu werden die Frames den einzelnen Tab-sheets zugewiesen, nachdem per FormCreate-methode die Frames erzeugt wurden.

Auf den Frames befindet sich kein code, es reicht schon ein memofeld mit dem Standard-Item "Memo1" auf eines der Frames zu setzten um den oben erwähnten Fehler zu erzeugen.

Vielen Dank schon mal Im Vorraus

TheThrust

marabu 18. Feb 2008 20:16

Re: Item/TPageControl zur Designzeit im Frame
 
Tritt der Fehler auch auf, wenn du deinen Code leicht abwandelst?

Delphi-Quellcode:
procedure Tmain_form.test1Click(Sender: TObject);
var
  p : TTabSheet;
  i : integer;
begin
  // zuerst etwa vorhandene TabSheets entfernen!
  // ...
  for i := 0 to 3 do
  begin
    p := TTabSheet.Create(PageControl1);
    p.PageControl := PageControl1;
    // p.Name := 'nummer_' + IntToStr(i);
    // p.Caption := 'caption_' + IntToStr(i);
    // p.Show;
    p.Parent := PageControl1; // that's it!
    fr[i].parent := p;
    // fr[i].Show;
  end;
  PageControl1.ActivePageIndex := 0;
end;

TheThrust 18. Feb 2008 22:16

Re: Item/TPageControl zur Designzeit im Frame
 
Ja, tut mir leid, keine Veränderung, immernoch die gleiche Fehlermeldung... :-(

Noch weitere Ideen, oder soll ich euch mal die Dateien uploaden oder ne echse oder so?

MFG TheThrust

marabu 20. Feb 2008 05:49

Re: Item/TPageControl zur Designzeit im Frame
 
Moin,

wenn ich dein Projekt mit D7 öffnen kann, werde ich es mir anschauen.

Freundliche Grüße

TheThrust 20. Feb 2008 21:04

Re: Item/TPageControl zur Designzeit im Frame
 
Habe das Problem jetzt anders gelöst:

Ich habe alles in Delphi 7 kopiert, nichts verändert und es läuft, weiß der Henker, wo dort der Fehler war.
Aber:

Ohne
Delphi-Quellcode:
    p.Parent := PageControl1; // that's it!
funktioniert es dann doch nicht, also hätte ich auch so hier posten müssen.

Vielen Dank also für die Hilfe!!! :hello:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:19 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