Formy tworzone dynamicznie

0

Chodzi mi o formy tworzone dynamicznie. Trudno to zrozumiec pewnie Wam... Jak zapobiec stworzeniu takiej samej formy, jesli juz jedna taka o takim samym captionie istnieje?

0

Nie jarze czemu nie mialayby odpalic sie dwie formatki o tym samym captionie.

Ale kiedyś juz chyba o tym bylo także poszukaj na temat blokowania wielokrotnego uruchomienia programu moze to jest to o co ci chodzie.

0

Jeśli tworzysz formę (dynamicznie), to przecież sam nadajesz jej Caption. Pokombinuj z if'ami.

0

Domyslam sie ze chodzi ci o jakis komuniktaor-chat...

Mozesz poprobowac rozrozniac okna po
a.)captionie
b.)wlasciwosciach komp. ktorego uzywasz do komunikacji (nick osoby lub jej numer lub tez adres..zalezy jaki to program)
co sprowadza sie w sumie do punktu a.)

potem jakis warunek ze jezeli juz takie okno istnieje to..(kod)
a jak nie to zrob nowe..

jezeli sie myle co do twego projektu to napisz mi na GG to to usune :-) :-)

0

"Pokombinuj z if'ami" - jasne, niby genialne. Nadaję jej caption, ale jak sprawdzić, czy forma z takim caption'em juz istnieje? Chyba nie if FormExists :P

"Domyslam sie ze chodzi ci o jakis komunikator-chat..." - dziękuję. Tak, istotnie o to mi chodzi. Tym razem mam wiecej czasu, moge wrzucic fragment kodu.

if ListView1.Selected = nil then Exit;
with TRozmowa.Create(Self) do
begin
Caption := 'Rozmowa z ' + ListView1.Selected.Caption;
Show;
end;

Jesli drugi program przysle wiadomosc, to pierwszy tworzy forme. Problem pojawia sie wtedy, gdy forma rozmowy z tym drugim jest juz otwarta. Nie dopisuje on do RichEdit w utworzonej juz formie (a wlasciwie od dzisiaj RichView), tylko tworzy nowa, a w niej dopisuje.

Przestroga na przyszlosc: Jesli nie masz czasu, nie zadawaj glopich pytan.

0

Proponuje zrobić coś takiego:

var
Nr: integer;

begin

for Nr := 0 to Screen.FormCount -1 do
if Screen.Forms[Nr].Caption = 'cos_tam' then
begin
//... tutaj kod w przypadku gdy forma z taka etykietka istnieje
end;

end;

0

w WinAPI
if FindWindow(nil,'Tytul okna')=nil then NieMaJeszczeTakiegoOkna;

0

Wielkie dzięki, Matrox! Nie bez powodu zwą Cię Starszy Kapral :) Po urozmaiceniu kod wygląda tak (poniżej). Ale... Można tylko ustalać właściwości wspólne dla wszystkich form, ale co mam wpisać, gdy chcę... RichEdit1.Lines.Add(wiadomosc)? Przy Screen.Forms[Nr].RichEdit1.Lines.Add(wiadomosc) kompilator pokazuje błąd. I nie dziwię mu się...

var Nr: integer;
begin

if ListView1.Selected = nil then Exit;

for Nr := 0 to Screen.FormCount -1 do
if Screen.Forms[Nr].Caption = 'Rozmowa z '+nazwa_usera then
begin
Screen.Forms[Nr].RichEdit1.Lines.Add(wiadomosc);
Exit;
end;

with TRozmowa.Create(Self) do
begin
Caption := 'Rozmowa z ' + ListView1.Selected.Caption;
Show;
end;

end;

Kocham delphi za te utrudnienia :P

0

Kompilator sie pluje bo nie zna takiego komponentu, gdyz bedzie on dopiero storzony podczas dzialania programu. Jak bedziesz tworzyl na formie RichEdita to nadaj mu nazwe (wlasciwosc Name) np. 'RichEdit'.

RichEdit.Name := 'RichEdit'; // nadajemy richeditowi nazwe

Wtedy gdy bedziesz sie chcial do niego odwolac na formie stworzonej dynamiecznie piszesz tak:

(Screen.Forms[Nr].FindComponent('RichEdit') as TRichEdit).Lines.Add('bla bla');

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