Umieszczanie okna obcego programu w programie wlasnym +TEdit

dział ogólny

Umieszczanie okna obcego programu w programie wlasnym +TEdit

Nowy postprzez Bishamoth » poniedziałek, 6 kwietnia 2009, 22:46

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
}
//--------------------------------
Avatar użytkownika
Bishamoth
Bladawiec
Bladawiec
 
Posty: 40
Dołączył(a): niedziela, 1 marca 2009, 22:51
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP3
Kompilator: C++ Builder 6
Gadu Gadu: 0
    NieznanyNieznana

Re: Umieszczanie okna obcego programu w programie wlasnym +TEdit

Nowy postprzez Cyfrowy Baron » wtorek, 7 kwietnia 2009, 13:05

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...
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Umieszczanie okna obcego programu w programie wlasnym +TEdit

Nowy postprzez Bishamoth » wtorek, 7 kwietnia 2009, 20:52

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
Avatar użytkownika
Bishamoth
Bladawiec
Bladawiec
 
Posty: 40
Dołączył(a): niedziela, 1 marca 2009, 22:51
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP3
Kompilator: C++ Builder 6
Gadu Gadu: 0
    NieznanyNieznana

Re: Umieszczanie okna obcego programu w programie wlasnym +TEdit

Nowy postprzez Cyfrowy Baron » środa, 8 kwietnia 2009, 08:39

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());
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Umieszczanie okna obcego programu w programie wlasnym +TEdit

Nowy postprzez polymorphism » środa, 8 kwietnia 2009, 11:07

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).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana


Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 50 gości

cron