dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

delphi, keyboard

 
dev.gamez.lv Forum Index -> Programmēšana
View previous topic :: View next topic  
Author Message
S1
Indago dalībnieks
Indago dalībnieks


Joined: 31 Jul 2005
Posts: 219
Location: Jelgava

PostPosted: Sat Jul 08, 2006 2:48 pm    Post subject: delphi, keyboard

sveiki, man ir vien jautājums par pogu nolasīšanu. delfīnā to var vienkārši izdarīt ar formas notikumiem(events) onKeyPress utt... jautājums ir šāds, vai var to izdarīt savādākā veidā, neizmantojot šos formas eventus un windows loopu. labs piemērs ir, kā dabūt kursora X,Y koord : windows.GetCursorPos , kautko tamlīdzīgu gribētos, tikai ar pogām. (lai izvairītos no spamošanas tad saku uzreiz - programmēšana nav mans hobijs )
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sat Jul 08, 2006 3:19 pm    Post subject:

Neviens jau tev neaizliedz saglabāt tās nospiestās pogas kautkādā masīvā un tad vēlāk izmantot.
Bet ja nu ļoti tā negribās, tad var lietot, piemēram, pa tiešo WinAPI: http://windowssdk.msdn.microsoft.com/en-us/library/ms646299.aspx
Code:
var keys: array[0..255] of byte;
...
GetKeyboardState(keys);
if keys[VK_LSHIFT] and $80!=0 then ShowMessage('Nospiests kreisais shift');
if keys[ord('A')] and $80!=0 then ShowMessage('Nospiests burts A'); // mazais a==lielais A
if keys[VK_SPACE] and $80!=0 then // atstarpe;

Tās VK_xx konstantes var apskatīties te: http://windowssdk.msdn.microsoft.com/en-us/library/ms645540.aspx

Tikai vienas pogas nospiedienam var izmantot šo fju: http://windowssdk.msdn.microsoft.com/en-us/library/ms646293.aspx
(tikai tas būs lēnāk, ja vajadzēs pēc kārtas pārbaudīt 10 pogas, nekā izsaucot to GetKeyboardState fju
Code:
if GetAsyncKeyState(VK_SPACE) and $80 !=0 then // atstarpe ir nospiesta;
Back to top
View user's profile Send e-mail
S1
Indago dalībnieks
Indago dalībnieks


Joined: 31 Jul 2005
Posts: 219
Location: Jelgava

PostPosted: Sat Jul 08, 2006 11:47 pm    Post subject:

paldies par info . sākumā nesanāsa palaist f-ju GetKeyboardState(), jo tas lielums ko padod tai f-jai ir tKeyBoardState tips. beigās atradu šādu risinājumu:
Code:
var KeyState  :  TKeyboardState;
//onFormCreate, citādi spaidot pogu tā vērtība visu laiku mainās
KeyState[VK_SPACE] := 0;
SetKeyboardState(KeyState);

if(KeyState[VK_SPACE] = 1)then ...


vēl man baigi derētu zināt vai poga(jebkura) ir tikusi nospiesta ???
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Jul 09, 2006 12:09 am    Post subject:

em... cikls?
Code:
for i := 0 to 255 do
  if KeyState[i] = 1 then // ? kāpēc 1, dokumentācijā teikts, ka $80
    kautkaadaa_poga_ir_nospiesta();
Back to top
View user's profile Send e-mail
S1
Indago dalībnieks
Indago dalībnieks


Joined: 31 Jul 2005
Posts: 219
Location: Jelgava

PostPosted: Sun Jul 09, 2006 12:20 pm    Post subject:

nu ja cikls Laughing laikam karstums vainīgs, ok vēlviens truls jautājums: kam tas $80 ??? itkā bez tā es iztieku...
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Jul 09, 2006 1:05 pm    Post subject:

Nu dokumentācijā rakstīts, ka, ja poga nospiesta, tad ir uzstādīts augstākais (8-tais bits). Ja nav nospiesta, tad tas bits ir 0. Bet tas nenozīmē, ka, piemēram, uz kautkādiem kreisiem windows variantiem (vai klaviatūras draiveriem, nez) pirmais bits vienmēr varētu būt 1. Tādā gadījumā - nospiesta poga=$81 (kas ir true), nenospiesta poga=$01 (kas arī ir true). Jo false vērtība iegūstās tikai vienā gadījumā - kad vērtība ir=0.
Back to top
View user's profile Send e-mail
S1
Indago dalībnieks
Indago dalībnieks


Joined: 31 Jul 2005
Posts: 219
Location: Jelgava

PostPosted: Sun Jul 09, 2006 2:44 pm    Post subject:

ok skaidrs, thx
Back to top
View user's profile Send e-mail
Display posts from previous:   
dev.gamez.lv Forum Index -> Programmēšana All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group