Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 7 odgovora
  • 3.261 pregleda

Najnovija ↓

Dobijanje child kontrola nekog prozora. 14.03.2005. u 03:06 · pre 263 meseca #1
Pozdrav,
pokusavam sa EnumChildWindows funkcijom (rekurzivno) prodjem kroz sve kontrole nekog prozora, ali dobijem samo manji deo njih. Npr, TMenuItem-si se ne izlistaju, TToolbarButton-s takodje. Jel zna neko kako to uraditi
Tnx

Btw, koristion sam sledeci kod (sa torry-ja):
Code:

type
  PMyEnumParam = ^TMyEnumParam;
  TMyEnumParam = record
    Nodes: TTreeNodes;
    Current: TTreeNode;
  end;

function EnumWindowsProc(Wnd: HWND; Param: PMyEnumParam): BOOL; stdcall;
const
  MyMaxName = 64;
  MyMaxText = 64;
var
  ParamChild: TMyEnumParam;
  ClassName: string;
  WindowText: string;
begin
  Result := True;
  SetLength(ClassName, MyMaxName);
  SetLength(ClassName, GetClassName(Wnd, PChar(ClassName), MyMaxName));
  SetLength(WindowText, MyMaxText);
  SetLength(WindowText, SendMessage(Wnd, WM_GETTEXT, MyMaxText, lParam(PChar(WindowText))));
  ParamChild.Nodes   := Param.Nodes;
  ParamChild.Current := Param.Nodes.AddChildObject(Param.Current,
    '[' + ClassName + '] "' + WindowText + '"' + ' Handle: ' + IntToStr(Wnd), Pointer(Wnd));
  EnumChildWindows(Wnd, @EnumWindowsProc, lParam(@ParamChild));
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  Param: TMyEnumParam;
begin
  Param.Nodes := TreeView1.Items;
  Param.Current := TreeView1.TopItem;
  TreeView1.Items.BeginUpdate;
  EnumWindows(@EnumWindowsProc, lParam(@Param));
  TreeView1.Items.EndUpdate;
end;
Potpis
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
Re: Dobijanje child kontrola nekog prozora. 14.03.2005. u 09:20 · pre 263 meseca #2
EnumChildWindows funkcija ti vraca HWND prozora (koji moze dobiti fokus),
(TForm, TPanel...), odnosno samo za ono sto je tipa TWinControl.
Zato i imas u funkciji koju si naveo: function EnumWindowsProc( Wnd: HWND <----

Da bi izvukao npr Menu koja ima neka aplikacija, probaj sa API GetMenu(Handle),
i sa TMenuItemInfo strukturom.... (preko GetMenuItemInfo f-je)...

Pozdrav!


Re: Dobijanje child kontrola nekog prozora. 15.03.2005. u 15:56 · pre 263 meseca #4
Pokrenuo sam deo koda koji si naveo, i vraca mi TToolButton, TButton... (vidi attachment...)

TToolButton je nasledjen iz TGraphicControl, nema HWND : (

Ali nisam siguran sta tebi treba, samo nazivi TToolButton-a?
Ili hoces da imas mogucnost da ih kontrolises (kliknes na njih) iz svoje aplikacije?

probaj ovo ( da kliknes na dugme u drugoj aplikaciji):
http://www.swissdelphicenter.ch/torry/showcode.php?id=727

Pozdrav!
Re: Dobijanje child kontrola nekog prozora. 17.03.2005. u 22:41 · pre 263 meseca #7
Citat:
Srki_82: Sa EnumChildWindows nadjes handle edit boxa i posaljes mu poruku WM_SETTEXT sa tekstom koji zelis.


E sad... fora je u tome sto u tom editbox-u korisnik unosti tekst, pa enter,..., tekst, pa enter... a ja bi da to malcice automatizujem, pa bi mi trebala i neka povratna informacija - tj. da li se izmedju slanja 2 WM_SETTEXT poruke sadrzaj editbox-a u medjuvremenu promenio, jer moj program bi trebao da saceka da taj edit box obradi komandu koju sam mu poslao - pa tek onda da posaljem sledecu poruku... jel to mnogo komplikovanije, ili isto moze preko neke poruke da se odradi ?

poz
Re: Dobijanje child kontrola nekog prozora. 18.03.2005. u 00:04 · pre 263 meseca #8
Imas WM_GETTEXT. Kad posaljes svoju WM_SETTEXT poruku mozes svakih 1000 ms (ili koliko vec hoces) da posaljes WM_GETTEXT i da vidis da li se edit ili neka druga kotrola promenila pa ako jeste saljes sledecu WM_SETTEXT i tako dalje.
Potpis
Play Store
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme