Forma 2 zawsze na wierzchu?

0

Witam!

na samym wstępie mówię ze przeszukałem całe forum 4p w poszukiwaniu sposobu jak zrobić by Forma 2 była zawsze na wierzchu nad wszystkimi programami. Wiadomo z form1 nie ma problemu ustawimy tylko stayOnTop ale gdy chcemy aby form2 badz form3 była zawsze na wierzchu tu pojawia sie problem, bo poniższe metody:

  1. SetWindowPos
  2. StayOnTop
  3. Showmodal (obrazu odpada bo unieaktywnia pierwsza forme a poza tym i tak nic nie daje)

nie działają, form2 jest tylko nad form1 ;/, a mi chodzi o to żeby form2 była zawsze nad wszystkimi aplikacjami ;/

Zna ktoś jakiś sposób ??

Zwróciłem się z tym pytaniem na tym forum ponieważ myślę ze są tu kompetentni ludzi którzy mi pomogą :)

0

dodaj do drugiej formy

  public
    procedure CreateParams(var Params: TCreateParams); override;
  end;

...

procedure TForm2.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
  Params.WndParent := GetDesktopWindow;
end;
0

doskonale wiesz ze to nie działa, więc po co piszesz...

Jedynym sposobem który działa na inne formy jest taki który opracowałem sam, ale są z nim problemy na viscie ;/, tzn podobno blokuje sie pasek:

oto ten sposób:

parentWindow := getDesktopWindow;
parent := nil;
SetWindowPos(form2.Handle,HWND_TOPMOST,
form2.Left,form2.Top,form2.Width,form2.Height,
0);
es:=GetWindowLong(application.Handle,GWL_EXSTYLE);
SetWindowLong(form2.Handle,GWL_EXSTYLE,es);

niewiem co moge więcej wymyślić, może ktoś coś wymysli jeszcze, jakis inny lepszy sposób zeby na viscie nie blokował się pasek ;/

są jakies sposoby, czy tylko ja tu jestem mądry i cos wymyslilem ;]

0
Gimo napisał(a)

doskonale wiesz ze to nie działa, więc po co piszesz...

jak jesteś taki tępy, że nie potrafisz 7 linijek kodu przepisać to sorry...

Jedynym sposobem który działa na inne formy jest taki który opracowałem sam, ale są z nim problemy na viscie ;/, tzn podobno blokuje sie pasek:

oto ten sposób:

wow, nie wiem gratulować czy płakać

parentWindow := getDesktopWindow;
parent := nil;
SetWindowPos(form2.Handle,HWND_TOPMOST, form2.Left,form2.Top,form2.Width,form2.Height, 0);

czyli dokładnie to samo co robi FormStyle := fsStayOnTop;

es:=GetWindowLong(application.Handle,GWL_EXSTYLE);
SetWindowLong(form2.Handle,GWL_EXSTYLE,es);

a to robi niby co?? Odczytujesz GWL_EXSTYLE i potem to co odczytałeś ustawiasz bez żadnych zmian ...

niewiem co moge więcej wymyślić, może ktoś coś wymysli jeszcze, jakis inny lepszy sposób zeby na viscie nie blokował się pasek ;/

są jakies sposoby, czy tylko ja tu jestem mądry i cos wymyslilem ;]

nie mam visty, a co do twojej mądrości to wolę się wypowiadać ...

BTW kod podany przeze mnie działa w 100% bo był sprawdzany, a że wasza inteligencja nie potrafi ogarnąć 7 linijek prostego kodu to inna bajka ...

ExTRA napisał(a)

Bo on pisze tylko po to aby pisać nabijając sobie liczbę postów i jaki to on inteligentny życiowo a zwłaszcza z programowania [rotfl] [!!!]

patrz na siebie - nic poza krytykowaniem ci nie wychodzi - żenada, dno, ...

0

Potwierdzam, ze dziala. Moze kolega Gimo zapomnial ustawic fsStayOnTop na drugiej formie bo bez tego nie dziala.

0

jakoś dziwnie zamilkiście

ExTRA napisał(a)

Bo on pisze tylko po to aby pisać nabijając sobie liczbę postów i jaki to on inteligentny życiowo a zwłaszcza z programowania [rotfl] [!!!]

wypadało by przeprosić, chyba że twoja kultura taka sama jak wypowiedzi ...

0

nie ma o co kopii kruszyć kto mądrzejszy ?:)
Było na forum bo sam z tego korzystałem - robiłem programik który mał mieć takie same własciwości jak Twój.
Więc skorzystałem z TEGO własnie forum.
Oto wyciety fragment z mojego kodu, nie wiem czy podałem wszystko bo to trochę pogmatwane i być moze o czymś zapomniałem. Ale widzę jesteś na tyle obcykany ze sam dojdziesz co jeszcze trzeba ;)

{===================== Okno programu zawsze na wierzchu ======================}
PROCEDURE StayOnTop(Forma:TForm; Opcja:Boolean);
Begin
 Application.MainForm.Visible:= True;        //włącza okno gdyby było wyłączone
 SetForegroundWindow(Application.MainForm.Handle);   //wydobywa okno na wierzch
 if Opcja then SetWindowPos(Application.Handle, HWND_TOPMOST, Forma.Left, Forma.Top, Forma.Width,0, 0)
    else SetWindowPos(Application.Handle, HWND_NOTOPMOST, Forma.Left, Forma.Top, Forma.Width,0, 0);
{PS podanie rozmiarów Forma.Left itd... ma znaczenie gdy będziemy minimalizować
okno - dlatego że od tego punktu zacznie minimalizować, a nie z górnego lewego
rogu ekranu (taki błąd był widoczny na ekranie gdy nie podałem pozycji) }
End; 
{Opis:
Podczas uruchomienia programu wywołanie POWYŻSZEJ procedury następuje w
PONIŻSZEJ procedurze - dlatego gdyż dając StayOnTop(True) w procedurze
kreowania okna wyskoczy błąd AccesViolation.
PROCEDURE TForm1.FormPaint(Sender: TObject);
Begin
 //dla StayOnTop pobiera True lub False w zależności od zaznaczenia haczykiem
 if not Start then StayOnTop(mNaWierzchu.Checked);
 Start:= True;
End;
Wykonuje tylko jeden raz przy uruchomieniu - ponieważ migocze gdy na nim
wyświetlimy inne okno potomne np. okno "O programie" lub okno uwagi.
{============ Utrzymuje okno na wierzchu pomimo braku aktywności =============}
{Wcześniej wywołać StayOnTop(True) - a potem wywoływać w procedurze
TForm1.FormDeactivate(Sender: TObject);  }
PROCEDURE UtrzymujStayOnTop(Forma :TForm);
Begin
 SetWindowPos(Application.Handle, HWND_TOPMOST, Forma.Left, Forma.Top, Forma.Width,0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
End; //ok.
0

OT:

Ogólne zasady netykiety nakładają na użytkowników forów pewne zasady, a mianowicie:
1). Pamiętaj, że to Ty masz problem a nie my. Jeżeli odpowiedź Cię nie satysfakcjonuje grzecznie powiedz, że to nie to i czekaj na inną. Nie ponaglaj bo to nieładnie i odnosi odwrotny skutek.
2). Nie zakładaj tematu skoro tylko Ty myślisz i nikt inny nie może Ci pomóc.
3). Wszelkie żale prowadzi się nie na forum tylko na prv bo na oczach wszystkich to dziecinne.
4). Dobrym zwyczajem jest podpisać się pod wypowiedzią. Obraźliwe anonimowe teksty plasują się gdzieś pomiędzy śliną na ustach, która zbiera się podczas tyrady a ekskrementami.

0

yh... Misiekd to sobie sprawdź, to co dałes działa tylko w przypadku form1, ustawiownej w projekcie jako create 1 ! na form2 już to nie działa...

Swoją drogą rozwiązałem ten problem inaczej...

mój sposób zato działa na każdą forme, tylko są nim problemy na viscie...

Co do twojej mądrości nie chce sie wypowiadać upierasz się przy swoim i nie umiesz opisać procedur yh...

proponuje zamknąć ten temat... usunąć zbędne nic nie wnoszące wypowiedzi Pana "Misiek", bo wprowadzają w błąd użytkowników naszego portalu 4p :]

Dziękuwa ;)

0
Gimo napisał(a)

yh... Misiekd to sobie sprawdź, to co dałes działa tylko w przypadku form1, ustawiownej w projekcie jako create 1 ! na form2 już to nie działa...

sprawdzałem, dodatkowo inny user napisał ci, że też mu działa, a to że ty nie potrafisz 7 lini kodu przepisać to już inna bajka.
masz źródła - może chociaż je będziesz potrafił uruchomić http://rapidshare.com/files/40754171/StayOnTop_Test.rar.html (jest też exe już skompilowany, także jeśli ktoś nie da rady skompilować to może chociaż przetestować)
I jeszcze dam screena jak działa dla niedowiarków
user image

dla mnie EOT a kolejne kretyńskie komentarze jaki to debil zemnie niech potencjalny komentator wsadzi sobie głęboko, gdzie mu światło nie dochodzi.

0

widać ze nie korzystałeś ze swojego sposobu opisze krótko:
twój sposób dział na krótką mete i o to sie tu rozchodzi! mój działa cały czas, ale wysypuje pasek visty :P co do sczytywania i wczytywania jeszcze raz musi tak być... wiec twój sposób w ogóle sie nie nadaje bo po jakimś czasie okienko i tak jest pod wszystkimi (odświeżanie nie pomaga)

problem rozwiązałem już dawno, pozdrooo...

pozdro

0

Nie wiem czy oto ci chodziło Gimo ale ja zrobiłem coś takiego :
W "Project" , "View Source" zamieniłem miejscami kody :

begin
  Application.Initialize;
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Pozdrawiam :-)

0

no dobra, ale teraz glowna forma programu jest form2. i nie bedzie jej mozna np zamknac bo wylaczy sie caly program...

0

Gimo napisał :

a mi chodzi o to żeby form2 była zawsze nad wszystkimi aplikacjami ;/

Dlatego pomyślałem że chodzi o to żeby Form2 była główna,tak jak napisałeś Cimak teraz
Form2 zachowuję się jak główna .

0
orinoko napisał(a)

Gimo napisał :

a mi chodzi o to żeby form2 była zawsze nad wszystkimi aplikacjami ;/

Dlatego pomyślałem że chodzi o to żeby Form2 była główna,tak jak napisałeś Cimak teraz
Form2 zachowuję się jak główna .

hahahaha smialem sie z tego 20 min D <ort>jak bym</ort> chciał form2 jako główna to by sobie to przestawil lol człowieku D nie moge po prorstu ci ludze schodza ponizej krytyki.. ort! nie czaje po co ten temat jest ort!</ort> skoro problem jzu dawno rowiazalem. Twoej rady jzu mówielm gdzie mozna kierować ;)

Form 2 jako glowna buhaha jeszcze raz bo padne ;)

KOniec tetmatu !

0

Gimo napisał na początku :

czy tylko ja tu jestem mądry i cos wymyslilem

Faktycznie chyba ty tu jesteś najmądrzejszy i się marnujesz aż dziw bierze że jeszcze się Tobą nie zainteresował Bill Gates .No i naśmiewać się z innych też potrafisz najlepiej ,pewnie nie wiesz co to kultura osobista ,zresztą coraz bardziej odnoszę wrażenie że to forum daję co niektórym okazję
do naśmiewania się niż pomagania .Ja programowanie traktuję jako hobby i jestem w tym słaby ale to nie znaczy że nie mogę się wypowiedzieć na tym forum chociaż może żle zrozumiałem pana Gimo o co mu właściwie chodzi .Może moja wypowiedz rozśmieszyła pana Gimo ale mógł to zachować dla siebie a nie Od razu publicznie wypisywać jak go rozbawiłem do łez .

0
Gimo napisał(a)

hahahaha smialem sie z tego 20 min D jak bym chciał form2 jako główna to by sobie to przestawil lol człowieku D nie moge po prorstu ci ludze schodza ponizej krytyki.. zreszta nie czaje po co ten temat jest kontynułowany skoro problem jzu dawno rowiazalem. Twoej rady jzu mówielm gdzie mozna kierować ;)

Form 2 jako glowna buhaha jeszcze raz bo padne ;)

KOniec tetmatu !

ludzie chca Ci pomoc a Ty jeszcze sie glupio nabijasz, jak bys nie wiem kim byl... jak bys photoshopa napisal...

na forum powinny byc przyznawane gwiazdki.. jak by ktos mial na minusie to dostawal by bana.

0
cimak napisał(a)

na forum powinny byc przyznawane gwiazdki.. jak by ktos mial na minusie to dostawal by bana.
ja bym tam wolał "czarną listę" dla każdego usera (coś jak KF dla grup dyskusyjnych) - click i już mamy delikwenta na liście i potem np. przy każdej jego wypowiedzi mamy jakiś znaczek

// zamykam temat, autor podpadnie jeszcze raz i może staracić przywilej pisania na forum (dop. deus)

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