Tema: Re: Klausimas is Delphi
Autorius: Žilvinas Ledas
Data: 2009-04-29 22:05:28
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 :) 
> 
> 
3Dastronomyagricultureaudioautosautos.audiautos.audioautos.binariesautos.bmwautos.clubautos.fordautos.hondacrxautos.japanautos.mercedesautos.opelautos.sportautos.volvoautos.vwaviaavia.binariesbankcardsbinariesbooksbuildingcinemacommercecomp.hardwarecomp.softwarecomp.lietuvinimascomp.networksculturedarbas.ieskaudarbas.siulaudesigneconomicselectronicsfaunafauna.aquafauna.binariesfishingflorafotofoto.binariesgamesgames.csgames.onlinegsmgurmanaihumourhumour.binariesinternetlawmicrosoftmotomusicmusic.binariesmusic.instrumentsmusic.LT.binariesnavigacijaphppoliticsprogrammingrpgsportstudyingsveikatatalktesttranslationtransportationtraveltravel.binariestvunixvideovideo.binarieswatersportswwwwww.flashpdaautos.supermama.ltmobiledarbasretro.3Dretro.agricultureretro.astronomyretro.audioretro.autosretro.autos.audiretro.autos.audioretro.autos.binariesretro.autos.bmwretro.autos.clubretro.autos.fordretro.autos.hondacrxretro.autos.japanretro.autos.mercedesretro.autos.opelretro.autos.sportretro.autos.supermamaretro.autos.supermama.ltretro.autos.volvoretro.autos.vwretro.aviaretro.avia.binariesretro.bankcardsretro.beosretro.binariesretro.booksretro.buildingretro.cinemaretro.commerceretro.compretro.comp.hardwareretro.comp.lietuvinimasretro.comp.networksretro.comp.softwareretro.cultureretro.darbasretro.darbas.ieskauretro.darbas.siulauretro.designretro.economicsretro.electronicsretro.e-vejasretro.faunaretro.fauna.aquaretro.fauna.binariesretro.fishingretro.floraretro.fotoretro.foto.binariesretro.gamesretro.games.csretro.games.onlineretro.games.rpgretro.genealogijaretro.gsmretro.gurmanairetro.humourretro.humour.binariesretro.internetretro.YZFretro.YZF.nebukretro.YZF.nebuk.netikintisretro.YZF.nebuk.netikintis.bukretro.YZF.nebuk.netikintis.buk.tikintisretro.lawretro.microsoftretro.mobileretro.motoretro.musicretro.music.binariesretro.music.instrumentsretro.music.LTretro.music.LT.binariesretro.navigacijaretro.newsretro.news.taisyklesretro.newuserretro.pdaretro.phpretro.politicsretro.programmingretro.rpgretro.sportretro.studyingretro.sveikataretro.talkretro.translationretro.transportationretro.travelretro.travel.binariesretro.tvretro.unixretro.videoretro.video.binariesretro.watersportsretro.wwwretro.www.flashdiylt.rkm.news.announcelt.rkm.news.newuser