Na, išties tai viskas paprasta, kai suvoki, kaip veikia kodas :)
Pamąstykime taip: tu nori, kad tavo pasiųstas keyboard event'as (lt.
vadinkime įvykis) "backspace" įvyktų pirma negu dabar "vykstantis" "a"
įvykis. Tačiau taip neįvyksta. Kodėl? O atsakymas elementarus :) juk
"backspace" ir negali įvykti, nes dabar vyksta "a" įvykis ir tu gauni
veiksmų eilę, kuri ir turi būti: ..., "a", "backspace", ... .
Ką daryti? Ogi tereikia iškviesti application.ProcessMessages, kas,
paprastai sakant, priverčia apdoroti susikaupusias žinutes, tame tarpe
ir "backspace" įvykį. Taip įvykių eilė pasidaro tokia (supaprastintai):
...., pradedamas vykdyti "a" (bet dar neįrašomas pats a simbolis),
application.ProcessMessages priverčia vykti "backspace", įvyksta "a", ...
Taigi, kodas:
if Key='a' then
begin
keybd_event(VK_BACK, 0, 0, 0);
keybd_event(VK_BACK, 0, KEYEVENTF_KEYUP, 0);
application.ProcessMessages;
end;
Gero vakaro,
Žilvinas
ReM wrote:
> Taip. Čia viskas suprantama. Bet ađ norëjau padaryt tā patá kitaip
> (paprasčiau). keybd_event(VK_BACK, 0, 0, 0); imituoja klaviđo Backspace
> paspaudimā. Tačiau simbolis "a" pasirodo pirmiau, nei suveikia klaviđo
> paspaudimo imitacija. Todël ir nutrina bûtent "a". Jei suveiktø pirmiau,
> bûtø tai, ko man reikia. Iđ tikro pas mane ten viskas daug sudëtingiau. Čia
> tik toká testā padariau, kaip turëtø bût. Matomai kol neiđeina iđ KeyPress
> procedûros keybd_event nesuveikia. Tavo nurodyto bûdo ađ naudoti negalësiu,
> nes viskas bus svetimos programos lange. Arba kitas variantas bûtø sugalvot,
> kaip tā patá atlikt svetimam lange.
>
> "Ninja666" <Ninja666@microsoft.com> wrote in message
> news:gt8o0t$v2p$1@trimpas.omnitel.net...
>> ReM wrote:
>>> Sveiki,
>>>
>>> Paprastutë klaviđo paspaudimo procedûra. Reikia, kad paspaudus "a",
>>> iđtrintø prieđ tai esantá simbolá.
>>> Tikëjausi, kad taip nutrins, tačiau nutrina bûtent simbolá "a".
>>>
>>> procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
>>> begin
>>> if Key='a' then
>>> begin
>>> keybd_event(VK_BACK, 0, 0, 0);
>>> keybd_event(VK_BACK, 0, KEYEVENTF_KEYUP, 0);
>>> end;
>>> end;
>>>
>>> Kaip padaryt, kad nutrintø prieđ kursoriø esantá simbolá? "a" irgi turi
>>> pasirodyt.
>>>
>> Kaūkaip tu darai pro kitā galā. Nesuprantu ko tu nori, todël pateikiu
>> pavyzdukā tam, ko tu prađai, bet ađ spëju, kad tu darai kaūkā iđ visiđkai
>> kitos pusës.
>>
>> procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
>> var
>> vText: string;
>> vSelPos: integer;
>> begin
>> if key = 'a' then
>> begin
>> vText := Edit1.Text;
>> vSelPos := Edit1.SelStart;
>> Delete(vText, vSelPos, 1);
>> Edit1.Text := vText;
>> Edit1.SelStart := vSelPos;
>> end;
>> end;
>>
>>
>> beje - vSelPos reikës skaičiuoti kitaip, jeigu tekstas bus paūymëtas. Tada
>> reikës ir vText skaičiuot kitaip :)
>
>