[PR] Ukrycie formy zaraz po uruchomieniu

0

Już mi szajba odbija ;-|
jak dam do OnClick Buttona taką procedurke: Form1.Hide; to kruca fuks forma mi znika, a jak dam to do OnCreate albo do OnActivate formy to mi wyskakują błędy :-(
Wie ktoś jak schować forme zaraz po uruchomieniu, tak żeby ani przez ułamek sekundy nie było jej widać ? a dodam jeszcze że nawet jak w Object Inspector ustawie WindowState na wsMinimized to też nie działa ;-| niewiedzieć czemu. Aha, dodam jeszcze że te okno to ma sie do traya schować (używam do tego CoolTrayIcon), i jeszcze dodam że ukrywam moją aplikacje z paska zadań wg tego faqa: http://4programmers.net/view_faq.html?id=37
Błagam, pomocy

0

tam gdzie masz

program Szkrable;

uses
  Forms,
  Form in 'Form1.pas' {Form};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TfrmMain, frmMain); //może to wykreśl?
  Application.Run;
end.

A jak nie to pisz w WinApi (patrz artykół Adama B.).

0

Nie wiem czy dobrze rozumiem ale może w inspektorze ustawić Visible na False ??

0

omikron87 jak wykkreślam to to wtedy mi sie w ogole program nie wlacza.
W OI mam ustawione visible na false, a i tak widać to okno :-/

0

w pliku dpr czyli w projekcie jak masz sekcje z application to dopisz
application.showmainform := false;
koniec

0

A masz zamiar ją kiedyś włączyć?
Jak tak to pisz tam gdzie usunąłeś tą linijkę do momentu wyświetlenia, a jak nie to pisz w API.

0

No chce poźniej pokazywać tą forme (wtedy gdy sie kliknie na ikone w trayu). Pomysl Ziombra nie pasuje bo chowa on forme na dobre (chyba) nawet jak później wpisze application.showmainform := true; to już mi formy nie pokaże.

0

moze wzuc timera ?? na forme ja tak u siebie robie

0

moze wzuc timera ?? na forme ja tak u siebie robie

no to jest chyyba jedyny sposób, tak też zrobie, a jak kiedyś znajde lepszy sposób to se zmienie

0

moze wzuc timera ?? na forme ja tak u siebie robie

hehe i ile zre zasobow?

0

Chyba najlepszym rozwiązaniem będzie dodanie logicznej zmiennej globalnej, np.:
[code]var
FromTray: boolean;[/code]
Następnie w FormCreate należy utworzyć menu w tray-u i ustawić FromTray := False;
Do procedury FormActivate dopisać:
[code] if not FromTray then ShowWindow(Handle, SW_HIDE); // okno pojawi się tylko na ułamek sekundy[/code]
Po kliknięciu pozycji menu z tray-a wywołać:
[code]FromTray := True;
ShowWindow(Form1.Handle, SW_SHOW);
BringWindowToTop(Form1.Handle) // tak na wszelki wypadek[/code]

0

Jack Twój sposób niechce działać, bo to normalnie jest tak że przy uruchomieniu nieda sie schować okna :-/ niewiedzieć czemu. Wziełem i dałem na forme timera, Interval ustawiłem na 1, i dałem taką procedurke:

<font color="blue"> ```delphi Form1.Hide; Timer1.Enabled:=false; ``` </span> na jakiś ułamek sekundy okno sie pojawia ;-| no ale co zrobić
0

U mnie (Delphi 5 Ent. + Win2000 Pro.) wszystko działa dobrze.
Jeśli dodam ShowWindow(Form1.Handle, SW_HIDE) do proc. FormCreate to faktycznie forma pozostaje widoczna. Natomiast jak dodaje ten fragment kodu do proc. FormActivate to forma główna tylko pokaże się na ułamek sekundy i znika. (Czy na pewno dodałeś ten kod do FormActivate ?)
Natomiast jeśli chodzi o poźniejsze wyświetlanie formy głównej, to ShowWindow(Form1.Handle, SW_SHOW) działa OK. Tylko jeszcze trzeba rozróżnić, czy polecenie wyświetlenia okna wyszło z proc. FormCreate, czy z menu. Dlatego wprowadziłem zmienną globalną FromTray.
Sprawdź wszystko dokładnie. Powinno działać.
Jeśli jednak dalej będziesz miał problemy, to może zrezygnuj z późniejszego wyświetlania formy głównej. Przecież nic nie stoi na przeszkodzie, aby stosować dodatkowe formularze, a formularz główny (bez kontrolek itd.) ukryć przy starcie aplikacji (w FormActivate lub za pomocą Timera).
Jeśli dalej będziesz miał problemy, to udostępnij fragment kodu, wówczas może będę mógł coś więcej pomóc !

0

No chce poźniej pokazywać tą forme (wtedy gdy sie kliknie na ikone w
trayu). Pomysl Ziombra nie pasuje bo chowa on forme na dobre (chyba) nawet
jak później wpisze application.showmainform := true; to już mi formy nie
pokaże.

To: application.showmainform := true nic ci nie da !!!
Wystarczy uzyc Form.Show i sie pokaze.
I to jest najlepszy pomysl.

[dopisane]
Zalezy jeszcze jakiego komponentu do Traya uzywasz, bo czasem sam komponent mam w sobie Form.Show, i dlatego forma moze sie pojawiac na chwilke. Musialbys go zmodyfikowac lub zmienic na inny.

0

Wielkie dzięki dla wszystkich [browar] . jakoś mi sie to udało (sam niewiem jak :-P ). Napisze jak, bo może sie kiedyś komuś przyda:

PROJECT -> VIEW SOURCE
i tam dopisałem pod Application.Initialize; takie coś: Application.ShowMainForm := False; //ukrywa forme główną (mainform)

Potem do OnClick CoolTrayIcon dałem takie coś, żeby móc później poprzez kliknięcie na ikone pokazac i schować forme:

If Form1.visible=True then begin Form1.Hide; exit; end;
If Form1.visible=false then begin Form1.Show; exit; end;

No i forma nie pojawia sie ani na 0.000001 sekundy :-) znaczy sie w ogóle jej nie widać, jest extra, dzięki

0

Eh, może to juz nieaktualne ale mam lepszy pomysł. Zrób sobie 2 formy, tą pierwszą (głowną) pustą z Application.ShowMianForm na False a drugą z tym co miało być na pierwszej. Dzięki temu nie bedziesz musiał bawić się w szybkie chowanie głownej formy, której rolę bedzie pełniła ta druga forma (na pierwszej umieścisz kod pokazujązy drugą w odpowiednim momencie) .

//dopisane

Róznica wielkości programu (pusty i z 2 formami) 1Kb - czy to dużo ?
Co do pamięci to drugą formę mozna utworzyć dynamicznie. Ale nie twierdze że moj pomysł jest najlepszym rozwiązaniem.

0

Eh, może to juz nieaktualne ale mam lepszy pomysł. Zrób sobie 2 formy, tą pierwszą (głowną) pustą z Application.ShowMianForm na False a drugą z tym co miało być na pierwszej. Dzięki temu nie bedziesz musiał bawić się w szybkie chowanie głownej formy, której rolę bedzie pełniła ta druga forma (na pierwszej umieścisz kod pokazujązy drugą w odpowiednim momencie) [cya] .

Cudowny sposób. DFM drugiej formy, informacje o jej wywołaniu, jeszcze może jakieś bzdety w zasobach itp. zajmą kupę miejsca i znacznie spowolnią program. Podstawowa zasada używania VCL: NIE RÓB niepotrzebnych komponentów, żeby osiągnąć coś, co jest możliwe do osiągnięcia innym sposobem.

0

no masz. Może to jednak dobry pomysł żeby automatycznie blokować tematy z przedrostkiem [PR] :-)

0

ja tam używam komponentu ChTrayIcon z ChPack'u a jak w :

form.create wpisuję :
application.minimize;
to działa bez zarzutów ...
raz udało mi sięzrobić takią aplikację która robi to samaże sięmainform nie pokazuje tylko okno wyboru i w zależności mainform, tylko potem coś kombinowałem i popsułem :D potem nie mogłem już do tego dojść ... to było jak moje kody wyglądały jak europa w czasie 2 wś D:D
ale naprawdę mówię ci że chpack jest lepszy od cool tray'u ...

0

W TCoolTrayIcon jest właściwość ShowMainForm... TCoolTrayIcon rulez ;p

0

a może po prostu zamiast do FormCreate przypisz ten kod jakiemuś innemu zdarzeniu, które równie często wyskakuje...
Na przykład komunikat WM_PAINT, czy jakoś tak... dostajesz go zawsze gdy zostanie odświeżone twoje okno (czyli pewnie co pare milisekund)

Sorki jeśli coś pokręciłem, ale spróbowac zawsze można.

0

a może po prostu zamiast do FormCreate przypisz ten kod jakiemuś innemu
zdarzeniu, które równie często wyskakuje...
Na przykład komunikat WM_PAINT, czy jakoś tak... dostajesz go zawsze gdy
zostanie odświeżone twoje okno (czyli pewnie co pare milisekund)

no szło by tak, ale jednak przez ileś tam ułamków sekundy ta forma by była widoczna przy uruchomianiu (a tego chciałem uniknąć jak ognia). Ten sposób który napisałem pare postów wcześniej jest najlepszy, włączam programa, forma nie pojawia sie w ogole, tylko Od razu sie chowa to tray'a. Już nie trzeba nic kombinowac bo tak jest dobrze.

PS: Nie musicie już do tego wątku nic dopisywać [cya]

0

Wpisz formblablabla.hide w procedurze OnPaint formy tylko że ją widać przez ułamek sekundy a potem puf ;-) formy nie widać

0

Wpisz formblablabla.hide w procedurze OnPaint formy tylko że ją widać przez
ułamek sekundy a potem puf formy nie widać

czy ty przypadkiem nie jesteś DEBILEM ? zanim coś napiszesz to przeczytaj łaskawie poprzednie posty. pisałem chyba ze 5 razy że chce żeby forma nie pojawiała sie ani na sekunde, i już ten problem jest zresztą rozwiązany, a ty bierzesz i piszesz to samo co pisał ktoś dwa posty wyżej :-[ nabijasz se posty i tyle :-/ :-/

0

Napisałm bym ci coś ale... to jest forum ludzi kulturalnych Masz za duże wymagania Poszukajta tu i tam i uczta się!!! nie wiem czemu ale jakoś mi się nie chce wierzyć że nigdy nie było takiego pastu na tym olbrzymim forum!!!!!!!!!!!!!!!!!!!!!!!!!!!

Jakoś nikt nie napisał tego co ja

A posty moge se nabijać inaczej!! Gdybym se nabijał to nawet bym sie nie wysilał żeby napisać ci te 1 zdanie

//Wyluzuj z wykrzyknikami - m.M

0

Co to jest AKJU* ???

0

*=F
dopisz do AKJU F na początku i wyjdzie ci wymowa pewnwgo angielskiego zwrotu
(tylko nie mów że nie wiesz o co chodzi)

To dlatego bo cały komp mi sie spaprał przez takiego jednego wirusa
(reinstal windy delphi wszystkiego )

0

wirusow sie nie pisze same tak jakos wychodza

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