Jak pobrac tekst z różnych paneli w TStatusBar

mr.hex

W sumie ta wskazówka jest na torry.net jedna troche się trzeba natrudzić żeby zaczęła ona poprawnie działać.

Najpierw zajrzyjmy do katalogu ..\Delphi\Demos\IpcDemos. Znajdzuje się tam plik "IPCThrd.pas" który trzeba skompilować (czyli Component->Instal Component)

Następnie trzeba ściągnąć z torry.net plik "uProcessMemMgr.pas" i równierz go skompilować tak jak powyższy. SCIAGNIJ

Jezeli wszystko poszlo dobrze to do uses dodajemy :

CommCtrl, uProcessMemMgr

Teraz przejdziemy do kodu :

do sekcji private wrzuć :

function GetStatusBarText(hStatusBarHandle: HWND; PanelNumber: Integer): string;

Uzupełnił funkcje:

var
  PMM: TProcessMemMgr;
  NumberOfPanels, Len: Integer;
  PrcBuf: PChar;
  PartText: string;
begin
  if hStatusBarHandle = 0 then Exit;
  PMM := CreateProcessMemMgrForWnd(hStatusBarHandle);
  try
    NumberOfPanels := SendMessage(hStatusBarHandle, SB_GETPARTS, 0, 0); 
    if PanelNumber < NumberOfPanels then
    begin 
      Len := LOWORD(SendMessage(hStatusBarHandle, SB_GETTEXTLENGTH, PanelNumber, 0)); 
      if Len > 0 then
      begin 
        PrcBuf := PMM.AllocMem(Len + 1); 
        SendMessage(hStatusBarHandle, SB_GETTEXT, PanelNumber, Longint(PrcBuf)); 
        Result := PMM.ReadStr(PrcBuf); 
        PMM.FreeMem(PrcBuf); 
      end 
      else
      begin
        Result := ''; 
      end; 
    end;
  finally
   PMM.Free; 
  end;
end;

I wrzuc do np. OnClick w TButton :

var
  hWindow, hStatusBarHandle: HWND;
begin
  hWindow := FindWindow('DC++', nil); // Pobranie uchwytu okna tu DC++
  hStatusBarHandle := FindWindowEx(hWindow, 0, 'msctls_statusbar32', nil); // pobranie uchwytu TStatusBar
  label1.Caption := GetStatusBarText(hStatusBarHandle, 2); // pokazuje tekst danego panelu, liczba 2 oznacza numer panelu
end;

0 komentarzy