Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi In Stringgrid schreiben ohne Text zu markieren (https://www.delphipraxis.net/145029-stringgrid-schreiben-ohne-text-zu-markieren.html)

Ginko 22. Dez 2009 10:33


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;

Niko 22. Dez 2009 11:16

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:
StringGrid1.InplaceEditor.SelLength := 0;
Eventuell reicht auch
Delphi-Quellcode:
StringGrid1.InplaceEditor.AutoSelect := False;

Ginko 22. Dez 2009 11:45

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:
StringGrid1.InplaceEditor
auf die Eigenschaft zugreifen. Liegt das an meiner alten Delphi 7 Version ?
Also in der Hilfe ist der InplaceEditor als property von TCostumGrid jedenfalls mal aufgelistet...

Niko 22. Dez 2009 12:01

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.

Ginko 22. Dez 2009 12:45

Re: In Stringgrid schreiben ohne Text zu markieren
 
Ah ok danke dir, ich werd das mal versuchen :thumb:

GHorn 22. Dez 2009 13:12

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

Ginko 22. Dez 2009 17:26

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 00:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz