![]() |
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:
Allerdings wird bei einem erneuten Tastendruck sofort der gesamte Zelleninhalt wieder übrschreiben.
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; 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 |
Re: Markierung von Text in StringGrid-Zelle umgehen
hallo vor dem ereignis ein
Delphi-Quellcode:
alsostext:='';
Delphi-Quellcode:
/// mann dicke finger
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; |
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; |
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:
:duck: raik
StringGrid1.Cells[aktCellX,aktCellY] := sText;
so jetzt habe ich mir den thread nochmal durchgelesen und Lannes du hast recht , also nochmal :duck: |
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: |
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:
und eine andere zelle als 2,2 den fokus erhält geht es :wall: 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; raik |
Re: Markierung von Text in StringGrid-Zelle umgehen
Hallo,
Zitat:
Ich nutze dafür das Ereignis OnSelectCell. Hab meinen Code gerade nochmal getestet, er funktioniert :roll: Allerdings muss dafür goEditing auf False stehen. :( |
Re: Markierung von Text in StringGrid-Zelle umgehen
Zitat:
Zitat:
|
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. ![]() oder das, dann aber ein Editfeld einsetzen: 2. ![]() 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. |
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 19:57 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