MDI Form/ MDI Child

0

Mam pytanie, przyciskiem Button tworze sobie kilka okienek MDIChild.
Teraz przyciskiem z glownej formy chcialbym przepisac text do np. drugiego z kolei okna MDIChild.
Jak to zrobic? Czy da sie rozpoznac numer tworzonego MDIChild?

0

Mam pytanie, przyciskiem Button tworze sobie kilka okienek MDIChild.
Teraz przyciskiem z glownej formy chcialbym przepisac text do np. drugiego z kolei okna MDIChild.
Jak to zrobic? Czy da sie rozpoznac numer tworzonego MDIChild?

Wiesz, możesz spróbować rozpoznawać otwarte okienka za pomocą funkcji FindWindow lub FindWindowEx. Wtedy złapiesz do tego okienka uchwyt (jak podasz jego nazwę) i potem poprzez ten uchwyt na chwilę uaktywnić okno i wpisać to co chcesz. Jeśli to uaktywnienie ma byc na chwilę to musisz tez zapamiętać Handle aktualnie ważnego okna.

Możesz też zapisywac sobie do jakiejś tablicy czy listy wartości Handle i powiązane z nimi numerki Twoich okienek. Jak bedzeisz tworzył nowy MDIChild to sobie to zapiszesz, a przed Free-owaniem wyrzucisz.

A poza tym przypomnaiłem sobie, że zawsze masz dwie własciwości TCustomForm do dyspozycji dotyczące MDIChild-ów.

To
MDIChildCount - która podaje Ci ile jest okien potomnych dla Twojego okna
oraz
MDIChildren - która jest tablicą formularzy

zastosowanie jak w przykładzie (z delphi help)
var I: Integer;
begin
with Form1 do
for I := MDIChildCount-1 downto 0 do MDIChildren[I].Close;
end;

zobacz sobie też stronkę
http://www.delphipages.com/threads/thread.cfm?ID=76300&G=76297

0

Cos jest zle z tym kodem. Dla kazdego polaczonego z serverem clienta tworzone jest okno MDI, ale pomimo dodawania okien, zmienia sie caption tylko tego pierwszego mdi...

Moj kod:

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
i:integer;
polaczenie:TpolaczenieForm;
mdi, ile_mdi: Integer;
begin
obrazek:=TpolaczenieForm.create(self);
ile_mdi:=Form1.MDIChildCount-1;
MDIChildren[ile_mdi].caption:='Połączenie nr.'+IntToStr(ile_mdi+1);

co jest nie tak?

0

A nie możesz po prostu nadać nazwy tym oknom??

0

Probowalem, ale coś z tym jest nie tak i nie dziala, jesli komus chcialoby sie przyjrzec temu blizej i napisac prawidlowy lub dodac jakeis poprawki bede wdzieczny

0

A spróbuj coś takiego

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
i:integer;
polaczenie:TpolaczenieForm;
mdi, ile_mdi: Integer;
begin
polaczenie:=TpolaczenieForm.create(self);
polaczenie.caption:='Połączenie nr.'+IntToStr(ile_mdi+1);
0

Cos jest zle z tym kodem. Dla kazdego polaczonego z serverem clienta tworzone jest okno MDI, ale pomimo dodawania okien, zmienia sie caption tylko tego pierwszego mdi...

Moj kod:

obrazek:=TpolaczenieForm.create(self);
ile_mdi:=Form1.MDIChildCount-1;
MDIChildren[ile_mdi].caption:='Połączenie nr.'+IntToStr(ile_mdi+1);

co jest nie tak?

Ano nie tak jest to, że okna MDI dodawane są jak na stos. Mianowicie MDIChildren[0] zawsze wskazuje na ostatnio dodane a MDIChildren[MDIChildCount-1] na pierwsze dodane. Więc w swoim kodzie daj:

obrazek:=TpolaczenieForm.create(self);
MDIChildren[0].caption:='Połączenie nr.'+IntToStr(ile_mdi+1);

i będzie git - sorry, że tak późno - wcześniej mijałem ten wątek ;)

0

Ok, dzieki, dziala.

Teraz inna sprawa. Jak przyciskiem z MDIForm odniesc sie do np. Edit'a w wybranym oknie MDIChild?

0

Spróbuj ActiveMDIChild.

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