Powiązania (?) okien

0

Lepiej zrozumieją problem Ci, którzy mieli/mają mój program Ikari's Chat Qlient. Otóż widac tu dziwne zachowanie - klikam na pasku zadan przycisk okna glownego, a aktywny staje sie priv. Klikam priv, a okno glowne równiez sie pokazuje. Wyglada na to ze sa one jakos powiazane. Ale jak?

Okienko := TOknoPriva.Create(Application);

Przeciez kaze ustawic wlasciciela okna na Application, a nie na MainForm - więc czemu te okna tak dziwnie reaguja?

0

Prawdopodobnie nie sa to osobne aplikcaje(te okna) tylko formularze, które mają ustawione takie parametry, żeby wyglądały jak osobne okna(m.in. belka na pasku). Tak naprawdę, są one częścią programu, więc jeśli zaznaczasz okienko zaznacza się tez głowna forma programu. Też mam taki problem, i nie wiem jak go rozwiązać.

0

Hey! Są one powiązane klasą TApplication, a nawet zmienną Application. Wszystko od niej powstaje. Można to w pewnym sensie porównać do tworzenia dynamicznego przycisku.

Przycisk := TButton.Create(Form1);

Przyciski i komponenty powstają, ale na formie (zassssskakujące P:P). Niby forma to coś innego niż przycisk, a jednak, gdy chcesz go włączyć, musisz mieć widoczną formę :). Takie to jest powiązanie :P.

0

Okienko := TOknoPriva.Create(Application);

Takie coś wykorzystywane jest do dynamicznego tworzenia okien typu ChildWindow - dlatego właśnie u Ciebie są powiązane.

Niby forma to coś innego niż przycisk

Nie. Zarówno forma jak i przycisk są dla Windows oknami.

0

A może:

Okienko := TOknoPriva.Create(Self);

????

Może użyłeś

Okienko.ShowModal();

nie wiem..nie ma tego progu

0

Okienko := TOknoPriva.Create(Self);

Zależy w którym unicie miałbym to wykonywać, ale tutaj by to oznaczało główną formę programu, więc efekt daleki od zamierzonego. A nie mogę wykonać tego jako procedura klasy tworzonego okna dopóki go nie utworzę (a może się mylę?)...

Takie coś wykorzystywane jest do dynamicznego tworzenia okien typu ChildWindow - dlatego właśnie u Ciebie są powiązane.

I co da się z tym zrobić...? :)

0

No więc jak nie Application i nie Self, to może:

Okienko := TOknoPriva.Create(nil);
0

No więc jak nie Application i nie Self, to może:

Okienko := TOknoPriva.Create(nil);

działa niestety bez zmian... Okno priva aktywuje się jeśli klikam przycisk okna głównego (wtedy gdy było ono aktywne przed przelaczeniem do innego programu), a uaktywnienie okna priva nadal wyciaga "na wierzch" (tzn pod priva) okno główne programu :( Wszystkie inne privy zreszta chyba tez.

0

A spróbuj najpierw

Okienko := TOknoPriva.Create(nil); 

A potem poeksperymentować i poprzypisywać różne wartości do:

Okienko.Parent (np. nil)
Okienko.ParentWindow

Sprawdź jak działa z róznymi kombinacjami i co poszczególne właściwości zmieniają.

0

Okienko.Parent (np. nil)
Okienko.ParentWindow

Nijak, nic sie nie zmienia ani przy owner = nil, ani parent = nil ani wszystko = nil (lub 0) :(...

0

<desperacja próba wrzucenia tematu na górę listy....>
No ludzie, musi być jakieś rozwiązanie. Jest na penwo, bo w GG okna nie zachowują się w taki sposób jak u mnie...

0

ikari, udalo mi sie to zrobic, chociaz nie wiem czy oto ci chodzilo, ale mozliwe ze tak.
stworz te okienka jakby byly oddzielnymi aplikacjami.

0

Gdzieś w FAQ był kod pozwalający na włączenie animacji minimalizowania okna.... Wbrew pozorom, pod takim bzdetem kryje się dokładnie to, czego potrzebujesz.

0

ikari, udalo mi sie to zrobic, chociaz nie wiem czy oto ci chodzilo, ale mozliwe ze tak.
stworz te okienka jakby byly oddzielnymi aplikacjami.

Zgodnie z tym co mowiles na gg - tworzenie nowego obiektu TApplication nie pomogło :/. Mozliwe ze bede musial sprobowac z tymi DLL :(

Gdzieś w FAQ był kod pozwalający na włączenie animacji minimalizowania okna.... Wbrew pozorom, pod takim bzdetem kryje się dokładnie to, czego potrzebujesz.

Jestem zbyt tępy nawet zeby to znalezc ;-(

0

Spróbuj utworzyć nową klasę bazującą na TForm i nadpisać prockę CreateParams tak jak tutaj:

http://www.delphiqa.org.pl/events/qa049.html

Taka forma będzie miała osobną belkę na pasku zadań. Nie wiem czy o to dokładnie chodzi, ale może...
Zauważyłem tylko, że jeśli zminimalizujemy formę główną (gdy form2 jest widoczne) i klikniemy na belkę tej formy na pasku zadań to pokaże się, ale pod form2, i nie będzie aktywna. No ale to chyba da się jakoś poprawić.

0

Bardzo wielkie dzięki!! Już myślałem, że nikt mi nie pomoże. Jestem naprawdę wdzięczny :)

No to POŁOWA problemu rozwiązana. Wie teraz ktoś, co trzeba zrobić, żeby klikanie przycisku głównej formy raczyło ją aktywować? (ten blad to nadal nic nowego - program stale sie tak zachowywal)

0

Spróbuj w ten sposób:

type
  TForm1 = class(TForm)
private
  procedure OnRestore(Sender: TObject);

{...}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnRestore := OnRestore;
end;

procedure TForm1.OnRestore(Sender: TObject);
begin
  BringToFront;
end;
0

W pierwszej chwili myślałem, ze to totalnie nie wypali - tzn. ze zareaguje na przywrócenie okna priva przywołaniem okna głownego. Ale nie, nic sie nie zmieniło ;P. Z tym że chyba wiem w czym tkwi problem - z bliżej niepamiętanych mi przyczyn :) okno "główne" nie jest główne w tym programie :). Dlatego najpierw spróbuję to samo co w privach - wprowadzić do kodu tego okna, a jesli nie wypali to przekombinowac zeby bylo ono glownym oknem programu z puktu widzenia komputera (a nie usera :)) :)

0

Z punktu widzenia komputera oknem głównym zawsze będzie Application. Polecam lekturkę: http://delphi.cartall.com.pl/Pytania/no-frames.html a przede wsio punktu 9, jeżeli dobrze pamiętam.

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