Du skal lave et onKeyDownEvent Der i skal du teste på om der er trykket enter (key 13) eller pil ned (key 40 mener jeg) også er det bare at skrive det kode du vil have udført ...
Du kan vel altid kigge på hvilken tast der er blevet trykket på, men man kunne også lade en TTimer undersøge hvilken linie der er aktiv (jeg har ikke arbejdet meget med richedit, men mon ikke den kan oplyse dig dette). Hvis denne værdi skifter så er der skiftet line og dette vil således også virker hvis musen bruges.
Det kan således optimeres at timeren først sættes aktiv når din Richedit får focus og denne frigives når din richedit mister focus.
Istedet laves en onKeyDownEvent og et OnKeyUpEvnt på din RichEdit og så skrives det følgende kode ...
var LastY : Integer; procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin LastY := RichEdit1.CaretPos.y; end;
procedure TForm1.RichEdit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin With RichEdit1.CaretPos do if y <> LastY then Caption := TimeToStr(Now); end;
Nej, desværre så har jeg en fritids interesse der går med at flyve virtuelle fly. I denne forbindelse har jeg bygget en skosk Lufthavn (Prestwick) og jeg fik lige en \"røvfuld billeder\" så min forlængede weekend gik med at bygge bygninger :-)
pellelil > det var din timer jeg angreb, jeg synes ikke det var en speciel elegant løsning, når nu det kan løses med events så mener jeg efter bedste overbevisning at det er den bedste løsning ....
Om (anta?)bussen venter på dig, det må du snakke med dem on :o)
Lige to ting, jeg glemte at sige før: Min Delphi-version er kun 3.0, så jeg kan vist ikke bruge CaretPos. Og så skal jeg også bruge linienummeret på den linie, man er flyttet fra. Dvs. jeg skal referere og muligvis også ændre et bestemt linienummer. Hvordan gør jeg det?
Du skal i øvrigt huske at afslutte dine spørgsmål. Vi er mange der har svaret og venter på at du accepterer/afviser svarene.
Jeg ved godt du er \"busy\" med at programmere i og lære om delphi, men husk lige at lukke ledene efter dig. På den måde vil du også få bedre hjælp i fremtiden.
Jammen så mu du selv implementere en function der kan klare ærterne for dig. Fordelen ved den implemtering jeg vider her er at der i kan du også stoppe et memo felt ind i parameter listen, og få CaretPos som svar ....
procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin LastY := RichEdit1.CaretPos.y; end;
procedure TForm1.RichEdit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin With GetCaretPos(RichEdit1) do if y <> LastY then begin Caption := Format(\'Linje nummer ændret fra %d til %d\', [LastY,y]); LastY := y; end; end;
procedure TForm1.RichEdit1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if GetCaretPos(RichEdit1).y <> LastY then begin Caption := Format(\'Linje nummer ændret fra %d til %d\', [LastY,y]); LastY := y; end; end;
Bemærk jeg har rettet en bug i de to events. Jens B
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.