Strona 1 z 1

Umieszczanie okna obcego programu w programie wlasnym +TEdit

Nowy postNapisane: poniedziałek, 6 kwietnia 2009, 22:46
przez Bishamoth
Witam
Chodzi mi o ta porade:
http://cyfbar.republika.pl/teor13.htm#teor2
Wszystko slicznie i pieknie jest tam opisane i wszystko dziala. A co jezeli chcialbym, aby zamiast sapera uzyc innego programu? Np, jezeli zamiast sapera, wrzucic nazwe poprzez komponent TEdit? Nazwa programu nie mialaby wtedy znaczenia.
Konkretnie chodzi o ten kod:
Kod: Zaznacz cały
// Plik nagłówkowy np. Unit1.h
//--------------------------------
private:
       HWND saper;

//--------------------------------

Kod: Zaznacz cały
// Plik źródłowy np. Unit1.cpp
//--------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
saper = FindWindow(0, "Saper");

if(saper > 0)
{
  ::SetParent(saper, Panel1->Handle);
  tagRECT tr;
  GetWindowRect(saper, &tr);
  int x = tr.right - tr.left;
  int y = tr.bottom - tr.top;
  int c = (Panel1->Width - 4 - x)/2;
  MoveWindow(saper, c, 17, x, y, false);
}
}
//--------------------------------
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
::SetParent(saper, HWND_DESKTOP); //przywrócenie okna na pulpit
SendMessage(saper, WM_DESTROY, 0, 0); //zamknięcie programu Saper
}
//--------------------------------

Re: Umieszczanie okna obcego programu w programie wlasnym +TEdit

Nowy postNapisane: wtorek, 7 kwietnia 2009, 13:05
przez Cyfrowy Baron
Kod: Zaznacz cały
//--------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
String WindowName = Edit1->Text;
saper = FindWindow(0, WindowName);

if(saper > 0)
{
  ::SetParent(saper, Panel1->Handle);
  tagRECT tr;
  GetWindowRect(saper, &tr);
  int x = tr.right - tr.left;
  int y = tr.bottom - tr.top;
}


kluczem jest nazwa okna, lub nazwa klasy okna, do którego uchwyt pobiera funkcja FindWindow.
Wydaje mi się, że nie rozumiesz tej prostej zasady...

Re: Umieszczanie okna obcego programu w programie wlasnym +TEdit

Nowy postNapisane: wtorek, 7 kwietnia 2009, 20:52
przez Bishamoth
Cyfrowy Baron napisał(a):Wydaje mi się, że nie rozumiesz tej prostej zasady...

Okej, teraz to juz wiem.
Co do samego kodu:
[C++ Error] Unit1.cpp(21): E2034 Cannot convert 'AnsiString' to 'const char *'
[C++ Error] Unit1.cpp(21): E2342 Type mismatch in parameter 'lpWindowName' (wanted 'const char *', got 'AnsiString')

Obydwa powyzsze bledy tycza sie tej linijki:
Kod: Zaznacz cały
saper = FindWindow(0, WindowName);

Reszta bledow:
[C++ Warning] Unit1.cpp(30): W8004 'y' is assigned a value that is never used
[C++ Warning] Unit1.cpp(30): W8004 'x' is assigned a value that is never used

Re: Umieszczanie okna obcego programu w programie wlasnym +TEdit

Nowy postNapisane: środa, 8 kwietnia 2009, 08:39
przez Cyfrowy Baron
Funkcja FindWindow oczekuje wartości typu char, a ty mu przekazujesz wartości typu AbsiString, dlatego należy dokonać konwersji AnsiString na char:

FindWindow(char*, char*)

Kod: Zaznacz cały
saper = FindWindow(0, WindowName.c_str());

Re: Umieszczanie okna obcego programu w programie wlasnym +TEdit

Nowy postNapisane: środa, 8 kwietnia 2009, 11:07
przez polymorphism
Reszta bledow:

To nie błędy, tylko ostrzeżenia. Przypisałeś zmiennym x i y wartości, ale nigdzie ich nie wykorzystujesz (tu chodzi o kod CB).