Posługiwanie się uchwytami w Delphi.pdf

(98 KB) Pobierz
16044544 UNPDF
PROGRAMOWANIE POSŁUGIWANIE SIĘ UCHWYTAMI W DELPHI
System pod kontrolą
procedure TFormHandle.KomendaClick( Sender : TObject );
var
Obszar : TRect ; {obszar przechwyconego obiektu}
Uchwyt : HWND ; {uchwyt do okna}
begin
if Tree.Selected=nil then exit ;
Uchwyt :=PNodeDane(Tree.Selected.Data)^.Handle;
2 Zmieniamy nazwę (ce-
wiedzieliśmy się, w jaki sposób uzy-
skać uchwyty do uruchomionych
w systemie okien i innych obiektów. Dys-
ponując uchwytem obiektu, możemy łatwo
modyfikować różne jego właściwości.
Z Ekspertem rozbudujemy stworzoną apli-
kację, dodając do niej
możliwość modyfika-
cji obiektów.
cha Name ) dodanej
przed chwilą kontrolki na
Komenda . Następnie dwu-
krotnie klikamy na przy-
cisk znajdujący się obok
właściwości Items (okno
) i w oknie,
które się otwiera, wpisuje-
my polecenia .
3 Aby po kliknięciu na wy-
case Komenda.ItemIndex of
0 : ShowWindow( Uchwyt , SW_MINIMIZE);
1 : ShowWindow( Uchwyt , SW_MAXIMIZE);
2 : ShowWindow( Uchwy t, SW_RESTORE);
3 : ShowWindow( Uchwyt , SW_HIDE);
4 : ShowWindow( Uchwyt , SW_SHOW);
5 : EnableWindow( Uchwyt ,False);
6 : EnableWindow( Uchwyt ,True);
7 : begin
SendMessage( Uchwyt , WM_LBUTTONDOWN, 0 ,0);
SendMessage( Uchwyt , WM_LBUTTONUP, 0 ,0);
end ;
8 : SendMessage( Uchwyt , WM_CHAR, Ord( ‘T’ ), 0);
9 : SendMessage( Uchwyt , WM_CLOSE,1 ,1 );
10: SetWindowText( Uchwyt , pAnsiChar(inputbox
( ‘Podaj nowà nazw´ okna’ , ’’ ,
PNodeDane(Tree.Selected.Data)^.Nazwa)));
11: begin
GetWindowRect( Uchwyt , Obszar );
SetWindowPos( Uchwyt ,0,0,0, Obszar .Right- Obszar .Left,
Obszar .Bottom- Obszar .Top,SWP_SHOWWINDOW);
Różne możliwości
Zestaw funkcji, któ-
re oferuje Windows
API, daje programiście
nieograniczone możli-
wości łatwego modyfi-
kowania oknami i ich
elementami, a także
zarządzania oraz ste-
rowania obiektami
systemu. Warto więc
poznać oferowane
przez system operacyjny funkcje i wzboga-
cić nasz program o możliwość manipulowa-
nia obiektem zaznaczonym na komponen-
cie TTreeView .
1 Na panel znajdujący się na formularzu
brany wiersz listy wyko-
nana została określona ope-
racja na obiekcie, musimy
wywołać zdarzenie OnC-
lick . Dwukrotnie klikamy
więc na obszar komponentu
iwwygenerowanym szkie-
lecie funkcji wpisujemy
kod .
end ;
12: begin
GetWindowRect( Uchwyt , Obszar );
SetWindowRgn( Uchwyt ,CreateRoundRectRgn(0,0,
Obszar .Right- Obszar .Left,
Obszar .Bottom- Obszar .Top,55,55),true);
end ;
13: begin
SetWindowLong( Uchwyt , GWL_EXSTYLE, GetWindowLong( Uchwyt ,
GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes( Uchwyt , 0, 200, LWA_ALPHA);
end ;
14: SetLayeredWindowAttributes( Uchwyt , 0, 255 , LWA_ALPHA);
end ;
end ;
my, czy została wybra-
na dowolna pozycja na
komponencie TTreeView
. Jeśli nie, dalsze wyko-
nywanie procedury nie ma
sensu, dlatego wychodzimy z niej za pomo-
cą polecenia exit .
5 Następnie do zmiennej Uchwyt przypi-
zaawansowana\HandleUnit.pas
aplikacji stworzonej we wspomnianym
przed chwilą artykule dodajemy kompo-
nent TListBox (znajduje się on w kategorii
). Komponent ten jest oknem,
w którym wyświetlane mogą być różne da-
ne, a poszczególne wiersze można wybierać
(klikając na nie). W naszym wypadku kom-
ponent TListBox będzie zawierał listę ko-
mend, które będzie można zastosować do
manipulacji obiektami.
Stałe określające stan okna
Stała Działanie
SW_HIDE wyświetla okno w postaci ukrytej i aktywuje
inne okno
SW_MAXIMIZE maksymalizuje okno
SW_MINIMIZE minimalizuje okno i uaktywnia inne
SW_RESTORE aktywuje i wyświetla okno w pierwotnych
rozmiarach oraz położeniu (tak samo, jak stała
SW_SHOWNORMAL)
SW_SHOW uaktywnia okno i wyświetla je w bieżącym
położeniu
SW_SHOWMAXIMIZED aktywuje okno i wyświetla je w postaci
zmaksymalizowanej
SW_SHOWMINIMIZED aktywuje okno i wyświetla je w postaci
zminimalizowanej
SW_SHOWNA wyświetla okno w bieżącym stanie. Działa
podobnie do SW_SHOW, lecz nie uaktywnia okna
SW_SHOWNOACTIVATE wyświetla okno w ostatnio zapamiętanej
pozycji i rozmiarach. Pozostawia uprzednio
aktywne okno w stanie aktywnym
SW_SHOWMINNOACTIVATE wyświetla okno w postaci zminimalizowanej,
nie aktywuje go jednak
SW_SHOWNORMAL uaktywnia i wyświetla okno, ustawiając jego
pierwotne rozmiary
Popularne komunikaty Windows
Identyfikator
sujemy uchwyt zaznaczonego okna .
6 Za pomocą instrukcji wielokrotnego wy-
boru case , w zależności od wybranej ko-
mendy wykonujemy odpowiednie polece-
nia. Ich opis znajdziemy w ramce Działanie
komend.
TG
Działanie komend
Polecenie
Zasada działania
MINIMALIZUJ
Polecenia
wywołują kolejno: minimalizację, maksymalizację, przywrócenie, ukrycie oraz
1
MAKSYMALIZUJ
pokazanie okna. Za wszystkie operacje odpowiedzialna jest procedura ShowWindow() ,która
2
PRZYWRÓĆ
modyfikuje stan widoczności określonego obiektu. Do pierwszego argumentu należy przekazać
3
UKRYJ
uchwyt okna, a do drugiego stałą, określającą rodzaj wykonywanego zadania (patrz ramka
4
POKAŻ
Stałe określające stan okna).
5
WYŁĄCZ
Komendy
są odpowiedzialne za zablokowanie oraz odblokowanie okna. Zablokowane obiekty
6
WŁĄCZ
nie reagują na kliknięcie myszą i wciśnięcie klawisza. Stany te możemy dowolnie zmieniać, wywołując
funkcję EnableWindow() z odpowiednimi argumentami (pierwszy określa uchwyt okna, drugi jest
wartością logiczną określającą stan odblokowany – True lub zablokowany – False ).
7
KLIKNIJ PRZYCISK MYSZY olecenia
realizują kliknięcie, wciśnięcie klawisza oraz zamknięcie aplikacji. Wszystkie komendy
8
NACIŚNIJ KLAWISZ (T)
są realizowane poprzez wysłanie danego komunikatu do odpowiedniego okna za pomocą funkcji
9
ZAMKNIJ
SendMessage() .Przyjmuje ona cztery argumenty: uchwyt okna, identyfikator komunikatu oraz
dwie dodatkowe wartości, będące charakterystycznymi parametrami samego komunikatu
(na przykład rodzaj wciśniętego klawisza). Najczęściej wykorzystywane komunikaty znajdziemy
wramce Popularne komunikaty Windows.
Działanie
komunikatu
WM_CLOSE zamknięcie okna
WM_PAINT odświeżenie okna
WM_LBUTTONDOWN wciśnięcie lewego przycisku myszy
WM_LBUTTONUP zwolnienie lewego przycisku myszy
WM_LBUTTONDBLCLK dwukrotne kliknięcie lewym przyciskiem myszy
WM_RBUTTONDBLCLK dwukrotne kliknięcie prawym przyciskiem myszy
WM_CHAR
10
ZMIEŃ NAZWĘ
Za pomocą funkcji SetWindowText() możemy zmienić tekst znajdujący się w oknie (zwykle
na pasku tytułu). Pierwszy argument wskazuje uchwyt modyfikowanego okna, drugi zaś jest
wskaźnikiem do łańcucha zawierającego nowy tekst.
11
ZMIEŃ POZYCJĘ
Komenda SetWindowPos() ustawia położenie dowolnego okna. Jednak dzięki niej możemy
zmienić nie tylko położenie, ale również rozmiar okna.
12
ZMIEŃ KSZTAŁT
Polecenie SetWindowRgn() zaokrągla narożniki okna. Przekazujemy do niego trzy argumen-
ty: uchwyt okna, uchwyt regionu oraz wartość logiczną decydującą o odrysowaniu okna.
wciśnięcie i zwolnienie klawisza
WM_SIZE
zmiana rozmiaru okna
13
USTAW PRZEZROCZYSTOŚĆ Polecenia
nadają oraz usuwają przezroczystość określonym oknom. Na początku należy zmienić
WM_CREATE
utworzenie okna
14
USUŃ PRZEZROCZYSTOŚĆ
styl okna na przezroczysty, wywołując procedurę SetWindowLong() . Główne zadanie spełnia
procedura SetLayeredWindowAttributes() ,której argumenty określają uchwyt modyfikowanego
okna oraz stopień przezroczystości.
WM_DESTROY
usunięcie okna
WM_QUIT
zakończenie działania aplikacji
WM_CLEAR
usunięcie tekstu z pola edycji
LISTOPAD 2006
Z e stron 64–65 w Ekspercie 11/2006 do-
4 Na początku sprawdza-
Numer Nazwa
0
16044544.007.png 16044544.008.png 16044544.009.png 16044544.010.png 16044544.001.png 16044544.002.png 16044544.003.png 16044544.004.png 16044544.005.png 16044544.006.png
Zgłoś jeśli naruszono regulamin