Forma 2 zawsze na wierzchu?

2007-07-01 21:33
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ą :)

Pozostało 580 znaków

2007-07-01 22:41
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;

- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2007-07-02 13:21
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 ;]

Pozostało 580 znaków

2007-07-02 14:07
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, ...


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2007-07-02 14:42
0

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


"as above, so below..all things come from the one. Now You are the victim, carried by the wind, then rooted to the ground. If You want, to learn the secrets..close Your eyes..."

Pozostało 580 znaków

2007-07-02 21:10
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 ...


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2007-07-02 23:01
odpowiadający
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.

Pozostało 580 znaków

2007-07-02 23:13
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.


<span style="color: blue">"Kolarstwo to jedna z najtrudniejszych dyscyplin sportu. Nawet najgorszy kolarz jest wciąż wybitnym sportowcem."
s.p. Marco Pantani
</span>

Pozostało 580 znaków

2007-07-03 11:43
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 ;)

Pozostało 580 znaków

2007-07-03 12:48
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.


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2007-09-21 03:51
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

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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