[Delphi] Wysuwa na wierzch tylko przed okna aqq
#1
Napisano 28.12.2009 14:42.
Odpowiedzi do tego tematu
#2
Napisano 28.12.2009 14:56.
Innym mało estetycznym rozwiązaniem może być włączenie na chwilę StayOnTop
Edit: A spróbuj jeszcze przed SetForegroundWindow wywołać: BringWindowToTop(Form1.Handle);
#4
Napisano 28.12.2009 21:34.
StayOnTop tez odpada gdyż nie do końca działa, tzn ok wywołuje na wierz ale po kliknięciu na aplikację znajdującą się tuż pod oknem wtyczki nie wywołuje tej że na wierzch (tak jakby wtyczka dalej byłą "zawsze na wierzchu") dopiero klikniecie na okno będące niżej działa normalnie. W sumie nie wiem czemu tak się dzieje, ale wiem że też próbowałem tą metodą i właśnie nie działało.
SetWindowsPos też próbowałem efekt taki sam jak z stayontop, no chyba że coś źle robię:
SetWindowPos(Handle,HWND_TOPMOST,Left,Top,Width,Height,0);
SetWindowPos(Handle,HWND_NOTOPMOST,Left,Top,Width,Height,0);
#6
Napisano 29.12.2009 00:23.
SetWindowPos( Handle, //uchwyt do formy lub do całej aplikacji - po prostu po testuj HWND_TOPMOST, //lub HWND_NOTOPMOST 0, //te dane są niepotrzebne więc można dać wszędzie zero 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE //no i to jest najważniejsze, żeby nie zmieniło rozmiaru i pozycji okna //można jeszcze dodać SWP_SHOWWINDOW aczkolwiek jest to raczej nie potrzebne );
#7
Napisano 29.12.2009 02:40.
#8
Napisano 29.12.2009 14:05.
Wiem że można ustawić, ale ja nie chcę aby okno było cały czas na wierzchu tylko skrótem klawiszowym aby można je było na wierzch przesunąć. Poza tym nie widzę zbyt wielkiej różnicy w tym SetWindowPos, poza zerami zamiast left top itd. ale te dane raczej nie wpływają na zachowanie.
@Arthemis
O właśnie o czymś takim myślałem, tylko nie wiem jak to zrobić na necie znalazłem, że jak chcemy żeby desktop był to dajemy nil ale mam tak od początku form1 := Tform1.Create(nil); i nie działa.
#9
Napisano 29.12.2009 14:30.
Jeśli wyskoczy Ci brak typu PComponent to zadeklaruj go sobie na górze *.pas'a
type PComponent = ^TComponent;
#10
Napisano 29.12.2009 15:46.
Incompatible types: 'TComponent' and 'PComponent'
Gdy zmieniłem tamta linijkę na taką bez wskaźnika:
Tform1.Create(TComponent( GetDesktopWindow() ));
To co prawda wtyczka się skompilowała ale po prostu nie działa, aqq ją ładuje i nic nawet błędu nie wyrzuca. Spróbuję jeszcze coś pogrzebać ale jeśli wiecie co jest nie tak będę wdzięczny
#11
Napisano 29.12.2009 16:13.
TForm.CreateParented(GetDesktopWindow());
#14
Napisano 03.01.2010 19:23.
Użytkownik UsagiAddict dnia 29.12.2009 18:01 napisał
A Delphi to nie kod natywny ? ;P
Zresztą jaki cel miałoby dołączanie C/C++, który ma praktycznie takie same możliwości po to, żeby użyc funkcji VCLa który jest biblioteką dla Delphi?
#16
Napisano 30.01.2010 14:06.
Cytat
SetWindowPos(Handle,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE);
I wszystko fajnie wychodzi na wierzch, ale focus ma dalej okienko pod wtyczką, dodawałem linijki typu Form1.setfocus; ale o dziwo to też nie nadaje wtyczce focusa, bawię się tym dalej ale jakbyście mieli jakiś pomysł to byłbym wdzięczny

Pomoc


Do góry

















