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 :) > >