Pogaduszki między formami :)

0

Witam! Problem na dzisiejszy wieczór przedstawia się następująco: Mam dwa osobne programy, w jednym jest ListBox w drugim Edit. jak zrobić żeby po kliknięciu w ListBox-a tekst z niego pokazał się w Edit? Jeden program to zwykły exe, drugi wywołuje formatkę z editem z Dll-a. Czy ktoś wie jak to zrobić? Zabawa uchwytami jakoś mi nie wychodzi...

0

Możesz chociażby zarejestrować komunikat. Jeden wysyła, drugi odbiera. Można też spróbować skorzystać z pamięci współdzielonej i dll-ka jako semafora. Jakbyś się uparł to nawet z pliku na dysku :) Wszystko zależy jak wiele informacji potrzebujesz przekazać. Jeżeli tylko tekst z jednego do drugiego to chyba komunikat będzie najprostszym rozwiązaniem.

0

Z plikiem próbowałem. Niby ok, ale jakoś nie elegancko tak... Pomysł z komunikatami jest dobry. Tylko w CB nigdy nic takiego nie robiłem i zbyt nie wiem z czym to ugryźć...

0

Nadawca:
<font size="9">

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MessageCpp.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfMessageTest *fMessageTest;
HWND uchwyty[100];
int indexUchw=0;
HWND hWnd;
char text[20];
//---------------------------------------------------------------------------
__fastcall TfMessageTest::TfMessageTest(TComponent* Owner)
        : TForm(Owner)
{bListaClick(NULL);}
//---------------------------------------------------------------------------
bool __stdcall CallBackFunc(HWND hwnd, LPARAM lParam)
{char nazwa[200];
 if (IsWindowVisible(hwnd))
 {GetWindowText(hwnd, nazwa, 199);
  if (StrLen(nazwa) != 0)
  {if (!strcmp(nazwa, "Odbiorca"))
    strcat(nazwa, " <- to okno odbiera komunikat !!");
   fMessageTest->Spis->Items->Add(nazwa);
   uchwyty[indexUchw++] = hwnd;
  }
 }
 return true;
}
//---------------------------------------------------------------------------
void __fastcall TfMessageTest::bListaClick(TObject *Sender)
{Spis->Clear();
 indexUchw = 0;
 EnumWindows((WNDENUMPROC)CallBackFunc,1);
 Spis->ItemIndex = 0;
 hWnd = uchwyty[0];
 lNumer->Caption = "0x" + IntToHex((int)hWnd, 4);
}
//---------------------------------------------------------------------------
void __fastcall TfMessageTest::SpisChange(TObject *Sender)
{hWnd = uchwyty[Spis->ItemIndex];
 lNumer->Caption = "0x" + IntToHex((int)hWnd, 4);
}
//---------------------------------------------------------------------------
void __fastcall TfMessageTest::bSendMsgClick(TObject *Sender)
{strcpy(text, eTresc->Text.c_str());                    //wysyłny text
 COPYDATASTRUCT CopyData = {0, strlen(text) + sizeof(char), text};
 SendMessage( hWnd, WM_COPYDATA, long(Handle), long(&CopyData));
}
//---------------------------------------------------------------------------

</span>

Odbiorca:
<font size="9">

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "ReceiveMessageCpp.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfMessageRecive *fMessageRecive;
char *text;
//---------------------------------------------------------------------------
__fastcall TfMessageRecive::TfMessageRecive(TComponent* Owner)
        : TForm(Owner)
{}
//---------------------------------------------------------------------------
void __fastcall TfMessageRecive::ObslugaKomunikatu(TMessage &Msg)
{DWORD CountData, FPassedData;
 PCOPYDATASTRUCT PassedCopyDataStruct;
 PassedCopyDataStruct = reinterpret_cast<COPYDATASTRUCT*>(Msg.LParam);
 CountData = PassedCopyDataStruct->cbData;
 if (CountData > 0)
 {text = new char[CountData];
  if (PassedCopyDataStruct->lpData != NULL)
    memmove(text, PassedCopyDataStruct->lpData, CountData);
 }
 Win32Check(ReplyMessage(true));

 Memo->Lines->Add(text);
 delete[] text;
}
//---------------------------------------------------------------------------

</span>

Odpal Odbiorcę, potem Nadawcę - na liście nadawcy wybierz "Odbiorca <- to okno odbiera komunikat !" i naciśnij guzik z podpiętą funkcją "bSendMsgClick". :)

Caption Odbiorcy musi być równy "Odbiorca".
To oczywiście tylko przykład - ale dokładnie opisujący Twój problem.

0

Dzięki [hurra]

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