Klawiatura ekranowa - podstawowy kod

Klawiatura ekranowa - podstawowy kod
K9
  • Rejestracja:około 14 lat
  • Ostatnio:prawie 11 lat
  • Postów:12
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

edytowany 2x, ostatnio: kocus999
cimak
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 9 lat
  • Postów:1668
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?

edytowany 2x, ostatnio: cimak
K9
  • Rejestracja:około 14 lat
  • Ostatnio:prawie 11 lat
  • Postów:12
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.

edytowany 2x, ostatnio: kocus999
cimak
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 9 lat
  • Postów:1668
0

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

K9
  • Rejestracja:około 14 lat
  • Ostatnio:prawie 11 lat
  • Postów:12
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'?

Opi
  • Rejestracja:ponad 20 lat
  • Ostatnio:5 dni
  • Postów:1030
0

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

olesio
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
0

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


Pozdrawiam.
Opi
Ale bez założenia hooka nie da rady
cimak
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 9 lat
  • Postów:1668
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:

Kopiuj
  procedure CreateParams(var Params: TCreateParams); override;

potem w implementation:

Kopiuj
  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:

Kopiuj
  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? :|

edytowany 6x, ostatnio: cimak
Misiekd
Cimak CreateParams nie w private ale w protected!
cimak
dlaczego (takich rzeczy nigdy nie wiem:)? napisalem tak jak napisalem bo z lenistwa uzywam ctrl+shift+c i to automatycznie generuje definicje w sekcji private. a ze dziala to zostawilem.
Misiekd
bo w TCustomForm jest w protected abyś mógł go nadpisać - jakby było w private to byś go nie widział poza unitem w którym jest definicja klasy. A że działało to nie jest błąd ale na 100% krzyczał Ci kompilator, że CreateParams ma niższą widoczność niż w klasie bazowej. Jeśli cokolwiek override'ujesz to bądź pewny, że nigdy nie będzie to w sekcji private - co najmniej w protected
cimak
no i teraz jasne. dziekowac:)
0

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

Azarien
bo to zadanie?
KA
Po co płacić 30$ za coś co w stosunkowo prosty sposób można zrobić samodzielnie? Zwłaszcza że jak pisze autor wątku jest początkujący z tego wynika, że raczej pisze program "do szuflady" i na nim nie zarobi.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:4 minuty
0

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

Poul
Ciekawe jak taki program oceniłby jego nauczyciel :)
woolfik
Dokładnie od D2010.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.