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/)
-   -   Delphi Splitter zur Laufzeit erzeugen? (https://www.delphipraxis.net/44616-splitter-zur-laufzeit-erzeugen.html)

schuetze09 21. Apr 2005 18:09


Splitter zur Laufzeit erzeugen?
 
Hallo,

irgendwie klappt es nicht den Splitter an die Stelle zu kriegen wo er hin soll.

Ich habe ein Pagecontroll, darauf erstelle ich zur laufzeit immer Tabsheets.
In den Tabsheets erstelle ich ein Synedit (alTop), ein VirtualTreeview (alClient) und eine Statusbar (alBottom). Nun soll der Splitter zwichen Synedit und Treeview...
Ich krieg's einfach nicht. Ich habe mir zwar schon zahlreiche Threads dazu durchgelesen, aber leider hat es bisher noch nicht funktioniert.

so erstelle ich das ganze Zeig:
Delphi-Quellcode:
  Sheet[anzSQL]:=TTabSheet.Create(Form_Main.PageControl_NewTab);
  Sheet[anzSQL].Parent:=Form_Main.PageControl_NewTab;
  Sheet[anzSQL].PageControl:=Form_Main.PageControl_NewTab;
  SQL_Edit[anzSQL]:=TSynEdit.Create(Sheet[anzSQL]);
  SQL_Edit[anzSQL].Parent:=Sheet[anzSQL];
  VST_Edit[anzSQL]:=TVirtualStringTree.Create(Sheet[anzSQL]);
  VST_Edit[anzSQL].Parent:=Sheet[anzSQL];
  Splitt[anzSQL]:=TSplitter.Create(Sheet[anzSQL]); // Wie geht das?????
  Splitt[anzSQL].Parent:=Sheet[anzSQL];
  Splitt[anzSQL].Align:=alTop;

MfG
schuetze09

alcaeus 21. Apr 2005 18:12

Re: Splitter zur Laufzeit erzeugen?
 
Hallo schuetze09,

ohne deinen Code getestet haben, laesst sich folgendes sagen: du musst die Komponenten in einer bestimmten Reihenfolge auf die Form setzen. Also zuerst SynEdit erstellen, und auf alTop setzen, danach den Splitter auch mit alTop. Anschliessend die Statusbar und auf alBottom setzen, und zum Schluss kommt noch die VirtualTreeView mit alClient. Wenn du die VTV nicht als letztes erstellst, ist saemtlicher Platz auf dem TabSheet weg und es ist kein Platz mehr fuer den Splitter.
Ich hoffe das hilft ein wenig...

Greetz
alcaeus

schuetze09 21. Apr 2005 18:31

Re: Splitter zur Laufzeit erzeugen?
 
habe ich gemacht, geht aber auch nicht. da sitzt der Splitter über dem Synedit

SirThornberry 21. Apr 2005 18:54

Re: Splitter zur Laufzeit erzeugen?
 
Der Splitter funktioniert natürlich auch nur wenn du bei den anderen beiden Controls das Align auf alTop bzw. das andere dann noch auf alClient setzt. Du musst eben genau die gleichen Properties setzen die du auch zur designzeit im Objectinspektor setzen würdest.

folgendes Beispiel funktioniert (anstelle der Panels musst du dann eben deine anderen Componenten verwenden)
Delphi-Quellcode:
var PanelTop, PanelMiddle, PanelBottom: TPanel;
    Splitter: TSplitter;
begin
  PanelTop := TPanel.Create(nil); //dein Synedit
  PanelTop.Parent := Self;
  PanelTop.Align := alTop;
  PanelTop.Caption := 'Top';

  Splitter := TSplitter.Create(nil);
  Splitter.Parent := Self;
  Splitter.Align := alTop;

  PanelBottom := TPanel.Create(nil); //deine StatusBar
  PanelBottom.Parent := Self;
  PanelBottom.Align := alBottom;
  PanelBottom.Caption := 'Bottom';

  PanelMiddle := TPanel.Create(Self); //dein VirtualTreeView
  PanelMiddle.Parent := Self;
  PanelMiddle.Align := alClient;
  PanelMiddle.Caption := 'Middle';

schuetze09 22. Apr 2005 05:45

Re: Splitter zur Laufzeit erzeugen?
 
Leider geht es auch nicht, hier mal mein Code:
Delphi-Quellcode:

  SetLength(Sheet, anzSQL +1);
  SetLength(SQL_Edit, anzSQL +1);
  SetLength(VST_Edit, anzSQL +1);
  SetLength(Splitt, anzSQL +1);
  SetLength(STB_Edit, anzSQL +1);

  // TabSheet erstellen
  Sheet[anzSQL]:=TTabSheet.Create(Form_Main.PageControl_NewTab);
  Sheet[anzSQL].Parent:=Form_Main.PageControl_NewTab;
  Sheet[anzSQL].PageControl:=Form_Main.PageControl_NewTab;
  Sheet[anzSQL].Caption:='Query '+ IntToStr(anzSQL);

  // SQL-Edit erstellen (Synedit)
  SQL_Edit[anzSQL]:=TSynEdit.Create(Sheet[anzSQL]);
  SQL_Edit[anzSQL].Parent:=Sheet[anzSQL];
  with SQL_Edit[anzSQL] do
  begin
    Align:=alTop;
    ActiveLineColor:=clCream;
    Highlighter:=Form_Main.SynSQLSyn1;
    BorderStyle:=bsNone;
    SelectedColor.Background:=clHighlight;
    SelectedColor.Foreground:=clBtnHighlight;
    ShowHint:=True;
    Hint:='Hier Abfrage eintragen';
    Gutter.AutoSize:= True;
    Gutter.Color:= clSkyBlue;
    Gutter.BorderColor:= clSkyBlue;
    Gutter.Font.Color:= clWindowText;
    Gutter.Font.Height:= -11;
    Gutter.Font.Name:= 'Courier New';
    Gutter.Font.Style:= [];
    Gutter.LeftOffset:= 0;
    Gutter.RightOffset:= 3;
    Gutter.ShowLineNumbers:= True;
    Gutter.Width:= 20;
    Gutter.GradientStartColor:= clHighlight;
    Gutter.GradientEndColor:= clWindow;
    Height:=240;
    WordWrap:=True;
    Name:=NamePrefixSQL + IntToStr(anzSQL);
    Lines.Clear;
    OnKeyDown:=tempVST.SQL_EditOnKeyDown;
  end;

  // Splitter erstellen
  Splitt[anzSQL]:=TSplitter.Create(Sheet[anzSQL]);
  Splitt[anzSQL].Beveled:=True;
  Splitt[anzSQL].AutoSnap:=False;
  Splitt[anzSQL].Align:=alTop;

  // Statusbar erstellen
  STB_Edit[anzSQL]:=TStatusBar.Create(Sheet[anzSQL]);
  STB_Edit[anzSQL].Parent:=Sheet[anzSQL];
  with STB_Edit[anzSQL] do
  begin
    Align:=alBottom;
    Panels.Add;
    Panels[0].Text:='';
    Panels[0].Width:=200;
    Panels[0].Alignment:=taCenter;
    Panels.Add;
    Panels[1].Text:='';
    Panels[1].Width:=200;
    Panels.Add;
    Panels[2].Text:='';
  end;

  // VST-Erstellen
  VST_Edit[anzSQL]:=TVirtualStringTree.Create(Sheet[anzSQL]);
  VST_Edit[anzSQL].Parent:=Sheet[anzSQL];
  with VST_Edit[anzSQL] do
  begin
    Align:=alClient;
    BorderStyle:=bsSingle;
    Header.Background:=clSkyBlue;
    Header.Style:=hsFlatButtons;
    Header.Options:=[hoColumnResize,hoDblClickResize,hoDrag,hoVisible];
    TreeOptions.PaintOptions:=[toShowButtons,toShowDropmark,toShowHorzGridLines,toShowTreeLines,toShowVertGridLines,toThemeAware,toUseBlendedImages,toFullVertGridLines];
    TreeOptions.SelectionOptions:=[toFullRowSelect];
    Name:=NamePrefixVST + IntToStr(anzSQL);
    OnInitNode:=tempVST.VST_Edit_OnInitNode;
    OnGetText:=tempVST.VST_Edit_OnGetText;
    OnCompareNodes:=tempVST.VST_Edit_0nCompareNodes;
    OnFreeNode:=tempVST.VST_Edit_0nFreeNode;
    OnHeaderClick:=tempVST.VST_Edit_0nHeaderClick;
  end;
MfG
schuetze09

Kroko1999 22. Apr 2005 06:48

Re: Splitter zur Laufzeit erzeugen?
 
Probiere mal
Delphi-Quellcode:
Splitt[anzSQL].Top := SQL_Edit[anzSQL].Height;

schuetze09 22. Apr 2005 06:53

Re: Splitter zur Laufzeit erzeugen?
 
@Kroko1999: Super DANKE, so geht es...

Reihenfolge wie beschrieben und für den Splitter:
Delphi-Quellcode:
  Splitt[anzSQL]:=TSplitter.Create(Sheet[anzSQL]);
  Splitt[anzSQL].Parent:=Sheet[anzSQL];
  Splitt[anzSQL].Beveled:=True;
  Splitt[anzSQL].AutoSnap:=False;
  Splitt[anzSQL].Top := SQL_Edit[anzSQL].Height;
  Splitt[anzSQL].Align:=alTop;
MfG
schuetze09


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