Klawiatura ekranowa - podstawowy kod

0

Wiem, że były już podobne posty, ale nie znalazłem w nich odpowiedzi. Jestem początkującym 'programistą' i bardzo mało umiem w Delphi. Muszę na jutro napisać program - klawiaturę ekranową. Stąd moje pytanie: jak powinien wyglądać kod który muszę przypisać do Buttona tak aby po jego wciśnięciu została wysłana jakaś wartość do innego programu - np litera a.
Bardzo proszę o pomoc

1

bylo bylo.
podstawy delphi musiales poznac na zajeciach wiec powinienes rozumiec jak wykorzystac keybd_event().
http://www.google.pl/search?hl=pl&source=hp&q=keybd_event+delphi&aq=2&aqi=g3&aql=&oq=keybd
a jak nie rozumiesz tzn ze sie opier**s caly rok. chociaz pewnie teraz napiszesz ze "tego nie bylo", "wykladowca nic nie uczyl" itd.. ;>
prawda jest taka ze jesli nie uczyles sie absolutnie nic to powinienes nie zaliczyc tego przedmiotu, zgodzisz sie ze mna?

0

a no napiszę tak. Mieliśmy dokładnie 2 zajęcia z Delphi-wstęp oraz omówienie menu delphi (co znajduje sie na każdym pasku). Wcześniej całe pół roku tylko pascal. I właśnie pod koniec drugich zajęć gościu rozdał tematy programów jakie mamy zrobić na zaliczenie przedmiotu.
Co do zaliczenia to zgodzę się. Ale tego co było to akurat się nauczyłem.

0

no to jak miales pascala to powinienes sobie poradzic, delphi to pascal tyle ze obiektowy.

0

no niby tak. Ale w przypadku tego programu który muszę napisać to inna bajka - pascal u nas wyglądał tak że pisaliśmy programy typu wypisz kolejne wyrazy ciągu...
Ogólnie to dzięki za pomoc :)
Tylko trochę nie rozumiem. Już wiem jak przyciskom przypisać dane litery ale jak to teraz wysłać 'na zewnątrz'?

0

A tą klawiaturą masz się posłużyć w swoim programie, czy za jej pomocą pisać np.: w notatniku ?

0

Jeżeli chcesz zasymulować wciśnięcie klawisza w innym okienkowym programie to Keybd_Event + google.

1

napisze, bo zagadnienie wydaje mi sie nieco trudniejsze, szczegolnie jesli chodzi o Focus okna i mysle ze nikt naprawde poczatkujacy by tego nie napisal. z reszta niech juz bedzie dla przyszych pokolen.
jesli fatycznie przez pol roku mieli tylko pascala a potem dwie lekcje z delphi, to prowadzacy chyba sni ze to sami napisza :|

na dziendobry w sekcji private protected:

  procedure CreateParams(var Params: TCreateParams); override;

potem w implementation:

  procedure TForm1.CreateParams(var Params: TCreateParams) ;
  begin
   inherited;
   Params.ExStyle := Params.ExStyle + WS_EX_NOACTIVATE; //const WS_EX_NOACTIVATE = $8000000;
  end;

to sprawi, ze naszego okna nie bedzie sie dalo aktywowac, co w przypadku klawiaury ekranowej jest koniecznie. czyli gdy np. notatnik bedzie aktywny a Ty klikniesz na przycisk na naszej "klawiaturze" to notatnik wciaz pozostanie aktywny.

Dalej, zeby klawiatura byla zawsze na wierzchu:
w object inspectorze, wlasciwosc formy FormStyle:=fsStayOnTop;

Potem kladziesz kilka przyciskow (TButton) na forme. jako caption przyciskow ustawisz a,b,c,.... w jednym z nich w onClick dajesz:

  procedure TForm1.Button1Click(Sender: TObject);
  var znak:Char;
  begin
    znak:=(sender as TButton).Caption[1]; //jesli Twoj przycisk nie jest TButton tylko np TBitBtn to dajesz (sender as TBitBtn)
    //do zmiennej wstawisz pierwsza litere Captionu tego przycisku, ktory wywolal procedure.
    keybd_event(VkKeyScan(znak), 0, 0, 0); //wciska klawisz
    keybd_event(VkKeyScan(znak), 0, KEYEVENTF_KEYUP, 0); //puszcza klawisz
  end;

zaznaczasz reszte przyciskow na formie, w object inspectorze przechodzisz na zakladke events i z listy przy OnClick wybierzasz ta wczesniej napisana procedure, czyli "Button1Click". Poszukaj w necie wyjasnienie co to sender i jak sie tego uzywa to wszystko zrozumiesz.

To jest taka najprostsza "klawiatura ekranowa" bo nie obsluguje np shift, alt, ctrl itd. nie napiszesz nia np "ę" bo to wymaga zasymulowania nacisniecia dwoch przyciskow i w odpowiedniej kolejnosci. alt+e.

P.S. Opi, gdzie Ty widzisz potrzebe zakladania hooka? :|

0

A po co na nowo wymyslać koło. Nie lepiej użyć AdvSmoothTouchKeyBoard???

0

W najnowszych Delphi jest od tego komponent.
http://blogs.embarcadero.com/files/2009/08/touch05_1759.png
Rzucasz i masz ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1