Tema: Re: Klausimas is Delphi
Autorius: ReM
Data: 2009-04-30 00:19:08
Iš tikro viskas paprasta. Bet niekaip iki to nedagalvojau, nes
application.ProcessMessages veikimo normaliai nežinojau. Nors pats 
pavadinimas sako, ką jis daro. :) Ačiū.

"Žilvinas Ledas" <ledas_REM_ME_@liux.lt> wrote in message
news:gta8do$9tr$1@trimpas.omnitel.net...
> 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 :)
>>
>>
>
> __________ Information from ESET NOD32 Antivirus, version of virus
> signature database 4043 (20090429) __________
>
> The message was checked by ESET NOD32 Antivirus.
>
> http://www.eset.com
>
>
>


__________ Information from ESET NOD32 Antivirus, version of virus signature 
database 4043 (20090429) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com




__________ Information from ESET NOD32 Antivirus, version of virus signature database 4043 (20090429) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com