AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi In Stringgrid schreiben ohne Text zu markieren
Thema durchsuchen
Ansicht
Themen-Optionen

In Stringgrid schreiben ohne Text zu markieren

Ein Thema von Ginko · begonnen am 22. Dez 2009 · letzter Beitrag vom 22. Dez 2009
Antwort Antwort
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#1

In Stringgrid schreiben ohne Text zu markieren

  Alt 22. Dez 2009, 11:33
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;
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#2

Re: In Stringgrid schreiben ohne Text zu markieren

  Alt 22. Dez 2009, 12:16
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
StringGrid1.InplaceEditor.SelLength := 0; Eventuell reicht auch
StringGrid1.InplaceEditor.AutoSelect := False;
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#3

Re: In Stringgrid schreiben ohne Text zu markieren

  Alt 22. Dez 2009, 12:45
Hi, das hört sich ja schon mal gut an genau sowas suche ich, aber ich kann nicht mit 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...
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#4

Re: In Stringgrid schreiben ohne Text zu markieren

  Alt 22. Dez 2009, 13:01
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.
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#5

Re: In Stringgrid schreiben ohne Text zu markieren

  Alt 22. Dez 2009, 13:45
Ah ok danke dir, ich werd das mal versuchen
  Mit Zitat antworten Zitat
GHorn

Registriert seit: 24. Mär 2009
Ort: NRW
124 Beiträge
 
#6

Re: In Stringgrid schreiben ohne Text zu markieren

  Alt 22. Dez 2009, 14:12
Die Taste F2 setzt den Cursor an das Ende Deines strings.
Müsstest also lediglich F2 an das StringGrid senden.

Gruß,
Gerald
  Mit Zitat antworten Zitat
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#7

Re: In Stringgrid schreiben ohne Text zu markieren

  Alt 22. Dez 2009, 18:26
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 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