[ Pobierz całość w formacie PDF ]
.Create;with WindowInfo dobeginSetLength(WindowName, strlen(WinName));SetLength(WindowClass, StrLen(CName));WindowName := StrPas(WinName);WindowClass := StrPas(CName);end;MainForm.lbWinInfo.Items.AddObject('', WindowInfo);end;procedure TMainForm.btnGetWinInfoClick(Sender: TObject);begin{ Wykonaj enumerację po wszystkich oknach głównych, wykorzystującfunkcję EnumWindowsProc() w charakterze funkcji zwrotnej}EnumWindows(@EnumWindowsProc, 0);end;procedure TMainForm.FormDestroy(Sender: TObject);vari: integer;begin{ zwolnij wszystkie obiekty TWindowInfo }for i := 0 to lbWinInfo.Items.Count - 1 doTWindowInfo(lbWinInfo.Items.Objects[i]).Freeend;procedure TMainForm.lbWinInfoDrawItem(Control: TWinControl; Index: Integer;Rect: TRect; State: TOwnerDrawState);begin{ wyczyść obszar płótna, na którym wypisywana będzie informacja }lbWinInfo.Canvas.FillRect(Rect);{ wypisz informację zawartą w rekordzie TWindowInfo zawartym w liścieListBox1 na pozycji "index".Szerokość poszczególnych kolumn określająseparatory w nagłówku HeaderControl1}with TWindowInfo(lbWinInfo.Items.Objects[Index]) dobeginDrawText(lbWinInfo.Canvas.Handle, PChar(WindowName),Length(WindowName), Rect,dt_Left or dt_VCenter);{ dostosuj położenie i szerokość wyświetlanej informacji do rubrykiokreślonej przez nagłówek}Rect.Left := Rect.Left + hdWinInfo.Sections[0].Width;DrawText(lbWinInfo.Canvas.Handle, PChar(WindowClass),Length(WindowClass), Rect, dt_Left or dt_VCenter);end;end;procedure TMainForm.hdWinInfoSectionResize(HeaderControl:THeaderControl; Section: THeaderSection);beginlbWinInfo.Invalidate; // wyświetl ponownie zawartość listyend;end.Funkcja zwrotna, wywoływana w kontekście konkretnego okna, pobiera jego tytuł oraz nazwę jego klasy i zapisuje te informacje w obiekcie TWindowInfo, dodawanym następnie do listy wyświetlanej na formularzu.Ponieważ postać wyświetlanej informacji musi być dostosowana do układu kolumnowego narzuconego przez komponent THeaderControl, jest ona wypisywana w sposób specyficzny dla listy (owner drawing) w ramach zdarzenia OnDrawItem.Zajmiemy się najpierw działaniem samej funkcji zwrotnej, następnie wyjaśnimy szczegóły wspomnianego rysowania specyficznego.Działanie funkcji zwrotnejFunkcja zwrotna nosi nazwę EnumWindowsProc() i posiada dwa parametry.Pierwszy parametr jest uchwytem okna, którego dotyczy wywołanie, drugi natomiast ma wartość 0 i nie jest do niczego wykorzystywany; wartość ta przekazywana jest jako drugi parametr wywołania funkcji EnumWindows().Jak każda funkcja zwrotna, funkcja EnumWindows() stosuje standardową dla Win32 konwencję wywołania stdcall.Na podstawie otrzymanego uchwytu okna funkcja pobiera jego tytuł oraz nazwę klasy i zapisuje te informacje w nowo tworzonym obiekcie klasy TWindowInfo.Wskaźnik tego obiektu jest następnie dodawany do tablicy Objects listy lbWinInfo, służącej do wyświetlania informacji na formularzu głównym.Zwróć uwagę na ważny fakt, iż destruktor listy TListBox nie zwalnia obiektów wskazywanych przez jego tablicę Objects i użytkownik musi dokonać tego zwolnienia w sposób jawny; w naszym przypadku zwolnienie to odbywa się w ramach zdarzenia OnDestroy formularza [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zambezia2013.opx.pl
  • Podstrony

    Strona startowa
    White James Szpital Kosmiczny 04 Statek Szpitalny
    Lara Adrian Midnight Breed 04 Midnight Rising
    Burrowes Grace Córki księcia Windham 04 Chwila zapomnienia lady Eve
    § Preston Douglas, Child Lincoln Perdergast 04 Martwa natura z krukami
    Farmer Philip Jose Swiat Rzeki 04 Czarodziejski labirynt (MR)
    Davis Lindsey Marek Dydiusz Falko 04 Żelazna ręka Marsa
    Clancy Tom Jack Ryan 04 Polowanie na Czerwony PaŸdziernik
    Kossakowska Maja Lidia Upiór Południa 04 Czas mgieł (2)
    MacBride Stuart Logan McRae 04 Dom krwi [CzP]
    Manteuffel Tadeusz Historia powszechna, ÂŚredniowiecze
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • briefing.htw.pl