Chciałbym zasięgnąć opinii czy moja idea przekazywania danych między różnymi formami, zakładkami itp jest właściwa. Czy jest jakiś lepszy sposób?
Forma1: Zawiera spis np. klientów.
procedure TForm1.buttonClick(Sender: TObject);
var
pMess: TMessage;
begin
pMess.Msg := WM_SelectContractors; //WM_USER+1001
pMess.WParam := 7; //Liczba oznacz np index klienta w bazie który został wybrany z np tabeli;
pMess.LParam := ect_button_delivery.Tag; //Handle okna które wywołało szukanie klienta
Form2.PageDostawy.Broadcast(pMess); //Wyślij wiadomość do wszystkich zakładek
end;
Forma2 - Zawiera edit i przycisk który wywołuje aby użytkownik wybrał kontrahenta
procedure TForm2.SelectContractors(var Msg: TMessage);
begin
if Msg.LParam = Handle then
TForm2(FindControl(Msg.LParam)).Edit1.Text := IntToStr(Msg.WParam); //Zwraca Index wybranego kontrahenta
end;
procedure TForm2.ButtonSelectClick(Sender: TObject);
begin
Form1.button.Tag := Handle; //Zapamiętuje handle okna z którego wywołane jest zapytanie wyboru klienta
PokazForm1; //Procedura która pokazuje / przeskakuje do Form1
end;
UWAGI
TForm2 jest tworzone dynamicznie i przypisywane do zakładek PageControl / TabSheet. Dlatego na jednej formie może być PageControl z wieloma zakładkami na których jest umieszczony TForm2; Np Tak jak byśmy klika razy wywołali poniższą procedurę:
procedure TForm3.button_modifyClick(Sender: TObject);
var
TabSheet: TsTabSheet;
aComponent: TComponent;
fC: TForm2;
begin
TabSheet := TsTabSheet.Create(Form3.PageControl);
TabSheet.PageControl := Form3.PageControl;
fC := TForm2.Create(TabSheet);
fC.Align := alClient;
fC.Parent := TabSheet;
Form3.PageControl.ActivePage := TabSheet;
end;
Nie chciałbym zakładać kolejnego wątku ale czy to normalne że polecenie
PageControl1.Broadcast(pMess);
Nie rozsyła komunikatów po zakładkach ?