![]() |
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:
MfG
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; Störtebeker |
Re: Problem: SynEdit + PageControl
Unter Delphi funktioniert der Code ohne Probleme. Muss wohl an Lazarus liegen.
|
Re: Problem: SynEdit + PageControl
Vielleicht hilft das:
Delphi-Quellcode:
ts := TTabsheet.Create(PageControl4);
se:= TSynEdit.Create(ts); |
Re: Problem: SynEdit + PageControl
Ne, hilft leider nicht. Der Effekt bleibt der gleiche.
|
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:
Die TabSyneditManager ist immer dann notwendig wenn du in deinem Tabs herumblätterst das (Click procedure).
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; 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 |
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. |
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:
Hat auch funktioniert. Nur wenn ich dann ein neuen Tab erstellen möchte, wirft mir Lazarus eine Exception mit der Meldung:
Form1.PageControl4.ActivePage.Destroy;
Zitat:
Delphi-Quellcode:
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.
Form1.PageControl4.ActivePage.Free;
|
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