Witam mam potrzebę aby w mojej aplikacji mógł łatwo wpisywać znaki regionalne w paru językach (Niemiecki, czeski, hiszpański etc..). Ugryzłem sobie to w taki sposób że mam tablice:
// Przykładowo dla języka niemieckiego
Znaki_Specjalne[2, 1] := 'Ä';
Znaki_Specjalne_SC[2, 1] := 'A+SA';
Znaki_Specjalne[2, 2] := 'ä';
Znaki_Specjalne_SC[2, 2] := 'A+A';
Znaki_Specjalne[2, 3] := 'Ö';
Znaki_Specjalne_SC[2, 3] := 'O+SA';
Znaki_Specjalne[2, 4] := 'ö';
Znaki_Specjalne_SC[2, 4] := 'O+A';
Znaki_Specjalne[2, 5] := 'Ü';
Znaki_Specjalne_SC[2, 5] := 'U+SA';
Znaki_Specjalne[2, 6] := 'ü';
Znaki_Specjalne_SC[2, 6] := 'U+A';
Znaki_Specjalne[2, 7] := 'ß';
Znaki_Specjalne_SC[2, 7] := 'B+A';
Której używam w procedurze:
procedure Tuedytor.Edit12KeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
var
przycisk, TK: string;
i,ii,iii: integer;
znalazlem : integer;
begin
przycisk := '';
znalazlem:=0;
if ssShift in Shift then przycisk := przycisk + 'S';
if ssAlt in Shift then przycisk := przycisk + 'A';
if ssCtrl in Shift then przycisk := przycisk + 'C';
Przycisk := char(Key) + '+' + przycisk;
for i := 1 to 70 do
begin
if Znaki_Specjalne_SC[Combobox1.ItemIndex, i] = przycisk then begin
TK:=Edit12.Text;
iii:=Edit12.SelStart;
Insert(Znaki_Specjalne[Combobox1.ItemIndex, i], TK, Edit12.SelStart+1);
Edit12.Text := TK;
Edit12.SelStart:=iii+1;
znalazlem:=1;
end;
end;
if znalazlem = 1 then Key:=0;
end;
Wszystko generalnie działa ale niestety tylko generalnie ponieważ gdy postawię obok siebie np 2 razy Ü to poprzedzający zamienia się na znak zapytania
Ma może któryś z szanownych kolegów jakiś pomysł dlaczego tak się dzieje? Zapewne sprawa idzie o jakiś problem z kodowaniem bo ów znaki specjalne zajmują więcej niż 1 char i gdy są obok siebie to koniec pierwszego znaku reaguje z początkiem następnego
Proszę o pomoc jak temu zaradzić
Ps. kiedy skopiuje jeden znak i wklejam do kilka razy to nic się takiego nie dzieje :/