AGB  ·  Datenschutz  ·  Impressum  







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

Minimieren geht nicht mehr

Ein Thema von Berni68 · begonnen am 24. Feb 2007 · letzter Beitrag vom 24. Feb 2007
Antwort Antwort
Berni68

Registriert seit: 9. Jan 2006
Ort: Villingen
162 Beiträge
 
Delphi XE5 Professional
 
#1

Minimieren geht nicht mehr

  Alt 24. Feb 2007, 18:57
Salü zusammen.

Hab nur ich ein Problem mit fogendem Programm, oder gibt es da ein prinzipielles Problem?
1. Programm starten und minimieren.
2. Programm nochmals starten. Wie erwartet wird die erste Instanz aktiviert.
Nur, jetzt läßt sich das Ding nicht mehr minimieren.

Delphi-Quellcode:
unit Unit1;
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
  TForm1 = class(TForm)
  private
  public
  end;
var
  Form1: TForm1;
  Handle: THandle;
implementation
{$R *.DFM}

initialization
begin
  Handle:= CreateMutex(nil, true, 'Form1');
  if GetLastError=ERROR_ALREADY_EXISTS then Halt;
end;
finalization
begin
  if Handle<>0 then CloseHandle(Handle);
  Handle:= FindWindowEx(0, 0, 'TForm1', nil);
  If Handle<>0 then begin
    if IsIconic(Handle)=true then showmessage('IsIconic'); // funktioniert NICHT
    if IsZoomed(Handle)=true then showmessage('IsZoomed'); // funktioniert, wird allerdings auch bei minimiertem Fenster angezeigt
    if IsWindowVisible(Handle)=false
      then SendMessage(Handle, WM_SYSCOMMAND, SC_RESTORE, Handle)
      else SendMessage(Handle, WM_SYSCOMMAND, SC_DEFAULT, Handle);
// ShowWindow(Handle, SW_SHOWMAXIMIZED); // gleiches Ergebnis minimieren nicht mehr möglich, wenns minimiert war.
    SetForegroundWindow(Handle);
  end;
end;
end.
Bernhard
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#2

Re: Minimieren geht nicht mehr

  Alt 24. Feb 2007, 19:00
also ich hab bemerkt (korigier mich wen ich falsch liegen sollte)

das man fenster nicht minimieren kann bevor sie komplett geladen worden sind...

Ich löse das problem immer etwas unschön mit einem timer:

setze den timer auf 1MS und gib ihm den befehl die Form zu minimieren und sich selbst danach zu disabeln das klappt bei mir zu 100%


grüsschen
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Berni68

Registriert seit: 9. Jan 2006
Ort: Villingen
162 Beiträge
 
Delphi XE5 Professional
 
#3

Re: Minimieren geht nicht mehr

  Alt 24. Feb 2007, 19:14
Das sollte nicht das Problem sein. Das Fenster des ersten Aufrufes ist ja komplett da, und das Fenster des zweiten Aufrufes ist zu diesem Zeitpunkt schon 'abgewürgt'.
Bernhard
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Minimieren geht nicht mehr

  Alt 24. Feb 2007, 19:49
Das Problem ist das du sicher nicht das Form minimieren willst sondern die ganze Application. Oder willst du nur ein Fenster minimieren so das es über der Taskleiste hängt?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Berni68

Registriert seit: 9. Jan 2006
Ort: Villingen
162 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Minimieren geht nicht mehr

  Alt 24. Feb 2007, 20:14
Also, jetzt muss ich vorsichtig werden. Könnte sein, daß das was damit zu tun hat, aber genaugenommen hab ich es nicht verstanden.

Also erklär ich mal was ich eigentlich will:
1. Das Programm soll nur einmal gestartet werden können.
2. Startet der Anwender das Programm nochmal soll die zuert gestartete Instanz
aktiviert werden, und zwar in dem Zustand wie sie den Focus abgegeben hat.

Ergebnis des Quelltextes:
zu 1. Funktioniert einwandfrei. (den Quelltext dazu hab ich allerdings auch nur hier im Forum abgeschrieben )
zu 2: Ist die Anwendung nur von einem anderen Programm verdeckt, funktioniert alles wie gewünscht, auch wenn 'meine'
Anwendung maximiert war.
War meine Anwendung, also der erste Aufruf, minimiert (was wohl häufig vorkommt: Fenster/Anwendung minimieren um zu
sehen was dahinterliegt) funktioniert das ganze ja auch noch: Die ursprüngliche Instanz wir wiederhergestellt und
erhät den Focus, läßt sich aber jetzt Nicht mehr minimieren. Wenn man auf den Butten in der Fensterleiste drückt,
passiert einfach nichts mehr

P.S. Konnte das Verhalten inzwischen auf einem anderen PC ausprobieren: genau das gleiche! d.h. der Quelltext macht die Anwendung kaputt!
Bin für jede Info dankbar
Bernhard
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Minimieren geht nicht mehr

  Alt 24. Feb 2007, 20:25
genau das was ich dachte. Wenn du bei deinem Form auf den minimieren-button klickst wird Applicaiton.Minimize ausgelöst (alle Forms werden somit minimiert). Wenn du aber mit deinen Messages nicht über das Application.Handle gehst passieren eben die tollen Effekte. Nimm einfach eine eigene Message und rufe beim Aufruf dieser Message Application.Restore auf.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Berni68

Registriert seit: 9. Jan 2006
Ort: Villingen
162 Beiträge
 
Delphi XE5 Professional
 
#7

Re: Minimieren geht nicht mehr

  Alt 24. Feb 2007, 22:06
Vielen Dank für den Hinweis. Jetzt funktioniert es wie es soll!

Delphi-Quellcode:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
const
    CM_aktivieren=WM_APP+400;
type
  TForm1 = class(TForm)
  private
    procedure CMtest(var Message: TMessage); message CM_aktivieren;
  public
  end;
var
  Form1: TForm1;
  Handle: THandle;
implementation
{$R *.DFM}
procedure TForm1.CMtest(var Message: TMessage);
begin
  Application.Restore;
end;
initialization
begin
  Handle:= CreateMutex(nil, true, 'Form1');
  if GetLastError=ERROR_ALREADY_EXISTS then Halt;
end;
finalization
begin
  if Handle<>0 then CloseHandle(Handle);

  Handle:= FindWindow(nil, 'Form1');
  SetForegroundWindow(Handle);
  SendMessage(Handle, CM_aktivieren, 0, Handle);
end;
end.
Wenn ich allerdings ganz ehrlich bin, hab ich die Lösung mehr durch probieren als durch Verstehen gefunden.
Aber was soll's, das Ergebnis zählt.
Jetzt muss ich 'nur' noch dafür sorgen, daß nicht der ganze Fenstertitel (meistens ja nicht vollständig bekannt) benötigt wird.
Bernhard
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Minimieren geht nicht mehr

  Alt 24. Feb 2007, 22:17
ok, ich versuchs das nächste mal verständlicher, eventuell mit Beispiel, zu formulieren.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:00 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