![]() |
Frage zu SynEdit.
Hallo ich habe keine Ahnung ob ich jetzt mit meiner Frage in der richtigen Rubrik hier gelandet bin. Falls nicht, entschuldigt das bitte.
Also nun zu meiner Frage. Ich habe ein ganz einfache Projekt mit einem SynEdit EditirFeld und einer Statusleiste angelegt. Nun würde ich gerne die Courserposition in der Statausleiste anzeigen lassen. Mein bisheriger Quelletxt scheitert am umwandeln bzw. auslesen des Datentyps TSynStatusChange. Vielleicht wisst Ihr was ich falsch mache? Hier der Code:
Delphi-Quellcode:
[edit=Sharky]Delphi-Tags gesetzt. Einfach [*delphi] vor und [*/delphi] hinter den Code setzen (ohne die *) Mfg, Sharky[/edit]
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, SynEdit; type TForm1 = class(TForm) SynEdit1: TSynEdit; StatusBar1: TStatusBar; procedure SynEdit1Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; CharPos_x: TSynStatusChange; CharPos_y: TSynStatusChange; implementation {$R *.dfm} procedure TForm1.SynEdit1Change(Sender: TObject); var CharPos: TSynStatusChange; begin CharPos := SynEdit.scCaretx; StatusBar1.Panels[0].Text :=Format('Ln %d', [CharPos[0]]); end; end. |
Re: Frage zu SynEdit.
Zitat:
ersteinmal "Herzlich Willkommen in der DelphiPRAXIS". und Du bist in der richtigen Sparte ;-) Ich habe das eben zum testen einfach mal so gemacht:
Delphi-Quellcode:
Also einfach im .OnKeyUp und OnKeyDown die Possition des Carets in der Statusbar anzeigen.
procedure TForm1.SynEdit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState); begin StatusBar1.Panels[0].Text :=Format('Ln %d', [SynEdit1.CaretY]); end; procedure TForm1.SynEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin StatusBar1.Panels[0].Text :=Format('Ln %d', [SynEdit1.CaretY]); end; |
Re: Frage zu SynEdit.
ähm sharky, aber was machst du, wenn der Benutzer mit der Maus die Cursorposition wechselt ?
Moin werfux, folgenden Code verwende ich immer:
Delphi-Quellcode:
procedure TForm1.SynEdit1StatusChange(Sender: TObject;
Changes: TSynStatusChanges); begin if Changes * [scAll, scCaretX, scCaretY] <> [] then begin Statusbar1.Panels[1].Text := Format(' Zeile:%6d, Spalte: %3d', [SynEdit1.CaretY, SynEdit1.CaretX]); end; end; |
DANKE
Danke damit kann ich schon eine Menge anfangen...
|
Re: Frage zu SynEdit.
Zitat:
Ne, Du hast ja recht. Das Nagetier am PC habe ich total vergessen. |
Re: Frage zu SynEdit.
Servus :hi:
Also ich mach es wie aus den Beispielen von SynEdit: Eine TActionList auf die Form droppen, dann ein neues TAction Object erzeugen (Doppelklick auf die ActionList, dann Rechtsklick und neue Aktion wählen). Dann die Aktion passend benennen, jetzt die Aktion anklicken im OI bei den Events des Objekts von TAction das Event OnUpdate auswählen, doppelklick darauf und dann folgenden Code rein:
Delphi-Quellcode:
Wobei du das Feld bzw. noch den Namen an deine Statusbar anpassen musst ;)
var
Point: TPoint; begin Point := Editor.CaretXY; StatusBar.Panels[0].Text := Format(' %6d:%3d ', [Point.Y, Point.X]); end; Jetzt finalerweise noch die Statusbar anklicken, dann wieder im OI auf der Eventsleiste gehen und oben beim Feld Action unsere gerade frisch definierte Action auswählen, das wars :D jetzt dürfte sich alles von alleine Ändern, egal ob klicken, tasten oder sonst was ;) mfg phlux :hi: |
Re: Frage zu SynEdit.
Also bei mir funzt der Code nicht ganz.
Delphi meckert rum: Zitat:
Delphi-Quellcode:
mfG
procedure TForm1.Action1Update(Sender: TObject);
var Point: TPoint; begin Point := SynEdit1.CaretXY; StatusBar1.Panels[0].Text := Format(' %6d:%3d ', [Point.Y, Point.X]); end; Störtebeker |
Re: Frage zu SynEdit.
Liegt vielleicht daran, das der Code schon 3 Jahre alt ist? ;-)
|
Re: Frage zu SynEdit.
Hast du vielleicht ne Ersatzlösung?
|
Re: Frage zu SynEdit.
Zitat:
schaue doch mal nach was für einen Typ .CaretXY zurück gibt. Es scheint ja kein TPoint zu sein ;-) |
Re: Frage zu SynEdit.
Irgendwie hält etwas den Groschen zurück, weshalb er bei mir nicht fällt. Daher wäre eine Hilfe ganz hilfreich.
mfG Störtebeker P.S.: CaretXY gibt BufforCoord zurück, oder? Aber es reicht ja nicht wenn ich sage
Delphi-Quellcode:
ODER???
procedure TForm1.Action1Update(Sender: TObject);
var Point: TPoint; BufferCoord: TBufferCoord; begin TBufferCoord := SynEdit1.CaretXY; StatusBar1.Panels[0].Text := Format(' %6d:%3d ', [Point.Y, Point.X]); end; Das Programm lässt sich zwar starten, aber dann steht in der Statuszeile was von 192110:4, oder so ähnlich. Und die Zahl verändert sich auch nicht. |
Re: Frage zu SynEdit.
Delphi-Quellcode:
procedure TForm1.Action1Update(Sender: TObject);
var BufferCoord: TBufferCoord; begin BufferCoord := SynEdit1.CaretXY; StatusBar1.Panels[0].Text := Format(' %6d:%3d ', [BufferCoord .Y, BufferCoord .X]); end; |
Re: Frage zu SynEdit.
Jetzt bezeichnet er Y und X als undeklarierte bezeichner.
mfG Störtebeker |
Re: Frage zu SynEdit.
Zitat:
|
Re: Frage zu SynEdit.
Hat kein Effekt
mfG Störtebeker |
Re: Frage zu SynEdit.
Wie lange programmiert Du schon?
Tippe mal BufferCoord. ein und dann siehst Du, was Du benutzen kannst. |
Re: Frage zu SynEdit.
Falls du meinst, ich soll in der Hilfe gucken, findet er diesen Begrif nicht.
Ich schon eine Zeit lang am Proggen, aber kapierst du gleich alles, wenn du dich auf neuem Terrain bewegst? Der Vorteil wenn ich die Antwort habe ist, dass ich nächstes Mal einfach bei meinen älteren Projekten gucken muss. Aber sowas gehörte halt noch nicht dazu. SRY. Wenn ich im Editfenster "buffercoord." eingebe, kommt diese Liste und gibt mir zur Auswahl "Char: Integer;" und "Line: Integer;" mfG Störtebeker |
Re: Frage zu SynEdit.
Zitat:
Zitat:
|
Re: Frage zu SynEdit.
Hai Störtebeker,
ein Thread zu der Frage reicht aus. Darum mache ich hier einmal zu. ![]() * c l o s e d * |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 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-2025 by Thomas Breitkreuz