MS Access 2010+ | Aplication Programming Interface API | VBA 7.0
• API. Funkcje zarządzania oknami.
• Długość tekstu tytułu okna lub tekstu okna lub kontrolki.
Aby pobrać tytuł okna bądź tekst okna lub kontrolki, musimy znać długość tego tekstu, by przygotować bufor
na przyjęcie zwracanego tekstu. Co prawda, możemy z dużym zapasem założyć długość zwracanego tekstu
(Const MAX_PATH = 260) i utworzyć taki nadmiarowy bufor, ale metoda taka jest niezbyt
elegancka i może zakończyć się błędnym odczytem tekstu (jego ucięciem), jeżeli wielkość buforu
okaże się jednak zbyt mała. Metodę nadmiarowego buforu można z powodzeniem stosować podczas pobieraniu
tytułu okna znajdującego się na pasku tytułowym. Zakładamy wtedy Maksymalny rozmiar buforu
na 260 znaków i zwracany tekst nie zostanie obcięty, ponieważ system Window nie umożliwia zapisania
tak długiego tekstu na pasku tytułowym okna. Długość tekstu w oknie możemy pobrać za pomocą
funkcji GetWindowTextLength(...), która:
Opis funkcji API GetWindowTextLength (...)
Funkcja GetWindowTextLength(...) dla określonego okna zwraca długość w znakach tytułu okna
(jeśli okno ma pasek tytułowy), bądź długość tekstu w oknie. Jeżeli dane okno jest kontrolką, funkcja
zwraca długość tekstu w kontrolce. Uwaga. Za pomocą funkcji GetWindowTextLength(...) nie może
pobrać długość tekstu z kontrolki, która jest kontrolką edycyjną w innej aplikacji.
Public Declare Function GetWindowTextLength Lib "user32" _
Alias "GetWindowTextLengthA" ( _
ByVal hwnd As Long) As Long
argumenty:
hwnd
uchwyt okna lub kontrolki zawierającej tekst
zwraca:
Przy powodzeniu funkcja zwraca długość tekstu okna w znakach. W pewnych warunkach funkcja
GetWindowTextLength może zwrócić wartość, która będzie większa niż faktyczna długość tekstu.
Przypadek taki zachodzi, gdy różne fragmenty tekstu zostały zapisane w różnych standardach (ANSI, Unicode,
dwubajtowy zestaw znaków DBCS). Zwracana wartość nigdy jednak nie będzie mniejsza od potrzebnej
wielkości bufora, można zatem zwracaną wielkość długości tekstu bezproblemowo używać do obsługi alokacji bufora.
Przy niepowodzeniu, lub gdy okno nie zawiera tekstu funkcja zwraca ZERO.
Aby uzyskać rozszerzoną informację o zaistniałym błędzie, należy wywołać funkcję GetLastError.
• Tekst na pasku tytułowym okna, tekst okna lub kontrolki
Jeżeli potrzebujemy np. w celach identyfikacyjnych znać tytuł okna (tekst na pasku tytułowym okna)
lub w celach informacyjnych tekst, jaki znajduje się w okno edycyjnym lub kontrolce,
to możemy go pobrać za pomocą funkcji GetWindowText(...), która:
Opis funkcji API GetWindowText (...)
Public Declare Function GetWindowText Lib "user32" _
Alias "GetWindowTextA" ( _
ByVal hwnd As Long, _
ByVal lpString As String, _
ByVal nMaxCount As Long) As Long
argumenty:
hwnd
uchwyt okna lub kontrolki zawierającej tekst,
lpString
wskaźnik do bufora, do którego zostanie skopiowany tekst,
nMaxCount
maksymalna ilość znaków tekstu okna, jaka zostanie skopiowania do bufora wraz ze znakiem
końca ciągu vbNullChar. Jeśli tekst okna zawiera więcej znaków niż określa to argument
nMaxCount, to zostanie on obcięty do określonego limitu.
zwraca:
Przy powodzeniu funkcja zwraca długość skopiowanego do bufora tekstu. W zwracanej wartości nie jest
uwzględniany znak końca ciągu vbNullChar.
Przy niepowodzeniu (np. okno i jego uchwyt są nieważne),
lub jeżeli okno nie ma paska tytułowego, lub pasek tytułowy okna jest pusty, a także gdy okno lub kontrolka
nie zawiera tekstu, funkcja zwraca ZERO.
Aby uzyskać rozszerzoną informację o zaistniałym błędzie, należy wywołać funkcję GetLastError.