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;