Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - TMemo auf Überschreib-Modus
J.Borchert - Mo 25.12.06 09:53
Titel: TMemo auf Überschreib-Modus
Also wie mache ich das. Muß ich wirklich jeden Tastendruck abfangen, selLenght wenn richtige Taste gedrückt wird auf eins stellen und dann selText ersetzen ?
Oder geht's einfacher?
mfG Juergen
Lannes - Mo 25.12.06 11:06
Hallo,
wenn es in Deine Anwendung passt, nimm ein RichEdit, denn da ist es schon eingebaut.
J.Borchert - Mo 25.12.06 13:01
Das mit dem RichEdit mag stimmen. Wollte aber nunmal mit Memo vorwärtskommen.
Habe hier mal die Lösung:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| uses windows ; public procedure MemoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); end;
procedure TForm1.MemoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var m:TMemo; s:string; c:integer; begin m:=TMemo(Form1.FindComponent('MPC'+IntToStr(PageControl1.ActivePageIndex+1))); if m = nil then exit; if key = vk_insert then begin if m.Tag=0 then m.Tag:=1 else m.Tag:=0; if m.Tag=1 then Form1.StatusBar1.Panels.Items[4].Text:='Overwrite'; if m.Tag=0 then Form1.StatusBar1.Panels.Items[4].Text:='Insert'; exit; end; if ( Key >= ord('0') ) and ( key <= ord('z') ) and ( m.Tag = 1 ) then ( m.SelLength = 0 ) and ( m.SelStart < length(m.Text) ) and ( Shift = [] ) then begin s:=m.Text; c:=m.SelStart; delete(s,m.SelStart+1,1); m.Text:=s; m.SelStart:=c; end; end; |
Hoffe alle "Neuen" haben so auch was davon :lol:
Frohes Fest und guten Rutsch sagt Jürgen
Lannes - Mi 27.12.06 00:48
Hallo,
in Zeile 23 hat sich der Kopier-Fehlerteufel in Deinen Code eingeschlichen :wink:, oder?
Mit FindComponent kann ich mich nicht so recht anfreunden,
zumal Sender das entsprechende Memo liefert.
Hier mal meine Variante:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| var Form1: TForm1; const INS : array [0..1] of String = ('Insert', 'Overwrite');
implementation
{$R *.DFM} procedure TForm1.MyMemoEnter(Sender: TObject); begin with TEdit(Sender) do StatusBar1.Panels.Items[0].Text := INS[Tag]; end;
procedure TForm1.MyMemoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin with TEdit(Sender) do if Key = VK_INSERT then begin Tag := Tag xor 1; StatusBar1.Panels.Items[0].Text := INS[Tag]; end; end;
procedure TForm1.MyMemoKeyPress(Sender: TObject; var Key: Char); begin with TEdit(Sender) do if Tag = 1 then if SelLength = 0 then if Key in [#32..#126,#128..#255] then begin SelLength := 1; if (SelLength > 0) and (SelText[1] = #13) then SelLength := 0; end; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!