Komponent i jego dzialanie w stosunku do tworzonej formy

0

Mam forme i wzgledem jej(ona jest podstawa) tworze formy potomne, i teraz jak mam dowiazac komponenty znajdujace sie na formie glownej do nowo tworzonych form, tzn. np. clientsocket dostaje wiadomosc i musi przekazac jej zawartosc powiedzmy do nowo przygotowanej formy do komponentu memo. Nowo tworzone formy zapisuje w tablicy. Ich numery sa przydzielane automatycznie po kliknieciu na okreslona pozycje w listboxie na mainformie.

Moje pytanie brzmi, jak powiazac komponent w tym przypadku clientsocket z nowo tworzonymi formami a dokladnie z komponentami memo na tych formach??

pozdrawiam

0

Nazwaformy.Memo.Text := Form1.ClientSocket1.Socker.ReceivedText
Czy o to chodziło? Oczywiście musisz umieścić w sekcji uses nowo tworzonej formy tą formę, na której jest ClientSocket.

0

Niezupelnie o to mi chodzilo. Tworze nowe formy w oparciu o juz istniejace - duplikuje je po prostu. I kazda nowa forma ktora stworze jest zapisywana w tablicy, np. okienka[1], okienka[2], moze lepiej jak zapodam kodem :D

tak wyglada deklaracja mojej zmiennej, ona jest zmienna globalna:

var
   okienka: array[0..20] of TForm;

i w procedurze komponentu listbox mainformy:

procedure TMainForm.ListaUzytkownikowDblClick(Sender: TObject);
begin
if okienka[ListaUzytkownikow.ItemIndex]=nil then
begin
Okienka[ListaUzytkownikow.ItemIndex]:=TWiadomoscForm.Create(WiadomoscForm);
Okienka[ListaUzytkownikow.ItemIndex].Caption:='Rozmowa z '+ListaUzytkownikow.Items.Strings[ListaUzytkownikow.itemindex];
Okienka[ListaUzytkownikow.ItemIndex].Show;
end else
         begin
         okienka[ListaUzytkownikow.ItemIndex].Visible:=True;
         end;

end;

WiadomoscForm jest przykladem formy ktora powielam :)

i gdy w onread socketa dam:

if s2='MES' then
begin
Okienka[MainForm.ListaUzytkownikow.ItemIndex].Memo1.lines.add(ListaUzytkownikow.Items.GetText+s3);
end;

to oczywistym jest ze wywali mi ze nie ma memo1, wiec jak mam zrobic zeby socket mogl odpowiednio zareagowac i wyslac wiadomosc do odpowiedniej formy??

0

Czyli te TMemo tez masz tworzone dnamicznie, tak? W takim wypadku proponuje zadeklarować klasę potomną od TForm, np:

  TUserForm = class(TForm)
    Memo1: TMemo;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

No i oczywiście deklarujesz tablice troszkę inaczej:

 okienka: array[0..20]of TUserForm;

I teraz jak tworzysz nową taką formę:

 okienka[i]:=TUserForm.CreateNew(MainForm);
 with okienka[i] do
  begin
   Caption:='...';
   //....
   Memo1:=TMemo.Create(form);
   Memo1.Parent:=okienka[i];
   Memo1.Align:=alClient;
   Memo1.Show;
   Show;
  end;

I teraz możesz się ładnie odwoływać do okienka[i].Memo1 ;]

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