Access

  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.