Dokumentation zu TSynEdit?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
AlterMann
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?

Beitrag von AlterMann »

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
Früher war alles besser. Und aus Holz!

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Dokumentation zu TSynEdit?

Beitrag von theo »

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.
Tja, heute ist scheint's "auf-dem-Schlauch-steh-Tag" ;-)

Wie wär's mit
SynEdit1.Modified ?

AlterMann
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?

Beitrag von AlterMann »

theo hat geschrieben: Tja, heute ist scheint's "auf-dem-Schlauch-steh-Tag" ;-)

Wie wär's mit
SynEdit1.Modified ?
Soweit war ich schon:
(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;
Tut aber genau nix :(
Früher war alles besser. Und aus Holz!

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Dokumentation zu TSynEdit?

Beitrag von theo »

Wird denn procedure TCncEdit.BeforeDestruction; überhaupt aufgerufen?
Willlst du nicht lieber das OnCloseQuery Ereignis der Form verwenden?

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: Dokumentation zu TSynEdit?

Beitrag von DiBo33 »

AlterMann hat geschrieben:Entweder bin ich schon wieder zu blöd zum Suchen, oder es gibt tatsächlich keine orfentlich Doku 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.

Wie @theo anmerkte, stelle erst einmal fest, ob deine Routine überhaupt / zum "richtigen" Zeitpunkt ausgeführt wird.

pluto
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?

Beitrag von pluto »

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.
MFG
Michael Springwald

OlimilO
Beiträge: 7
Registriert: Fr 3. Sep 2010, 15:39

Bei Programmende -> Abfrage ob Text geändert

Beitrag von OlimilO »

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;

pluto
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?

Beitrag von pluto »

Etwas Spät oder ? Aber besser Spät als nie *G*
MFG
Michael Springwald

carli
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?

Beitrag von carli »

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.

martin_frb
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?

Beitrag von martin_frb »

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...

martin_frb
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?

Beitrag von martin_frb »

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;

pluto
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?

Beitrag von pluto »

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

carli
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?

Beitrag von carli »

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)

Antworten