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/)
-   -   Problem: SynEdit + PageControl (https://www.delphipraxis.net/140595-problem-synedit-pagecontrol.html)

Störtebeker 21. Sep 2009 22:22


Problem: SynEdit + PageControl
 
Hi,

ich möchte meinem Editor das Anzeigen mehrerer Datein ermöglichen. Dazu verwende ich ein PageControl. Das mit dem Hinzufügen der Reiter funktioniert schon einmal. Probleme habe ich jetzt mit dem SynEdit. Beim Programmstart ist ein SynEdit offen. Da schreibe ich jetzt zum Beispiel Text rein und erstelle dann über meinen Menüpunkt "NEU" eine neue Page. Was jetzt auftritt ist, dass auf dem neu erstellten Reiter der gleiche Text im SynEdit steht, wie im Reiter davor. Und wenn ich zwischen den beiden Reitern hin und her wechsle, habe ich das Gefühl, dass ich nur die Reiter ändere, jedoch nicht das SynEdit. Der folgende Code müsste doch eigentlich meinem Wunsch entsprechen, über den Menüpunkt "NEU" eine neue Seite zu erstellen, mit einem neuen, leeren SynEdit.
Doch das passiert leider nicht. Wäre froh, wenn jemand von euch Rat wüsste.

Delphi-Quellcode:
procedure TForm1.MenuItem27Click(Sender: TObject);
  var
  ts : TTabsheet;
  se: TSynEdit;
begin
  i:=i+1;
  ts := TTabsheet.Create(Self);
  ts.PageControl := PageControl4;
  ts.Parent := PageControl4;
  se:= TSynEdit.Create(Self);
  se.Parent := ts;
  ts.Caption := 'New Document '+IntToStr(i);
  ts.PageControl.ActivePage := ts.PageControl.Pages[i];
end;
MfG
Störtebeker

toms 22. Sep 2009 06:50

Re: Problem: SynEdit + PageControl
 
Unter Delphi funktioniert der Code ohne Probleme. Muss wohl an Lazarus liegen.

gsh 22. Sep 2009 07:11

Re: Problem: SynEdit + PageControl
 
Vielleicht hilft das:
Delphi-Quellcode:
ts := TTabsheet.Create(PageControl4);
se:= TSynEdit.Create(ts);

Störtebeker 22. Sep 2009 07:40

Re: Problem: SynEdit + PageControl
 
Ne, hilft leider nicht. Der Effekt bleibt der gleiche.

Chefx 22. Sep 2009 09:18

Re: Problem: SynEdit + PageControl
 
Hey Störtebeker,

war auch mal vor dem problem aber ich hab das mit Tabsets gemacht aber das ist ja fast gleiche :wink:
ich habe ein Synedit komponente und der text wird in einem Array gespeichert (erstmal statisch wollte das noch umschreiben auf dynamisch).
Hier erst mal meine Proceduren:
Delphi-Quellcode:
function TabSyneditSave(text:string;tabposition,cursorposition:integer):boolean;
begin
result:=false;
tabsave[tabposition,1]:=text;
tabsave[tabposition,2]:=InttoStr(cursorposition);
end;
procedure TabSyneditLoad(tabposition:integer; var text:string; var cursorposition:integer);
begin
text:=tabsave[tabposition,1];
cursorposition:=strtoint(tabsave[tabposition,2]);
end;

procedure TabSyneditManager(text:string;tabposition,cursorposition:integer; var newtext:string; var newcursorposition:integer);
begin
TabSyneditSave(text,systems[1],cursorposition);
TabSyneditLoad(tabposition,newtext,newcursorposition);
systems[1]:=tabposition;
end;
Die TabSyneditManager ist immer dann notwendig wenn du in deinem Tabs herumblätterst das (Click procedure).
Wenn du eine neuen Tab öffnest einfach zu erst den TabSyneditSave und dann neuen Tab und einfach Synedit.clear. fertig.
so hab ich das gemacht und es funktioniert auch bei mehr als 100000 zeilen noch ein man frei (hab das getestet und es geht auch noch mit mehr 100000) weil ich die befürchtung hatte das das zulange dauert :wink: aber es dauert überhabt nicht lang (ein mal schnipsen fertig) :-D
ich hofe das dir das weiter hilft :stupid:

MfG chefx

Störtebeker 22. Sep 2009 16:59

Re: Problem: SynEdit + PageControl
 
Danke für eure Antworten.

Nach unzähligen Versuchen habe ich mir einfach mal das Treeview des Objektinspektors näher angeschaut und festgestellt, dass das SynEdit nicht auf einem Tab des PageControls lag, sondern auf dem PageControl selber und somit wahrscheinlich immer im Vordergrund lag, was halt dazu führte, dass die neu erstellten SynEdits hinter dem anfänglichen SynEdit verschwunden sind, und somit nicht sichtbar waren. Nachdem ich das SynEdit nun auf das Tab gezogen habe, funktioniert auch mein Code, den ich zu anfang gepostet habe. Manchmal ist die Lösung des Rätsels einfacher als man denkt. Wusste ich doch, dass der Code von Lazarus nicht soweit entfernt von dem von Delphi sein kann, da es sich ja bei Lazarus um - wie soll man es nennen - einen leicht abgespeckten Klon handelt, oder.

Störtebeker 29. Sep 2009 15:27

Re: Problem: SynEdit + PageControl
 
Ok, das mit dem Erstellen klappt wunderbar. Jetz möchte ich die Tabs natürlich auch schließen können.

Probiert habe ich es mit:
Delphi-Quellcode:
Form1.PageControl4.ActivePage.Destroy;
Hat auch funktioniert. Nur wenn ich dann ein neuen Tab erstellen möchte, wirft mir Lazarus eine Exception mit der Meldung:
Zitat:

Project raised exception class: External: SIGFPE
Dann habe ich es folgendermaßen probiert:
Delphi-Quellcode:
Form1.PageControl4.ActivePage.Free;
Jedoch mit dem selben Effekt. Ich kann nach Programmstart ein Tab erstellen, es schließen und wenn ich dann wieder ein Tab erstellen möchte, wird die Exception geworfen.


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