Faktycznie jest jak wół var przed Key, ale najwyraźniej nic to nie wnosi. Spróbuję później jeszcze powalczyć tą metodą, może gdzieś schował się jakiś detal. Dzięki :)
Edit:
Dobra, wszystko jasne i banalne, spieszyłem się i niedoczytałem, że trzeba obsłużyć OnKeyPress. Jeśli kogoś interesuje obsługa ctrl+backspace, czyli skasowanie całego wyrazu na lewo od karetki, oraz wstawienie własnego znaczka do TEdita, to wygląda to następująco:
procedure TfrmSpis.edCiagSzukanyKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
Ctrl := (Shift = [ssCtrl]);
end;
procedure TfrmSpis.edCiagSzukanyKeyPress(Sender: TObject; var Key: Char);
var
strTekst: string;
Znak: PChar;
PozKaretka: Integer;
function ZnakAlfaNumeryczny(Znak: Char): Boolean;
begin
Result := ((Znak in ['0'..'9']) or (Znak in ['a'..'z']) or (Znak in ['A'..'Z']) or (Znak > #127));
end;
begin
if Ctrl then
with (Sender as TEdit) do
begin
strTekst := Text;
if (Key = #127) and (Length(strTekst) > 0) then //ctrl+backspace = del (127 ascii)
begin
Znak := @strTekst[SelStart];
while (Znak >= @strTekst[1]) and ZnakAlfaNumeryczny(Znak^) do
begin
Znak^ := #255;
Dec(Znak);
end;
while (Znak >= @strTekst[1]) and not ZnakAlfaNumeryczny(Znak^) do
begin
Znak^ := #255;
Dec(Znak);
end;
PozKaretka := Integer(Znak) - Integer(@strTekst[1]) + 1;
Text := AnsiReplaceText(strTekst, #255, '');
SelStart := PozKaretka;
end;
if Key = ' ' then //"twarda spacja" - tylko dla celów własnych, inne aplikacje nie strawią znaczka stopni :)
begin
PozKaretka := SelStart;
Text := AnsiLeftStr(strTekst, PozKaretka) + '°' + AnsiRightStr(strTekst, Length(strTekst) - PozKaretka); //176 ascii
SelStart := PozKaretka + 1;
end;
Key := #0;
end;
end;
Do tego można poprawić ctrl+del, który kasuje wszystko po prawej stronie karetki, a powinien tylko pierwszy wyraz, ale to może następnym razem.