[DELPHI] Komponenty na innym oknie.

0

Witam. Mam taki oto kod:

function GetText(WindowHandle: hwnd):string;
var
  txtLength : integer;
  buffer: string;
begin
 TxtLength := SendMessage(WindowHandle, WM_GETTEXTLENGTH, 0, 0);
 txtlength := txtlength + 1;
 setlength (buffer, txtlength);
 sendmessage (WindowHandle,wm_gettext, txtlength, longint(@buffer[1]));
 result := buffer;
 end;

procedure TForm1.Button1Click(Sender: TObject);
var
  hWindow, hEdit, hButton: HWND;
  ID: Integer;
  R: string;
begin
  R := edit2.text;
  hWindow := FindWindow('#12345', nil);
  hEdit := FindWindowEx(hWindow, 0, 'Edit', nil);
  hButton := FindWindowEx(hWindow, 0, 'Button', nil);
  begin

  if (hEdit <> 0) and
     (hButton <> 0) then
  begin

    SendMessage(hEdit, WM_SETTEXT, 0, Longint(PChar(R)));
    ID := GetWindowLong(hButton, GWL_ID);
    PostMessage(hWindow, WM_COMMAND,
    MakeLong(ID, BN_CLICKED), hButton);
  end;
     end;

Uzupełnia to pewne pole, klika w button, oraz kopiuje text z podanego pola w jakimś programie. I mam w związku z tym problem. Otóż aby znaleźć odpowiedni komponent na "tamtej" formie, uzywam funkcji:

  hEdit := FindWindowEx(hWindow, 0, 'Edit', nil);
  hButton := FindWindowEx(hWindow, 0, 'Button', nil); 

Co zrobić, gdy mam 2 komponenty o tej samej klasie, np. 2x Edit. I do jednego chciałbym coś wpisać, a z drugiego coś skopiować (za pomocą funkcji GetText).
Jak je odróżnić?

Pozdrawiam

0

Jesli wiesz jaki tekst jest w kontrolce do ktorej cos wpisujesz to korzystasz z GetWindow aby przeszukac kontrolki i jesli tekst kontrolki jest rowny temu ktorego szukasz to wiesz juz do ktorej kontrolki wpisujesz tekst i tak samo robisz z Editem z ktorego odczytujesz zawartosc. :)

0

A jeśli obie kontrolki są puste?

0

Jesli stosujesz to do jakiegos konkretnego programu to sprawdz metoda prób i bledow - powinno zadzialac: sprawdzasz ktora z kontrolek zostanie "wyłapana" przez GetWindow jako pierwsza na przyklad probujac umiescic w niej tekst i teraz wiesz juz czy chcesz wpisywac do tej ktora jest wylapywana jako pierwsza czy jako druga i czy czytasz z pierszej czy drugiej. Powinno zadzialac ;)

0

Moglbys zarzucic jakims przykladem? Bo nie bardzo rozumiem niestety :(

0

ja tez sie przylaczam do podania jakiegos przykladu bo mam ten sam problem
z gory dzieki

0

Czyzby autor porady nie wiedzial jak ja wykonac?? A moze po prostu zapomnial o tym temacie? Jesli tak, to mu przypominam ';)

0

Oto przykład:

  1. Korzystamy z FindWindow aby znaleźć kontrolkę typu TEdit w oknie do ktorego mamy uchwyt. Aby określić czy jest ona typu TEdit korzystamy z GetClassName.

2.Jeśli kontrolka jest typu TEdit ( i zakładamy ze w oknie mamy tylko dwie kontrolki tego typu) to mając jej uchwyt wpisujemy do niej lub odczytujemy z niej tekst i do następnej znalezionej kontrolki typu TEdit również wpisujemy lub odczytujemy tekst.

Ta metoda powinna zadzialac :)

0

Witam
miałem kiedys podobny problem i rozwiazałem go w ten sposob ze
szukałem wszystkich okien potomnych az uchwyt okna potpmnego zwracanego był = 0;
podczas robienia spisu uchwytów zmieniałem zawartosc okien tak aby text okna był = indexowi w spisie :)
po zakonczeniu indexowania okien wiedziałem które okno ma jaki index o wtedy odnosiłem sie do konkretnego :)

jesli nie rozwiazałes swojego problemu lub coś dla Ciebie w tym co napisałem nie jest jasne to pytaj na emaila [email protected]
pozdrawiam
Seba

0

chłopie ten temat miesiąc temu umarł śmiercią naturalną!!

1 użytkowników online, w tym zalogowanych: 0, gości: 1