piątek, 8 maja 2015

Uczeni w anegdotach cz1

 Ciąg dalszy opowieści o niezwykłych ludziach.
 
Nie lepszym był sławny fizyk i matematyk Andree Amper. Gdy szedł kiedyś przez most na Sekwanie, spostrzegł kamień, który go zainteresował. Podniósł więc go i zaczął oglądać. Przypomniawszy sobie jednak o wykładzie, na który zmierzał, wyjął z kieszeni zegarek by sprawdzić czas. Stwierdziwszy, że jest już dość późno, włożył szybko kamień do kieszeni, a zegarek wyrzucił do rzeki. Innym razem idąc ulicą Paryża, pomyślał o pewnym problemie matematycznym i nie zwlekając, zaczął go rozwiązywać kredą na ścianie napotkanego powozu. Zanim jednak skończył rachunki, powóz odjechał, a wraz z nim rozwiązanie.
 
amper
Andre Amper

Francis Peyton Rous, amerykański patolog, laureat Nagrody Nobla z medycyny pewnego dnia zwierzył się Robertowi Weberowi, że zdarza mu się czasami zapominać swego nazwiska. W takiej sytuacji zwykł zastępować je popularnym nazwiskiem McGuinness.

Wspomnianego już Nielsa Bohra tak pochłaniały rozmowy, że rodziło to szereg zabawnych sytuacji. Gdy na przykład w roku 1923 przyjechał do Kopenhagi Albert Einstein, aby odwiedzić Bohra, ten przywitał go na stacji kolejowej. Jadąc tramwajem do domu, tak się jednak zagadali, że minęli przystanek, na którym powinni wysiąść. Kiedy zorientowali się, że pojechali za daleko, wsiedli w tramwaj jadący w przeciwnym kierunku, ale znów – pochłonięci rozmową — pojechali za daleko. Bohr wspominał później, że powtórzyło się to jeszcze parę razy, ponieważ tak byli zatopieni w rozmowie.

Jednym z nałogów Nielsa Bohra było palenie fajki. Pochłonięty jednak rozmową zawsze miał problemy, aby tę fajkę rozpalić. Kiedy bowiem zapalił już zapałkę i zbliżał do cybucha, by rozżarzyć tytoń, przychodził mu do głowy jakaś nowa idea, którą chciał się natychmiast podzielić z rozmówcą. Zastygał więc z palącą się zapałką i kontynuował dyskusję. Gdy w końcu spostrzegł, że zapałka zgasła, brał i zapalał nową, jednak i tym razem jakaś nowa myśl nie pozwalała mu rozpalić fajki. Świadomi tych kłopotów współpracownicy Bohra przy każdej okazji obdarowywali go możliwie największymi pudełkami zapałek, których mu zawsze brakowało.

Nie inaczej było w młodości Nielsa Bohra. Lubił na przykład grać w piłkę nożną, choć przeważnie stał na bramce. Pewnego razu podczas meczu miał niewiele do roboty, gdyż gra przeważnie odbywała się na połowie przeciwnika. Nagle jednak silnie kopnięta piłka zaczęła się toczyć w stronę jego bramki. Tymczasem on stał zamyślony koło słupka bramki, nie zwracając uwagi na grę i gdyby nie wołanie widzów, nie złapałby piłki. Zapytany po meczu odpowiedział, że przyszedł mu do głowy pewien problem matematyczny i tak mu zaprzątnął uwagę, że zaczął notować obliczenia na słupku bramki.

To nie jedyne pasje i słabości tego wielkiego uczonego. Pasjonował się między innymi filmami, zwłaszcza westernami, na które często zabierał swych współpracowników. Wspominali oni, że siedzenie obok Bohra w kinie było męczące, ponieważ zwykle nie nadążał on z akcją i trzeba było mu tłumaczyć co to za bohater. Nie inaczej było podczas zebrań naukowych. Zdarzało się często, że gdy jakiś wizytujący fizyk wygłaszał referat na temat swej aktualnej pracy, to Bohr pozostawał w tyle za innymi w zrozumieniu toku myślenia referenta. Taki paradoks...

Oto kolejna słabość Nielsa Bohra: ciągłe niezadowolenie. Stale wprowadzał poprawki i ulepszenia do wszystkiego, co robił. Kiedy pisał artykuł naukowy, to nieustannie go przepisywał i wprowadzał liczne poprawki do ostatniej chwili, gdy artykuł wysyłano już do druku. Z tą jego przypadłością związana jest humorystyczna opowieść dotycząca rozbudowy jego instytutu. Pewnego dnia Bohr oglądał postęp prac budowlanych. Majster, który dobrze poznał już tę cechę profesora, podszedł i powiedział: „Profesorze Bohr, jeśli chce pan przesunąć tę ścianę, to proszę decydować szybko, bo za parę godzin beton zastygnie...”.

dirac
Paul Dirac

wtorek, 5 maja 2015

Niezwykłe opowieści o niezwykłych ludziach cz 2

+neumann
John von Neumann
  
 
 
 
 
 
 
 
 
 
 
 
 
 
Podobnym genialnym matematykiem był John von Neumann, kolejny jeden z najwybitniejszych uczonych XX wieku. On także był cudownym dzieckiem i od wczesnych lat wykazywał geniusz matematyczny. Mając sześć lat, dzielił już w pamięci liczby ośmiocyfrowe, a w wieku lat ośmiu znał już rachunek różniczkowy i całkowy. Miał doskonałą fotograficzną pamięć, zapamiętywał od razu wszystko, co przeczytał. Mógł na przykład cytować z pamięci książkę telefoniczną, strona po stronie, ze wszystkimi jej numerami telefonów, nazwiskami i adresami lub cytować, także strona po stronie, z powieści przeczytanej kilka bądź kilkanaście lat wcześniej! Wśród tylu niezwykłych właściwości nie zabrakło jednak i słabszych stron. Jego druga żona – Klara – opowiadała na przykład, że pewnego razu wybrał się on do Nowego Jorku samochodem załatwić pewną sprawę, ale za jakiś czas zadzwonił do niej z przydrożnej stacji benzynowej z pytaniem „Po co on ma w ogóle jechać do tego Nowego Jorku”. Zapomniał... 

Nie tylko do matematyki przyszli wielcy naukowcy odczuwają pociąg. Nie brakuje także praktyków, którzy zamiast pozostawać w wirtualnym świecie cyfr i teorii, eksperymentowali cały boży dzień. Taką właściwość wykazywał na przykład amerykański fizyk Henry Rowland. Jak tylko nauczył się chodzić, przepadał za eksperymentami naukowymi. Już jako dziecko trzyletnie wykonał z kartonu udany model zegara. W nieco późniejszym wieku budował butelki lejdejskie do wytwarzania wyładowań elektrycznych i konstruował elektromagnesy. Mając siedemnaście lat, zbudował w domu piec do odlewów żelaznych, z których sporządził wielki silnik elektryczny. Wśród wielu różnorakich doświadczeń nie mogło zabraknąć i sytuacji niebezpiecznych. Pewnego razu zrobił na przykład z papieru duży balon na gorące powietrze. Niestety balon spadł na dach pobliskiego domu i zajął się ogniem. Wezwani na pomoc strażacy ugasili pożar i nikomu na szczęście nic się nie stało. A propos balonu: Oto inna historia, osiemnastowiecznego uczonego Antoine Gay-Lussaca. 

Podczas jednego z lotów balonem w celu dokonania pomiarów naukowych atmosfery zdarzył się zabawny incydent. Otóż, gdy balon przestał się wznosić, tenże uczony postanowił wyrzucić z niego zbędny balast, aby móc wznieść się, choć jeszcze kilka metrów wyżej. Zaczął więc pozbywać się z balonu wszystkiego, co było dla niego zbędne, łącznie z krzesłem, na którym siedział. Pozostawił tylko przyrządy pomiarowe. Zabawny incydent dotyczy właśnie tego krzesła. Spadające z nieba krzesło zobaczyła młoda pasterka owiec. Sądząc, że to cud zaraz zwołała miejscową ludność, aby zobaczyli ten niebiański przedmiot, który zachował się w całości, ponieważ upadł na krzaki. Co prawda trochę się dziwiono, że krzesło stało się przedmiotem cudu, zwłaszcza że było ono dość marnie wykonane, ale miejscowy proboszcz polecił przenieść je do pobliskiego kościoła, gdzie zaraz stało się celem pielgrzymek z całej okolicy. Dopiero po pewnym czasie wyjaśniło się pochodzenie niebiańskiego krzesła. Najlepiej wyszła na tym owa pasterka, która będąc sierotą, została adoptowana przez pobożną i zamożną wdowę.

piątek, 1 maja 2015

Niezwykłe opowieści o niezwykłych ludziach cz 1

Ludzie wybitnie uzdolnieni, obdarzeni przez los niezwykłą łatwością analizowania i tworzenia, stanowią filar rozwoju cywilizacji ludzkiej. To dzięki ich odkryciom i wynalazkom zmienia się nasz świat i życie. Pomyślcie tylko, jaki wkład należało włożyć, aby człowiek stanął na Księżycu, ilu ludzi musiało wpierw odkryć i zrozumieć prawa przyrody... Przecież nie wystarczy tylko wsiąść do rakiety, wycelować na Księżyc i wystartować. Zanim dotrzemy do Księżyca (około 3 dni), ten będzie znajdował się już tysiące kilometrów dalej. To wszystko trzeba przewidzieć i obliczyć. Dzięki naukowcom i badaczom możemy lepiej zrozumieć swoje miejsce we Wszechświecie i korzystać z możliwości, jakie daje Przyroda.

Niels Bohr
 Naukowiec często kojarzy się z kimś wyalienowanym, człowiekiem w okularach zamkniętym w laboratorium, który poza swoimi badania- mi nie więcej nie widzi. Nie jest to do końca prawda, choć rzeczywiście -jak na wielką indywidualność przy- stało- często zdarza się, że jest on kimś nietuzinkowym, a jego dziwne zachowanie jest powszechnie znane i nikogo nie dziwi. George Gamow w jednej ze swoich książek wspomina na przykład, że pewnego razu wracał z przyjęcia w towarzystwie Nielsa Bohra (jeden z najsłynniejszych fizyków XX wieku), jego żony i Hendrika Casimira. Było tuż przed północą, gdy opustoszałą ulicą przechodzili obok banku. Casimir, który lubił się wspinać, zauważył na ścianach budynku występy, które umożliwiały wspinaczkę. Zaraz też sprawdził to praktycznie, wchodząc po nich aż do drugiego piętra. Gdy Casimir zszedł, Bohr także postanowił spróbować swoich sił i zaczął się wspinać. Kiedy już minął pierwsze piętro, nagle pojawił się patrol policyjny. Policjanci spostrzegli przyklejoną do ściany budynku postać ludzką, jednak po przyjrzeniu się, z ulgą rzekli: „Ach, to tylko profesor Bohr”, po czym nie robiąc zbędnego tarabanu, oddalili się. 
 
Innym razem tenże uczony prowadził wielogodzinną dyskusję z jednym ze swych współpracowników, amerykańskim fizykiem Victorem Weisskopfem, a gdy nadeszła godzina osiemnasta, rozmówca oznajmił, że musi kończyć, ponieważ ma umówione spotkanie. Bohr pragnąc dokończyć dyskusję, odprowadził go do tramwaju, kontynuując rozmowę w drodze na przystanek. Gdy nadjechał tramwaj Weisskopf wszedł na stopień, ale Bohr stojąc obok wejścia, nadal zawzięcie mu coś tłumaczył. Rozpoznając Bohra, motorniczy nie śmiał ruszyć z miejsca, lecz wraz z pasażerami i zakłopotanym Weisskopfem czekał, aż uczony skończy. Trwało to parę minut, kiedy wreszcie Bohr sam zorientował się w sytuacji i pożegnał Weisskopfa. 
   
Wielcy geniusze żyją często w swojej rzeczywistości, a otoczenie stara się im nie przeszkadzać. W końcu to ich wielki skarb. Dobrze to opisuje przypadek Dymitra Mendelejewa, twórcy słynnej tablicy, który uzyskał od cara pozwolenie na wzięcie rozwodu ze swoją pierwszą żoną, co należało do rzeczy rzadko praktykowanych w carskiej Rosji. Kiedy inni chcieli pójść tą samą drogą, argumentując, że Mendelejewowi pozwolono, car odpowiedział krótko: „To prawda, ale Mendelejew jest tylko jeden”. Pozyskanie noblisty jako wykładowcy to wielka nobilitacja dla miasta i uniwersytetu, co od razy przekłada się na wzrost zainteresowania uczelnią przez przyszłych studentów.

Czy rzeczywiście wielkie umysły są takie wielkie, czy to tylko kwestia zwykłej inteligencji i splotu przypadków? Różnie to bywa. Część uczonych to rzeczywiście wielkie umysły, część osiąga sławę dzięki ciężkiej pracy, a część zostaje sławna dzięki zrządzeniu losu, kiedy przez przypadek odkryją coś nowego. Warto w tym miejscu wspomnieć o tym, że Fortuna różnie potrafi zakręcić kołem. Czasem człowiek styka się z czymś nowym, ale nie potrafi tego dostrzec. Tak było na przykład z Williamem Crookesem, jednym z naukowców. Pewnego dnia stwierdził, że klisze fotograficzne, które leżały w pobliżu rury do wytwarzania promieni katodowych są niezaczernione. Zamiast zbadać przyczynę tego zjawiska, odesłał klisze do producenta w ramach reklamacji. W ten sposób stracił możliwość odkrycia promieni X i zdobycia wiecznej sławy, która stała się udziałem Wilhelma Röntgena. Wyobrażacie sobie jego szok, gdy zorientował się, jaka szansa przeszła mu koło nosa...

William Crookes
Promieniowanie rentgena
Wilhelm Roentgen
 
Niektórzy uczeni są tak pochłonięci swoimi badaniami i odkrywaniem nowych rzeczy, że często nie dbają o sławę, a ich odkrycia, które często pozostają w formie zaledwie szkicu, nikną szybko w stercie innych papierów z równie niezwykłymi pracami. Do takich dziwaków należał na przykład Henry Cavendish, odkrywca wodoru, jeden z najwybitniejszych uczonych wszech czasów. Odkrył on między innymi prawo oddziaływania ładunków elektrycznych na kilkanaście lat przed Coulumbem, ale swoich wyników nie ogłosił drukiem i nikt o nich nie wiedział. Dopiero po przeszło stu latach uczynił to James Maxwell po analizie zachowanych rękopisów.

piątek, 24 kwietnia 2015

Przechwyt klawiatury w Delphi- podsumowanie

     Stosując którąś z metod przechwytywania klawiatury, musimy pamiętać o kilku podstawowych zasadach. Pierwsza z nich wydaje się być oczywista: Nie przejmujemy kontroli nad klawiszem, którego będziemy potrzebować w jego domyślnym działaniu (np. Enter, Backpace). Wyobraźmy sobie przypadek, w którym przejęliśmy kontrolę nad klawiszami liter i nadaliśmy im polecenia inne niż pisanie. Jak teraz wpiszemy swoją odpowiedź w pole edycyjne?


     Druga zasada mówi o tym, że nie musimy używać całej metody i przechwytywać wszystkie klawisze, na jakie ona pozwala. Przechwytujemy tylko te, które potrzebujemy. Odchudzi to nasz kod, a i nam zaoszczędzi czasu na pisanie czegoś niepotrzebnego.


     Trzecia zasada, o której warto pamiętać, dotyczy poprzedniego tematu. Po pierwsze, deklaracje poszczególnych klawiszy i skrótów mogą być w innej kolejności, niż my w tym rozdziale zastosowaliśmy. To od nas zależy. Po drugie, wybierając klawisze i skróty klawiaturowe do przejęcia, deklarujemy je w nowym porządku, dbając o ciągłość deklaracji: deklaracja 1, 2, 3 i tak dalej.


     Czwarta zasada mówi o tym, że nic nie stoi na przeszkodzie, aby nie móc połączyć ze sobą dwie lub wszystkie przedstawione przez nas metody. Możemy to zrobić, choć musimy zwrócić uwagę na to, aby przechwycone klawisze nie wpływały na pracę pozostałych metod. Jeżeli na przykład, przechwycimy klawisz Shift w jednej metodzie, to wszelkie skróty klawiaturowe z użyciem tego klawisza w drugiej metodzie mogą być nieaktywne, gdyż jak tylko naciśniemy ten klawisz, wykona się przypisana do niego procedura.

wtorek, 21 kwietnia 2015

Zakładanie hooka w Delphi- metoda Short Cut

Metoda Short Cut


    Jest to najbardziej skomplikowana metoda z tych trzech zaprezentowanych (por. Metoda Key Press i Metoda Hot Key). Służy ona do tworzenia skrótów klawiaturowych z użyciem klawiszy rozszerzonych Ctrl i Alt oraz ich połączenia, czyli Ctrl+Alt+klawisz. Jak widzimy po tabeli skrótów, obejmuje ona znaczną ich część. W sumie, za jej pomocą utworzyliśmy aż 165 skrótów. Każdy z nich będzie generował osobną procedurę o nazwie Procedura 1, 2, 3 aż do 165. W jej obrębie zawarliśmy naszą procedurę „Opcja niedostępna”, którą Czytelnik-programista może wymienić na inny zbiór poleceń do wykonania.

     Wszystkie informacje o stworzonych skrótach zawieramy w tablicy rekordów o nazwie ShortCutArray, którą wypełniamy danymi przy uruchomieniu programu (FormCreate):

ShortCutArray[0].sShortCut := TextToShortCut('Alt+`');

ShortCutArray[0].pAction := Procedura1;

     Każda komórka tablicy zawiera dwie dane: tworzony przez nas skrót oraz nazwę procedury, która ma zostać wykonana po uruchomieniu tego skrótu. Zauważmy, że skrót wpisujemy w postaci tekstowej, który dopiero podlega konwersji (TextToShortCut) do postaci skrótu klawiaturowego. W metodzie tej nie stosujemy więc kodów klawiszy, tylko ich tekstowe odpowiedniki.


     Aby móc skorzystać z metody Short Cut musimy do sekcji uses dołączyć odpowiedni moduł, co też robimy, dopisując po przecinku słowo Menus. Po deklaracji wszystkich używanych przez nas procedur, zmiennych i rekordów, przystępujemy do ich wypełniania. Jako pierwszą wypełnimy procedurę Action, która będzie analizowała wciskane przez użytkownika klawisze i badała czy nie pojawił się jakiś skrót klawiaturowy. Tworzymy ją poprzez ręczne wpisanie jej do kodu programu. Co prawda zdarzenie OnAction znajduje się w zakładce Events (w Inspektorze Obiektów), jednak standardowym, podwójnym kliknięciem jej nie utworzymy. Pozostałe dwa systemowe zdarzenia, czyli OnCreate i OnKeyDown tworzymy w zakładce Events, klikając wpierw na puste miejsce formy głównej (gdziekolwiek, byleby nie na jakiś komponent), a następnie podwójnym kliknięciem otwierając je w kodzie.

 

Zdarzenia OnKeyDown, OnKeyUp i OnKeyPress



     Zdarzenie OnKeyDown zostaje wywołane w chwili wciśnięcia klawisza, w przeciwieństwie do zdarzenia OnKeyUp, które jest wywoływane w chwili puszczenia klawisza. Trzecim zdarzeniem w zakładce Events związanym z klawiszami jest zdarzenie OnKeyPress. Ta opcja akurat nie rozróżnia tych dwóch wcześniejszych stanów i jest generowana zawsze po naciśnięciu i puszczeniu klawisza. 
 
     Aby dobrze to wszystko zrozumieć, wyobraźmy sobie, że czynność naciskania na klawisz dzielimy na dwie części: naciskamy na klawisz, a po chwili puszczamy go. Zdarzenie OnKeyPress zostanie wywołane dopiero po zakończeniu całej tej operacji, czyli po puszczeniu klawisza. Zdarzenie OnKeyDown zostanie natomiast wykonane już w pierwszej części, po wciśnięciu klawisza, nie czekając na jego puszczenie. 
 
Jak widzimy, procedura FormKeyDown zawiera tylko jedno polecenie: jakikolwiek klawisz nie zostanie wciśnięty, ma uruchomić procedurę Action, która zanalizuje, czy czasem naciskane klawisze nie są skrótem klawiaturowym.

     Procedurę Action tworzy pętla for...to...do, która analizuje każdy element tablicy ShortCutArray:

for I := 0 to High(ShortCutArray) do

    begin

             { rozbicie skrótu z tablicy }

       ShortCutToKey(ShortCutArray[i].sShortCut, pKey, pShift);

             { porównanie zmiennych }

            if ((pKey = wKey) and (sShift = pShift)) then

                 ShortCutArray[i].pAction; //wywołanie odpowiedniej procedury

    end;

     Z uwagi na to, iż skrót składa się z dwóch klawiszy (klawisz rozszerzony i zwykł klawisz), należy rozbić ten skrót na dwie zmienne: pKey, która oznacza kod ASCII klawisza, oraz pShift, która zawiera informację, który z klawiszy rozszerzonych (Ctrl, Alt czy Shift) został naciśnięty. Teraz następuje analiza poprzez porównanie, czy te zmienne są takie same, jak zmienne wKey i sShift, innymi słowy, czy naciśnięte klawisze odpowiadają któremuś ze skrótów zapisanych w tablicy ShortCutArray. Jeżeli odpowiadają, wtedy następuje wywołanie procedury pAction zadeklarowanej w rekordzie, która z kolei uruchomi naszą procedurę do wykonania.


     A oto kod całej metody:

unit Unit1;



interface



uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus; //dodać moduł Menus



type

TForm1 = class(TForm)

procedure Opcja_niedostepna;

procedure FormCreate(Sender: TObject);

procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);



private

{ Private declarations }



//procedura, która zanalizuje każde naciśnięcie klawisza

procedure Action(wKey : Word; sShift : TShiftState);



//to są procedury które będą wykonywane, gdy ktoś wciśnie skrót

procedure Procedura1; //Alt+`~

procedure Procedura2; //Alt+1

procedure Procedura3; //Alt+2

procedure Procedura4; //Alt+3

procedure Procedura5; //Alt+4

procedure Procedura6; //Alt+5

procedure Procedura7; //Alt+6

procedure Procedura8; //Alt+7

procedure Procedura9; //Alt+8

procedure Procedura10; //Alt+9

procedure Procedura11; //Alt+0

procedure Procedura12; //Alt+-

procedure Procedura13; //Alt+=

procedure Procedura14; //Alt+q

procedure Procedura15; //Alt+w

procedure Procedura16; //Alt+e

procedure Procedura17; //Alt+r

procedure Procedura18; //Alt+t

procedure Procedura19; //Alt+y

procedure Procedura20; //Alt+u

procedure Procedura21; //Alt+i

procedure Procedura22; //Alt+o
procedure Procedura23; //Alt+p

procedure Procedura24; //Alt+[

procedure Procedura25; //Alt+]

procedure Procedura26; //Alt+a

procedure Procedura27; //Alt+s

procedure Procedura28; //Alt+d

procedure Procedura29; //Alt+f

procedure Procedura30; //Alt+g

procedure Procedura31; //Alt+h

procedure Procedura32; //Alt+j

procedure Procedura33; //Alt+k

procedure Procedura34; //Alt+l

procedure Procedura35; //Alt+;

procedure Procedura36; //Alt+\

procedure Procedura37; //Alt+z

procedure Procedura38; //Alt+x

procedure Procedura39; //Alt+c

procedure Procedura40; //Alt+v

procedure Procedura41; //Alt+b

procedure Procedura42; //Alt+n

procedure Procedura43; //Alt+m

procedure Procedura44; //Alt+,

procedure Procedura45; //Alt+.

procedure Procedura46; //Alt+/


sobota, 18 kwietnia 2015

Zakładanie hooka w Delphi- metoda Hot Key

Metoda Hot Key


     Poprzednio poznaliśmy metodę przechwytywania klawiatury o nazwie Key Press. Metoda Hot Key jest drugą możliwością przechwytywania klawiatury i tworzenia skrótów klawiaturowych, jaką daje nam Delphi (zakładka Tools Pallete).

     Podobnie, jak w poprzednim przypadku, do testowania naszych działań wykorzystamy stworzoną przez nas procedurę o nazwie „Opcja niedostępna”. Oprócz niej używać będziemy jeszcze procedurę WMHotKey, którą deklarujemy w sekcji Private.

     W metodzie, którą przedstawiamy, aby przyswoić któryś z klawiszy do naszych potrzeb, musimy najpierw zarejestrować go w funkcji Hot Key i przypisać polecenie, które ma zostać wykonane po jego naciśnięciu. Każdy klawisz i każda kombinacja klawiszy (skróty klawiaturowe) musi zostać osobno zarejestrowana. Rejestracji dokonujemy w procedurze Form Create. Jest to chyba oczywiste miejsce: Przechwytu klawiszy musimy dokonać razem z uruchamiającym się programem.

Spójrzmy na zapis z rejestracji pierwszego klawisza:

                             RegisterHotKey(Handle,$0001,0,VK_F1)

     Polecenie „RegisterHotKey” mówi samo za siebie: „zarejestruj skrót klawiaturowy”. Po słowie Handle mamy identyfikator tego skrótu, który jest liczbą kolejną, począwszy od pierwszej, czyli 0001. Jak widzimy po tej sekcji, w sumie zarejestrowaliśmy 171 różnych klawiszy i ich kombinacji. Po identyfikatorze umieszczamy kod klawisza lub klawiszy, które chcemy przejąć. Nie spotkaliśmy się jeszcze z taką formą identyfikowania klawiszy. Jest ona drugim, równorzędnym sposobem oznaczania klawiszy. Po literach „VK” wpisujemy słowną nazwę klawisza, oczywiście w języku angielskim, który w środowisku Delphi obowiązuje. Chcąc zatem przejąć dany klawisz, musimy wiedzieć, jak się on nazywa. W materiałach pomocniczych do Delphi odnajdziemy bez problemu takie informacje.

     W przypadku, gdy chcemy zarejestrować kombinację klawiszy, musimy podać nazwy obu klawiszy, pamiętając o tym, że dla klawiszy rozszerzonych (Alt, Ctrl, Shift, Win) nie stosujemy początkowych liter w postaci VK, lecz MOD, a także musimy pamiętać o tym, że dla klawisza Ctrl stosujemy jego pełną nazwę, czyli Control.

     Po rejestracji klawiszy musimy jeszcze oprogramować procedury, które zostaną wykonane po ich naciśnięciu. Polecenia te zawieramy w procedurze WMHotKey. Cała ta procedura to zbiór osobnych warunków, które przypisane są do poszczególnych klawiszy zarejestrowanych wcześniej. Program sprawdza, czy któryś z klawiszy (opatrzony tu identyfikatorem „$” został naciśnięty:

       if Msg.wParam= $0001 then

          begin

              Opcja_niedostepna;

           end;

     Jeżeli przyjrzymy się bliżej kodowi metody Hot Key, stwierdzimy, że nie jest ona zbyt skomplikowana. Wydaje się ona być trudna z uwagi na jej rozbudowaną formę, wynikającą tylko i wyłącznie z tego, iż musimy zarejestrować i oprogramować każdy klawisz z osobna.

     Całą ideę metody Hot Key możemy zawrzeć w następujący schemat:

                      Form Create: RegisterHotKey(Handle,$0001,0,VK_F1)

                      WMHotKey: if Msg.wParam= $0001 then ...

    Najpierw rejestrujemy klawisz, a następnie przypisujemy do niego polecenie, które ma zostać wykonane. Taka budowa hooka pozwala nam na wybranie do przechwytu tylko takie klawisze i skróty, jakie chcemy. Nie musimy więc stosować pełnej wersji tej metody, którą tu zamieszczamy. Po wybraniu klawiszy, rejestrujemy je w dowolnej kolejności, pamiętając o tym, aby poszczególne identyfikatory ($0000) były ciągiem kolejnych liczb naturalnych: 0001, 0002, 0003 itd.


       Oto pełny kod metody Hot Key:
 
unit Unit1;



interface



uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;



type

TForm1 = class(TForm)

procedure Opcja_niedostepna;

procedure FormCreate(Sender: TObject);



private

{ Private declarations }

procedure WMHotKey(var Msg: TMessage); message WM_HOTKEY;



public

{ Public declarations }

end;



var

Form1: TForm1;



implementation



{$R *.dfm}





// PROCEDURA OPCJA NIEDOSTĘPNA //

procedure TForm1.Opcja_niedostepna;

begin

ShowMessage('Opcja niedostępna');

end;



//rejestracja skrótów klawiaturowych

procedure TForm1.FormCreate(Sender: TObject);

begin


// SKRÓTY KLAWIATUROWE F1-F12 i Esc //



RegisterHotKey(Handle,$0001,0,VK_F1); // F1

RegisterHotKey(Handle,$0002,0,VK_F2); // F2

RegisterHotKey(Handle,$0003,0,VK_F3); // F3

RegisterHotKey(Handle,$0004,0,VK_F4); // F4

RegisterHotKey(Handle,$0005,0,VK_F5); // F5

RegisterHotKey(Handle,$0006,0,VK_F6); // F6

RegisterHotKey(Handle,$0007,0,VK_F7); // F7

RegisterHotKey(Handle,$0008,0,VK_F8); // F8

RegisterHotKey(Handle,$0009,0,VK_F9); // F9

RegisterHotKey(Handle,$0010,0,VK_F10); // F10

RegisterHotKey(Handle,$0011,0,VK_F11); // F11

RegisterHotKey(Handle,$0012,0,VK_F12); // F12

RegisterHotKey(Handle,$0013,0,VK_ESCAPE); // Esc



// SKRÓTY KLAWIATUROWE Alt+F1-F12,Esc



RegisterHotKey(Handle,$0014,MOD_ALT,VK_F1); //Alt+F1

RegisterHotKey(Handle,$0015,MOD_ALT,VK_F2); //Alt+F2

RegisterHotKey(Handle,$0016,MOD_ALT,VK_F3); //Alt+F3

RegisterHotKey(Handle,$0017,MOD_ALT,VK_F4); //Alt+F4

RegisterHotKey(Handle,$0018,MOD_ALT,VK_F5); //Alt+F5

RegisterHotKey(Handle,$0019,MOD_ALT,VK_F6); //Alt+F6

RegisterHotKey(Handle,$0020,MOD_ALT,VK_F7); //Alt+F7

RegisterHotKey(Handle,$0021,MOD_ALT,VK_F8); //Alt+F8

RegisterHotKey(Handle,$0022,MOD_ALT,VK_F9); //Alt+F9

RegisterHotKey(Handle,$0023,MOD_ALT,VK_F10); //Alt+F10

RegisterHotKey(Handle,$0024,MOD_ALT,VK_F11); //Alt+F11

RegisterHotKey(Handle,$0025,MOD_ALT,VK_F12); //Alt+F12

RegisterHotKey(Handle,$0026,MOD_ALT,VK_ESCAPE); //Alt+Esc



// SKRÓTY KLAWIATUROWE Ctrl+ F1-F12,Esc



RegisterHotKey(Handle,$0027,MOD_CONTROL,VK_F1); //Ctrl+F1

RegisterHotKey(Handle,$0028,MOD_CONTROL,VK_F2); //Ctrl+F2

RegisterHotKey(Handle,$0029,MOD_CONTROL,VK_F3); //Ctrl+F3

RegisterHotKey(Handle,$0030,MOD_CONTROL,VK_F4); //Ctrl+F4

RegisterHotKey(Handle,$0031,MOD_CONTROL,VK_F5); //Ctrl+F5

RegisterHotKey(Handle,$0032,MOD_CONTROL,VK_F6); //Ctrl+F6

RegisterHotKey(Handle,$0033,MOD_CONTROL,VK_F7); //Ctrl+F7

RegisterHotKey(Handle,$0034,MOD_CONTROL,VK_F8); //Ctrl+F8

RegisterHotKey(Handle,$0035,MOD_CONTROL,VK_F9); //Ctrl+F9

RegisterHotKey(Handle,$0036,MOD_CONTROL,VK_F10); //Ctrl+F10

RegisterHotKey(Handle,$0037,MOD_CONTROL,VK_F11); //Ctrl+F11

RegisterHotKey(Handle,$0038,MOD_CONTROL,VK_F12); //Ctrl+F12

RegisterHotKey(Handle,$0039,MOD_CONTROL,VK_ESCAPE); //Ctrl+Esc



// PRZECHWYT KLAWISZY STRZALEK //



RegisterHotKey(Handle,$0040,0,VK_LEFT); // strzałka w lewo

RegisterHotKey(Handle,$0041,0,VK_RIGHT); // strzałka w prawo

RegisterHotKey(Handle,$0042,0,VK_UP); // strzałka w górę

RegisterHotKey(Handle,$0043,0,VK_DOWN); // strzałka w dół



// PRZECHWYT INNYCH KLAWISZY I SKRÓTÓW KLAWIATUROWYCH //

Moje e-booki

Kliknij w okładkę, aby przejść do strony książki

Przejdź do strony książki Przejdź do strony książki