Tema: Re: Klausimas is Delphi
Autorius: Akechi
Data: 2009-05-06 11:20:46
Viskas yra paprasciau nei jus galvojate.

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
   if key = 'a' then
   key := #8;
end;

tuomet vietoj a yra nusiunciamas backspace. thats all folks...

ReM wrote:
> 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
> 
> 
>