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 TPageControl: nach schliesen geht nicht mehr viel :/ (https://www.delphipraxis.net/34271-tpagecontrol-nach-schliesen-geht-nicht-mehr-viel.html)

Red_Dragon 20. Nov 2004 11:08


TPageControl: nach schliesen geht nicht mehr viel :/
 
hi,

also mein problem ist das ich beim schliesen der Tabsheets zwar wieder neue öffnen kann aber eben funktionen wie copy & past oder OpenDialog nicht mehr funktionieren :(

Der Teil zum schliesen:
Delphi-Quellcode:
procedure TForm1.ToolButton15Click(Sender: TObject);
begin
PageControl1.Pages[PageControl1.ActivePageIndex].free;
end;

Der Teil zum Öffnen:
Delphi-Quellcode:
procedure TForm1.NewTabsheet;
begin
  INC (pagecount);
  SetLength (pages,pagecount);
  SetLength (edits,pagecount);
  pages[pagecount-1] := TTabSheet.Create(PageControl1);
  pages[pagecount-1].PageControl := PageControl1;
  pages[pagecount-1].Caption := 'Neu Datei';
  edits[pagecount-1] := TSynEdit.Create(pages[pagecount-1]);
  edits[pagecount-1].Align := alClient;
  edits[pagecount-1].Gutter.ShowLineNumbers := true;
  edits[pagecount-1].Parent := pages[pagecount-1];
  PageControl1.ActivePageIndex := PageControl1.pagecount-1;
end;

eine funktion die nach schliesen nicht geht:
Delphi-Quellcode:
procedure TForm1.Kopieren1Click(Sender: TObject);
begin
edits[PageControl1.ActivePageIndex].CopyToClipboard;
end;

Dax 20. Nov 2004 12:55

Re: TPageControl: nach schliesen geht nicht mehr viel :/
 
Hmm.. dein Ansatz ist interessant.

Über TLists und Containerklassenklassen zu gehen wäre einfacher, aber mit einer simplen Modifikation sollte dein Ansatz auch Funktionieren. Statt
Delphi-Quellcode:
PageControl1.ActivePageIndex
solltest du
Delphi-Quellcode:
PageControl1.Pages[PageControl1.ActivePageIndex].Tag
verwenden, dann sollte es deinem Willen entsprechend funktionieren.

Red_Dragon 20. Nov 2004 13:38

Re: TPageControl: nach schliesen geht nicht mehr viel :/
 
Zitat:

Zitat von Dax
Hmm.. dein Ansatz ist interessant.

Über TLists und Containerklassenklassen zu gehen wäre einfacher, aber mit einer simplen Modifikation sollte dein Ansatz auch Funktionieren. Statt
Delphi-Quellcode:
PageControl1.ActivePageIndex
solltest du
Delphi-Quellcode:
PageControl1.Pages[PageControl1.ActivePageIndex].Tag
verwenden, dann sollte es deinem Willen entsprechend funktionieren.

hmmm ich hab das jetzt mal beim schliesen gesetzt aber copy, past, cut etc.pp. gehen irgendwie immer noch net :/ dafür geht opendialog zum teil... er läd nur in das falsche tabsheet rein....

Dax 20. Nov 2004 13:39

Re: TPageControl: nach schliesen geht nicht mehr viel :/
 
Wenn du es nur beim schliessen gesetzt hast, ist das kein Wunder. Du must es überall ersetzen.

Red_Dragon 20. Nov 2004 13:46

Re: TPageControl: nach schliesen geht nicht mehr viel :/
 
Zitat:

Zitat von Dax
Wenn du es nur beim schliessen gesetzt hast, ist das kein Wunder. Du must es überall ersetzen.

hatte ich schon gemacht war aber irgendwie der selbe erfolg :/

Christian Seehase 20. Nov 2004 20:50

Re: TPageControl: nach schliesen geht nicht mehr viel :/
 
Moin Red Dragon,

was mir auffällt:
Beim Schliessen korrgierst Du Dein Pages Array nicht.
Das enhält dann ja einen ungültigen Eintrag.

Wozu dient das überhaupt? Im PageControl ist ja schon ein TabSheet Array enthalten.

Öffnen könntest Du ja so machen:

Delphi-Quellcode:
procedure TForm1.NewTabsheet;

var
  tsWork : TTabSheet;

begin
  tsWork := TTabSheet.Create(PageControl1);
  tsWork.PageControl := PageControl1;
  tsWork.Caption    := 'Neu Datei';
  with TSynEdit.Create(tsWork) do begin
    Align := alClient;
    Gutter.ShowLineNumbers := true;
    Parent := tsWork;
  end;
  PageControl1.ActivePageIndex := PageControl1.pagecount-1;
end;
Schliessen dann so wie gehabt,allerdins solltest Du noch prüfen, ob überhaupt noch ein Tabsheet da ist, das geschlossen werden könnte.

Funktionen wie kopieren so:

Delphi-Quellcode:
procedure TForm1.Kopieren1Click(Sender: TObject);

var
  cmpWork : TComponent;
  iIndex : integer;

begin
  for iIndex := 0 to PageControl1.Pages[PageControl1.ActivePageIndex].ComponentCount-1 do begin
    if PageControl1.Pages[PageControl1.ActivePageIndex].Components[iIndex] is TSynEdit then begin
      (PageControl1.Pages[PageControl1.ActivePageIndex].Components[iIndex] as TSynEdit).CopyToClipboard;
      break;
    end;
  end;
end;

Red_Dragon 21. Nov 2004 13:35

Re: TPageControl: nach schliesen geht nicht mehr viel :/
 
hmmm also chris einen unterschieb macht das leider auch net kommt immer noch der gleiche fehler ob ich das mit deinem source mache oder mit dem den ich nutze :/ ich hab mir schon überlegt das garnicht zu schliesen sondern nur optisch hervorzurufen in dem ich einfach das teil auf visible := flase stelle nur witzige weise taucht das wieder auf wenn ich nen anderen tab anklicke...

Christian Seehase 21. Nov 2004 15:29

Re: TPageControl: nach schliesen geht nicht mehr viel :/
 
Moin Red Dragon,

ich kann das Problem nicht nachvollziehen. :gruebel:


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