Dokumentation zu TSynEdit?
-
- Beiträge: 238
- Registriert: So 13. Dez 2009, 09:43
- OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
- CPU-Target: x86 64Bit
- Wohnort: Niederösterreich
Dokumentation zu TSynEdit?
Entweder bin ich schon wieder zu blöd zum Suchen, oder es gibt tatsächlich keine orfentlich Doku zu TSynEdit.
Im Augenblick versuche ich eigentlich nur herauszufinden ob sich der Text im Editor geändert hat (sprich: Ob ich eine Abfrage bez. speichern oder verwerfen machen soll), ich find's einfach nicht.
Grüße
Christian
Im Augenblick versuche ich eigentlich nur herauszufinden ob sich der Text im Editor geändert hat (sprich: Ob ich eine Abfrage bez. speichern oder verwerfen machen soll), ich find's einfach nicht.
Grüße
Christian
Früher war alles besser. Und aus Holz!
Re: Dokumentation zu TSynEdit?
Tja, heute ist scheint's "auf-dem-Schlauch-steh-Tag"AlterMann hat geschrieben:Entweder bin ich schon wieder zu blöd zum Suchen, oder es gibt tatsächlich keine orfentlich Doku zu TSynEdit.
Im Augenblick versuche ich eigentlich nur herauszufinden ob sich der Text im Editor geändert hat (sprich: Ob ich eine Abfrage bez. speichern oder verwerfen machen soll), ich find's einfach nicht.

Wie wär's mit
SynEdit1.Modified ?
-
- Beiträge: 238
- Registriert: So 13. Dez 2009, 09:43
- OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
- CPU-Target: x86 64Bit
- Wohnort: Niederösterreich
Re: Dokumentation zu TSynEdit?
Soweit war ich schon:theo hat geschrieben: Tja, heute ist scheint's "auf-dem-Schlauch-steh-Tag"
Wie wär's mit
SynEdit1.Modified ?
(TCnCEdit ist ein Nachkomme von TSynEdit)
Code: Alles auswählen
procedure TCncEdit.BeforeDestruction;
begin
inherited BeforeDestruction;
if modified then ShowMessage('Geändert');
writeln('geändert');
readln;
end;

Früher war alles besser. Und aus Holz!
Re: Dokumentation zu TSynEdit?
Wird denn procedure TCncEdit.BeforeDestruction; überhaupt aufgerufen?
Willlst du nicht lieber das OnCloseQuery Ereignis der Form verwenden?
Willlst du nicht lieber das OnCloseQuery Ereignis der Form verwenden?
Re: Dokumentation zu TSynEdit?
Zu TSynEdit gibt es tatsächlich keine "ordentliche" Doku, zumal die Version von Lazarus einer ständigen Änderung unterliegt, da die die Vorlage der IDE ist.AlterMann hat geschrieben:Entweder bin ich schon wieder zu blöd zum Suchen, oder es gibt tatsächlich keine orfentlich Doku zu TSynEdit.
Wie @theo anmerkte, stelle erst einmal fest, ob deine Routine überhaupt / zum "richtigen" Zeitpunkt ausgeführt wird.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Dokumentation zu TSynEdit?
kann aber auch "SynEdit1.lines.Modified" sein. "BeforeDestruction"" ist ein schlechter Zeitpunkt, ich denke es geht darum, beim Beenden zu prüfen ob es gespeichert werden soll.
Also währe onDestroy oder onClose vom From nicht verkehrt.
Also währe onDestroy oder onClose vom From nicht verkehrt.
MFG
Michael Springwald
Michael Springwald
Bei Programmende -> Abfrage ob Text geändert
der Vollständigkeit halber
Code: Alles auswählen
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);
var
ms: String;
mr: Integer;
begin
if SynEdit1.Modified then begin
//message may be localized here
ms := 'Der Text wurde geändert, speichern?';
mr := MessageDlg(ms, mtConfirmation, mbYesNoCancel, 0);
if mr = mrYes then Save;
CanClose := (mr <> mrCancel);
end;
end;
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Dokumentation zu TSynEdit?
Etwas Spät oder ? Aber besser Spät als nie *G*
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: Dokumentation zu TSynEdit?
Dass die SynEdit-Komponente schlecht dokumentiert ist, darunter hab ich auch zu leiden.
Vor allem kann sie nicht mit Tabs umgehen.
Ich muss z.B. bei der Newline das Event abfangen und erst mal die Spaces durch Tabs ersetzen.
Vielleicht ändert sich das ja mal, wenn die IDE weiter ausgereift ist.
Vor allem kann sie nicht mit Tabs umgehen.
Ich muss z.B. bei der Newline das Event abfangen und erst mal die Spaces durch Tabs ersetzen.
Vielleicht ändert sich das ja mal, wenn die IDE weiter ausgereift ist.
-
- Beiträge: 588
- Registriert: Mi 25. Mär 2009, 21:12
- OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
- CPU-Target: mostly 32 bit
Re: Dokumentation zu TSynEdit?
Ja leider fehlt die doku....
Also was modifiziert angeht:
SynEdit.Modified: Boolean
SynEdit.ChangeStamp: Integer
ChangeStamp zaehlt bei jeder aenderung hoch.
SynEdit.OnStatusChange: TStatusChangeEvent
wird aufgerufen wenn sich was tut:
TStatusChangeEvent = procedure(Sender: TObject; Changes: TSynStatusChanges)
of object;
TSynStatusChange = (scCaretX, scCaretY, scLeftChar, scTopLine, scLinesInWindow, scInsertMode, scModified, scSelection, scReadOnly
);
TSynStatusChanges = set of TSynStatusChange;
wenn scModified enthalten ist, hat sich das flag geandert...
Also was modifiziert angeht:
SynEdit.Modified: Boolean
SynEdit.ChangeStamp: Integer
ChangeStamp zaehlt bei jeder aenderung hoch.
SynEdit.OnStatusChange: TStatusChangeEvent
wird aufgerufen wenn sich was tut:
TStatusChangeEvent = procedure(Sender: TObject; Changes: TSynStatusChanges)
of object;
TSynStatusChange = (scCaretX, scCaretY, scLeftChar, scTopLine, scLinesInWindow, scInsertMode, scModified, scSelection, scReadOnly
);
TSynStatusChanges = set of TSynStatusChange;
wenn scModified enthalten ist, hat sich das flag geandert...
-
- Beiträge: 588
- Registriert: Mi 25. Mär 2009, 21:12
- OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
- CPU-Target: mostly 32 bit
Re: Dokumentation zu TSynEdit?
Betreff tabs:
es gipt SynEdit.Options
eoTabsToSpaces, // Converts a tab character to a specified number of space characters
was den autoindent betrifft:
SynEdit.Options
eoAutoIndent, // Will indent the caret on new lines with the same amount of leading white space as the preceding line
als auch
property Beautifier: TSynCustomBeautifier read fBeautifier write SetBeautifier;
per default is dase ein TSynBeautifier;
der default ist allerding fuer alle synedits => aenderungen an einem aendert all (kann in zukunft anders werden...)
man kann es aber auch einen einzelnen anlegen:
SynEdit.Beautifier := TSynBeautifier.Create'
TSynBeautifier(SynEdit.Beautifier).IndentType
property IndentType: TSynBeautifierIndentType read FIndentType write FIndentType;
TSynBeautifierIndentType = (sbitSpace, sbitCopySpaceTab, sbitPositionCaret);
1: immer spaces als indent
2: copy von der zeile oben drueber
3: keine tabs/keine spaces => cursor wird hinter Zeilen-ende gesetzt
sbitCopySpaceTab
fuegt also tabs eine WENN die zeile davor mit tabs eingerueckt ist!
-- edit:
eh ich vergess
SynEdit.Beautifier hat auch ein event (allerdings nicht published, also connect im code, nicht im object inspector...):
property OnGetDesiredIndent: TSynBeautifierGetIndentEvent
read FOnGetDesiredIndent write FOnGetDesiredIndent;
property AutoIndent: Boolean read FAutoIndent write FAutoIndent;
es gipt SynEdit.Options
eoTabsToSpaces, // Converts a tab character to a specified number of space characters
was den autoindent betrifft:
SynEdit.Options
eoAutoIndent, // Will indent the caret on new lines with the same amount of leading white space as the preceding line
als auch
property Beautifier: TSynCustomBeautifier read fBeautifier write SetBeautifier;
per default is dase ein TSynBeautifier;
der default ist allerding fuer alle synedits => aenderungen an einem aendert all (kann in zukunft anders werden...)
man kann es aber auch einen einzelnen anlegen:
SynEdit.Beautifier := TSynBeautifier.Create'
TSynBeautifier(SynEdit.Beautifier).IndentType
property IndentType: TSynBeautifierIndentType read FIndentType write FIndentType;
TSynBeautifierIndentType = (sbitSpace, sbitCopySpaceTab, sbitPositionCaret);
1: immer spaces als indent
2: copy von der zeile oben drueber
3: keine tabs/keine spaces => cursor wird hinter Zeilen-ende gesetzt
sbitCopySpaceTab
fuegt also tabs eine WENN die zeile davor mit tabs eingerueckt ist!
-- edit:
eh ich vergess
SynEdit.Beautifier hat auch ein event (allerdings nicht published, also connect im code, nicht im object inspector...):
property OnGetDesiredIndent: TSynBeautifierGetIndentEvent
read FOnGetDesiredIndent write FOnGetDesiredIndent;
property AutoIndent: Boolean read FAutoIndent write FAutoIndent;
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Dokumentation zu TSynEdit?
Im Übrigen ein Blick in den Code von SynEdit sagt mehr aus als jede Dokumentation *G*. Jedenfalls bin ich so immer weiter gekommen, wenn ich ein Problem hatte. Oder ich schau mir an, wie es Lazarus gelöst hat. Dort wird auch SynEdit verwendet. Zu not kann man sich auch noch Google antun.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: Dokumentation zu TSynEdit?
Alles schön und gut, ich hab den Code auch bei jedem bissel durchforstet. Allerdings lässt sich die Option oeSpacesToTabs gar nicht erst aktivieren.
Aber das mit dem Beautifier wusste ich noch nicht (darauf muss man erst mal kommen)
Aber das mit dem Beautifier wusste ich noch nicht (darauf muss man erst mal kommen)