![]() |
In Stringgrid schreiben ohne Text zu markieren
Hallo ich habe vor einen Stringgrid-Eintrag so zu beschränken, dass der Benutzer maximal 4 Zeichen eingeben kann und minimal 4 Zeichen vorhanden sein müssen. Bei der Eingabe soll der Text überschrieben werden. Das klappt auch im Grunde so wie ich es will mit dem folgenden Quelltext.
Das Problem ist allerdings, dass der gesamte Text nach jeder Eingabe komplett markiert wird und der Text jedesaml komplett gelöscht wird. Meine Frage ist jetzt, ob es eine andere möglichkeit gibt den Text in die Stringgridzelle zurückzugeben, so dass keine markierung Stattfindet, oder die Markierfunktion komplett abzuschalten. Hier der Quellcode:
Delphi-Quellcode:
procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if chr(Key) in['a'..'z','0'..'9'] then begin keybd_event(VK_DELETE, 0, 0, 0); end; end; procedure TForm1.StringGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); var temp: String; begin temp := StringGrid1.Cells[1,1]; while Length(temp) > 4 do Delete(temp,5,1); while Length(temp) < 4 do temp := '0' + temp; StringGrid1.Cells[1,1] := temp; end; |
Re: In Stringgrid schreiben ohne Text zu markieren
Hi,
ich hab gerade kein Delphi da, dass ich es ausprobieren könnte, aber versuche es doch mal nach der Zuweisung des neuen Wertes mit
Delphi-Quellcode:
Eventuell reicht auch
StringGrid1.InplaceEditor.SelLength := 0;
Delphi-Quellcode:
StringGrid1.InplaceEditor.AutoSelect := False;
|
Re: In Stringgrid schreiben ohne Text zu markieren
Hi, das hört sich ja schon mal gut an genau sowas suche ich, aber ich kann nicht mit
Delphi-Quellcode:
auf die Eigenschaft zugreifen. Liegt das an meiner alten Delphi 7 Version ?
StringGrid1.InplaceEditor
Also in der Hilfe ist der InplaceEditor als property von TCostumGrid jedenfalls mal aufgelistet... |
Re: In Stringgrid schreiben ohne Text zu markieren
Nein, das liegt daran, dass ich übersehen habe, dass InplaceEditor protected ist. Um meinen Vorschlag auszuprobieren müsstest du dir also deine eigene Klasse von TStringGrid ableiten.
|
Re: In Stringgrid schreiben ohne Text zu markieren
Ah ok danke dir, ich werd das mal versuchen :thumb:
|
Re: In Stringgrid schreiben ohne Text zu markieren
Die Taste F2 setzt den Cursor an das Ende Deines strings.
Müsstest also lediglich F2 an das StringGrid senden. Gruß, Gerald |
Re: In Stringgrid schreiben ohne Text zu markieren
Das mit dem InplaceEditor klappt soweit alles, danke nochmal.
Leider gibt es noch eine Unschönheit bei meiner Beschränkung der Eingabelänge. Bei meiner Variante erscheinen die Buschstaben, die die Maximallänge überschreiten, solange bis die Taste losgelassen wird, was nicht so toll ausschaut. Der InplaceEditor hat ja leider keine Möglichkeit die MaxLenght anzugeben, so wie ich das gesehen habe. Das KeyDown Ereignis kann ich nicht benutzen, da zu dem Zeitpunkt der Zugriff auf den InplaceEditor nicht möglich ist. Und mit dem KeyPress Ereignis klappt es irgendwie nicht... Hat vielleicht jemand dazu eine Idee, wäre super!
Delphi-Quellcode:
procedure TEigenesGrid.KeyUp(var Key: Word; Shift: TShiftState);
var temp: String; begin temp := InplaceEditor.Text; while Length(temp) > 4 do Delete(temp,5,1); while Length(temp) < 4 do temp := '0' + temp; InplaceEditor.Text := temp; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 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