Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Markierung von Text in StringGrid-Zelle umgehen (https://www.delphipraxis.net/43134-markierung-von-text-stringgrid-zelle-umgehen.html)

gordon freeman 29. Mär 2005 17:11


Markierung von Text in StringGrid-Zelle umgehen
 
Hi Leute,

ich möchte beim Drücken einer Zahlen-Taste die Zahl mit einem vorangestellten '+' in eine Zelle eine Stringgrid schreiben. Das ganze mache ich folgendermaßen:

Delphi-Quellcode:
procedure TForm1.StringGrid1KeyPress(Sender:TObject;var Key:Char);
begin
if (key in ['0'..'9') and (length(StringGrid1.Cells[aktCellX,aktCellY]) = 0) then
  begin
   StringGrid1.Cells[aktCellX,aktCEllY] := '+' + key;
   key := #0;
  end;
end;
Allerdings wird bei einem erneuten Tastendruck sofort der gesamte Zelleninhalt wieder übrschreiben.

z.B:
gibt der Benutzer eine '4' ein, so erscheint in der Zelle '+4', wird direkt danach eine '2' eingegeben, so erscheint nicht '+42', sondern '2'.

Wie kann man das umgehen???

tia, read you, gordon

kiar 29. Mär 2005 18:07

Re: Markierung von Text in StringGrid-Zelle umgehen
 
hallo vor dem ereignis ein
Delphi-Quellcode:

stext:='';
also

Delphi-Quellcode:
var
   sText: String;
begin
 sText:= '';
if (key in ['0'..'9') and (length(StringGrid1.Cells[aktCellX,aktCellY]) = 0) then
  begin
   StringGrid1.Cells[aktCellX,aktCEllY] := '+' + key;
   key := #0;
  end;
end;
/// mann dicke finger

Lannes 29. Mär 2005 18:17

Re: Markierung von Text in StringGrid-Zelle umgehen
 
Hallo,
@kiar >> Glaub ich nicht, mit einer Variable die nicht genutzt wird :?:

@gordon freeman >> der Else-Teil fehlt, so klappt es:
Delphi-Quellcode:
procedure TForm1.StringGrid1KeyPress(Sender:TObject;var Key:Char);
begin
if (key in ['0'..'9']) and (length(StringGrid1.Cells[aktCellX,aktCellY]) = 0) then
  begin
   StringGrid1.Cells[aktCellX,aktCellY] := '+' + key;
   //key := #0; ist doch nur erforderlich wenn Tastendruck aufgehoben werden soll!
  end
  else
    StringGrid1.Cells[aktCellX,aktCellY] := StringGrid1.Cells[aktCellX,aktCellY]+ key;
end;

kiar 29. Mär 2005 18:20

Re: Markierung von Text in StringGrid-Zelle umgehen
 
hallo,

hehe das ist mir jetzt wo du es sagst auch aufgefallen, also müsste man vorher dem feld sText zuweisen :wall:

also so:
Delphi-Quellcode:
StringGrid1.Cells[aktCellX,aktCellY] := sText;
:duck: raik

so jetzt habe ich mir den thread nochmal durchgelesen und Lannes du hast recht , also nochmal :duck:

gordon freeman 29. Mär 2005 20:16

Re: Markierung von Text in StringGrid-Zelle umgehen
 
@Lannes Wenn ich es so schreibe, wie du geschrieben hast wird wieder nur die Zahl angezeigt, die der User eingetiptt hat, kein + davor :cry:

@kiar Wie meinst du das mit 'ner zusätzlichen String-Variable? In wie weit soll das helfen :freak:

kiar 29. Mär 2005 20:52

Re: Markierung von Text in StringGrid-Zelle umgehen
 
hallo habe das eben ausprobiert, so bald die aktuelle zelle den focus erhält wird nur die zahl eingegeben.

wenn ich folgendes realisiere
Delphi-Quellcode:

 if (key in ['0'..'9']) and (length(SG1.Cells[2,2]) = 0) then
         SG1.Cells[2,2] := ' + ' + key
      else
         SG1.Cells[2,2] := SG1.Cells[2,2]+ key;
und eine andere zelle als 2,2 den fokus erhält geht es :wall:

raik

Lannes 29. Mär 2005 21:04

Re: Markierung von Text in StringGrid-Zelle umgehen
 
Hallo,
Zitat:

Zitat von gordon freeman
@Lannes Wenn ich es so schreibe, wie du geschrieben hast wird wieder nur die Zahl angezeigt, die der User eingetiptt hat, kein + davor :cry:

wo weist Du den Variablen "aktCellX,aktCellY" die Werte zu?
Ich nutze dafür das Ereignis OnSelectCell.
Hab meinen Code gerade nochmal getestet, er funktioniert :roll:
Allerdings muss dafür goEditing auf False stehen. :(

gordon freeman 29. Mär 2005 21:21

Re: Markierung von Text in StringGrid-Zelle umgehen
 
Zitat:

Zitat von kiar
und eine andere zelle als 2,2 den fokus erhält geht es :wall:

Hm daran liegt es, bei mir soll der Benutzer ja in der Zelle weiterschreiben können, sodass Zahlen wie '+42' entstehen können. Das heißt, der Fokus soll in der Zelle bleiben, aber man soll mit einer weiteren Eingabe nicht vorherige ersetzen!

Zitat:

Zitat von Lannes
wo weist Du den Variablen "aktCellX,aktCellY" die Werte zu?
Ich nutze dafür das Ereignis OnSelectCell.
Hab meinen Code gerade nochmal getestet, er funktioniert Rolling Eyes
Allerdings muss dafür goEditing auf False stehen.

Ich benutze auch OnSelectCell. Hab GoEditing auf true stehen. Das wird doch benötigt, damit der Benutzer Eingaben direkt im StringGrid machen kann, oder :gruebel:

Lannes 29. Mär 2005 21:47

Re: Markierung von Text in StringGrid-Zelle umgehen
 
Hallo,

geht mit "goEditing auf False", weil Du ja die Tasten abfängst und direkt den Wert zuweist.
Hast dann zwar keinen Cursor.
Teste es mal. :coder:

Erklärung bzgl. "goEditing auf False".
Steht goEditing auf True wird der Inplace-Editor aufgerufen und das Ereignis OnKeyPress wird nicht mehr aufgerufen.
Mehr Info zum Inplace-Editor findest Du dort:
1.StringGrid-Zelle während des Editierens farbig?
oder das, dann aber ein Editfeld einsetzen:
2....eine Combobox als InPlace Editor in einem StringGrid verwenden?
oder
Das Ereignis OnGetEditText tritt ein bevor der Inplace-Editor aufgerufen wird,
da könntest Du mit Value ein Pluszeichen vorgeben.
Ist aber auch nicht so gut, weil dann das Pluszeichen selektiert wird.

gordon freeman 29. Mär 2005 22:03

Re: Markierung von Text in StringGrid-Zelle umgehen
 
Hab 'goediting' ausgeschaltet und jetzt funktioniert es :hello:
big thx 2 Lannes und Kiar!!! :dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:02 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