AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fenster nicht minimieren

Ein Thema von Optiplex · begonnen am 28. Okt 2008 · letzter Beitrag vom 7. Nov 2008
Antwort Antwort
Seite 3 von 4     123 4      
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#21

Re: Fenster nicht minimieren

  Alt 31. Okt 2008, 10:02
OK jfheins,
dass es so schwierig wird, habe ich mir am Anfang nicht vorgestellt. Werde am Wochenende mich mit deinem Code mal ausführlich auseinandersetzen. Melde mich spätestens am Montag wieder bei dir, hoffentlich mit einem positiven Ergebnis.

Falls jemand noch eine andere Idee hat, ich bin für jeden Einfall dankbar.

Gruss Optiplex
  Mit Zitat antworten Zitat
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#22

Re: Fenster nicht minimieren

  Alt 3. Nov 2008, 12:27
Hallo jfheins,

mir ist es nicht gelungen diese Message mit deinem Code abzufangen, irgendwie steht ich da auf dem Schlauch. Ich gehe davon aus, dass

begin // Change WndProc
OldWndProc := SetWindowLong({Handle}, GWLP_WNDPROC, @NewWndProc);
end;

in der Create des Formulars steht und

function NewWndProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
if ({Message})
// Handle Message
else // Call old WndProc
CallWindowProc(OldWndProc, hWnd, uMsg, wParam, lParam);
end;

als eigenständige Funktion im Implementation teil ist.

So und nun habe ich das Problem die Message genau zu deklarieren und abzufangen, vielleicht kannst du mir da nochmal helfen

Danke und Gruss Optiplex
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#23

Re: Fenster nicht minimieren

  Alt 3. Nov 2008, 12:49
Hi,

schau doch mal hier Bild auf Desktop überlagern damit tut das.

cu

Oliver

[edit]hmmm, irgendwie doch nicht ... ich habe da ein kleines projekt realisiert, das immer im vordergrund bleibt und sich auch nicht von diesem minimieren beeindrucken lässt, ich schau nochmal nach, warum das so reagiert[/edit]

[edit2]so ich habe jetzt mal mein kleines DemoProjekt hier platziert, das angezeigte Fenster ist durchklickbar, always OnTop (auch bei Bildschirmschoner, TaskManager) und lässt sich auch nicht minimieren[/edit2]

[edit3]für alle die es interessiert, dieses benötige ich für ein Netzwerk-Überwachungs-Proggie, das die Netzwerkverbindung von Filialen zur Zentrale überwacht, und bei entsprechenden Störungen an allen Arbeitsplätzen diese Hinweise einblendet. Damit kann das Telefonaufkommen in der Zentrale entscheidend verringert werden (die Betonung liegt aber hier auf "kann") [/edit3]
Miniaturansicht angehängter Grafiken
transform-screenshot_290.png  
Angehängte Dateien
Dateityp: zip transform_126.zip (963,3 KB, 16x aufgerufen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#24

Re: Fenster nicht minimieren

  Alt 4. Nov 2008, 12:37
Hallo Oliver,
danke für das Beispiel, aber leider kann man dieses Fenster micht mehr mit der Maus ansprechen, ich gehe davon aus, dass dies von der Transparentz kommt, diese schein mir auch dafür verantwortlich zu sein, dass der 'Button Desktop' anzeigen in der Taskbar das Fenster nicht erreicht. Die Lösung ist soweit gut, nur müsste mein Fenster Mausklicks registrieren. Hast du dafür auch eine Lösung perat.

Dieter
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#25

Re: Fenster nicht minimieren

  Alt 4. Nov 2008, 12:58
Zitat von Optiplex:
Hallo jfheins,

mir ist es nicht gelungen diese Message mit deinem Code abzufangen, irgendwie steht ich da auf dem Schlauch. Ich gehe davon aus, dass

...

in der Create des Formulars steht und

...
als eigenständige Funktion im Implementation teil ist.
Korrekt. Außerdem ist OldWndProc eine globale Variable (oder ein Feld im private teil des Forms)

Zitat:
So und nun habe ich das Problem die Message genau zu deklarieren und abzufangen, vielleicht kannst du mir da nochmal helfen

Danke und Gruss Optiplex
Du solltest eine Konstante definierenconst DTM_RAISE = WM_USER + 83; und dann prüfen
Delphi-Quellcode:
if (uMsg = DTM_Raise)
// Handle Message
else // Call old WndProc
CallWindowProc(OldWndProc, hWnd, uMsg, wParam, lParam);
end;
Wenns nicht geht: wird die Funktion überhaupt aufgerufen? (Breakpoint rein und Desktop anzeigen)

Kann aber auch sein, dass es ne sackgasse ist ...
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#26

Re: Fenster nicht minimieren

  Alt 4. Nov 2008, 19:30
Hi Dieter,
Zitat von Optiplex:
Hallo Oliver,
danke für das Beispiel, aber leider kann man dieses Fenster micht mehr mit der Maus ansprechen, ich gehe davon aus, dass dies von der Transparentz kommt, diese schein mir auch dafür verantwortlich zu sein, dass der 'Button Desktop' anzeigen in der Taskbar das Fenster nicht erreicht. Die Lösung ist soweit gut, nur müsste mein Fenster Mausklicks registrieren. Hast du dafür auch eine Lösung perat.

Dieter
du brauchst in meinem Beispiel-Code nur die Zeile im TMsg.OnCreate mit SetWindowLog( ... ) auskommentieren, denn das sorgt für die "Durchklickbarkeit"

Ich lade aber nochmal eine überarbeitete Version hoch, da kann man dann über das PopUp die "Durchklickbarkeit" ein- und ausschalten.

cu

Oliver
Angehängte Dateien
Dateityp: zip transform_110.zip (504,6 KB, 20x aufgerufen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#27

Re: Fenster nicht minimieren

  Alt 5. Nov 2008, 09:27
hallo jfheins,
habe esst gestern Abend ausprobiert, bin aber bei @NewWndProc in FormCreate hängen geblieben ich bekam den Fehler
[Fehler] E2036 Variable erforderlich,. Weist du welche Variable gemeint ist und wie und wo ich diese deklarieren muss?
Ich habe auch probiert die NewWndProc eingenständig ohne sie im Private teil anzugeben, hier bekomme ich noch den Fehler,
dass die Typen Pointer und Integer nicht kombatibel sind. Kann dir deshalb nicht sagen ob die function überhaupt aufgerufen wird.

const DTM_Raise=WM_User+83;

type
TForm2 = class(TForm)
private
function NewWndProc(hWnd:HWND;uMsg:Uint;wparam:WParam;lPara m:LPARAM):Lresult;
end;
var
Form2: TForm2;
OldwndProcointer;

implementation

procedure TForm2.FormCreate(Sender: TObject);
begin

OldwndProc:=Setwindowlong(self.Handle,GWL_WNDPROC, @NewWndProc);

end;

function TForm2.NewWndProc(hWnd:HWND;uMsg:Uint;wparam:WPara m;lParam:LPARAM):Lresult;
begin
if (uMsg=DTM_RAISE) then begin
sleep(3000);
end else CallwindowProc(Oldwndproc,hwnd,umsg,wparam,lparam) ;

end;


Hallo Oliver,
wenn die Transparent nicht am diesem Verhalten schuld ist, was bewirkt dann, dass dein Fenster für Win+D bzw Win+M tasten scheinbar unempfindlich ist, erklärs mir bitte. Ich kann nämlich keine besonderen Messageaufrufe in deinem Code erkennen, er funktioniert aber.

gruss Dieter

Gruss Optiplex
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#28

Re: Fenster nicht minimieren

  Alt 5. Nov 2008, 10:32
1. sein code verwendent, soweit ich das sehe, einen Timer der das Formular immer wieder in den vordergrund holt (topmost)

2. Zu meiner alternative:

newwndproc darf keine methode des forms sein

Das handle musst du ermitteln, und nicht dein eigenes nehemn !!

mach dir statt dem sleep erstmal nen breakpoint rein

Delphi-Quellcode:
   
   handle = FindWindow("Progman", "Program Manager");

    Oldwndproc = Setwindowlong(handle, GWL_WNDPROC, NewWndProc);
Mit den Delphi-Tags wird dein code übrigens wesentlich besser lesbar

Pointer und Integer kannst du casten

Wenn ich Delphi hätte, könnte ich das Beispiel überprüfen, aber das ist alles aus dem Kopf im Browser geschrieben
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#29

Re: Fenster nicht minimieren

  Alt 5. Nov 2008, 10:54
Zitat von Optiplex:
wenn die Transparent nicht am diesem Verhalten schuld ist, was bewirkt dann, dass dein Fenster für Win+D bzw Win+M tasten scheinbar unempfindlich ist, erklärs mir bitte. Ich kann nämlich keine besonderen Messageaufrufe in deinem Code erkennen, er funktioniert aber.
Zitat von jfheins:
1. sein code verwendent, soweit ich das sehe, einen Timer der das Formular immer wieder in den vordergrund holt (topmost)
Nein, daran liegt es nicht ... ich musste aber gerade selber erst nachsehen, woran das liegt ...

1. MainForm.Hide
2. SubForm.FormStyle := fsStayOnTop

In der Kombination wird die SubForm nicht minimiert.

cu

Oliver
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#30

Re: Fenster nicht minimieren

  Alt 5. Nov 2008, 12:41
Zitat von jfheins:
Pointer und Integer kannst du casten
jfheins was meinst du mit casten? das andere habe ich verstanden und werde es testen.




Zitat von Sir Rufo:
1. MainForm.Hide
2. SubForm.FormStyle := fsStayOnTop

In der Kombination wird die SubForm nicht minimiert.
Oliver das würde aber bedeuten, dass wenn der Topmost geändert wird, die Form wieder minimiert bzw ausgeblendet wird und wie ich am Anfang von diesem Thema beschrieb sollte das Formular direkt auf dem Desptop liegen.


Dieter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz