AGB  ·  Datenschutz  ·  Impressum  







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

Über leiste minimieren

Ein Thema von DeMo · begonnen am 5. Apr 2004 · letzter Beitrag vom 29. Mai 2004
Antwort Antwort
DeMo

Registriert seit: 11. Mär 2004
29 Beiträge
 
#1

Über leiste minimieren

  Alt 5. Apr 2004, 09:32
Hoi leude

Also ich möchte ien Prog schreiben! Das ebi einen Doubleclick auf die Leiste des Programs sich minimiert also das dann nur noch die Leiste zu sehen ist ! Halt so wie bei Winamp und Trillian z.B.;

Wie stelle ich das an ? Normalerweise Maximiert das prog ja wen man Doubleclick auf die Leiste macht !
Danke im vorraus !

MFG DeMo
-==[Free Your Mind]==-
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Über leiste minimieren

  Alt 5. Apr 2004, 17:31
Moin DeMo,

Du fängst die entsprechenden Messages ab (WM_SYSCOMMAND mit SC_MAXIMIZE, und WM_NCLBUTTONDBLCLK) und leitest ein WM_SYSCOMMAND mit SC_MINIMIZE weiter.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Smokey
Smokey

Registriert seit: 10. Nov 2003
Ort: Puerto de la Cruz
158 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Über leiste minimieren

  Alt 5. Apr 2004, 17:36
Das ist genau die Antwort, die ein Neueinsteiger braucht um klarzukommen
Greif dir ein gutes Stück Fleisch auf deinem Weg nach draussen !!!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Über leiste minimieren

  Alt 5. Apr 2004, 17:39
Moin Smokey,

Zitat von Smokey:
Das ist genau die Antwort, die ein Neueinsteiger braucht um klarzukommen
und woraus schliesst Du, dass DeMo ein solcher ist
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
DeMo

Registriert seit: 11. Mär 2004
29 Beiträge
 
#5

Re: Über leiste minimieren

  Alt 29. Mai 2004, 10:57
also der smokey hat schon recht ich bin ein neueinsteiger und ich bräuchte eine etwas plausieblere erklärung ^^
aba trotzdem danke wengisten weiß ich jetzt schon was! trotsdem weiß ich nicht wie ich die nachrichten abfangen soll und was ich mit dennen anfangen soll !
mfg DeMo
-==[Free Your Mind]==-
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Über leiste minimieren

  Alt 29. Mai 2004, 14:15
Moin DeMo,

dann will ich mal mein Glück versuchen

Ganz allgemein:
Um Messages abzufangen, die an ein Fenster gesendet werden, kann man die WndProc (Window Procedure) überschreiben, und dann dort alles filtern und entsprechend reagieren, wie man es gerne hätte.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure WndProc(var msg : TMessage); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WndProc(var msg: TMessage);
begin
  // Message WM_SYSCOMMAND abfangen
  if msg.Msg = WM_SYSCOMMAND then begin
    // Wenn Maximiert werden soll
    if msg.WParam = SC_MAXIMIZE then begin
      // auf minimiert umschalten
      msg.WParam := SC_MINIMIZE;
    end;
  end else begin
    // Doppelclick auf die Titelleiste?
    if msg.Msg = WM_NCLBUTTONDBLCLK then begin
      // dann die Message auf mimimieren ändern
      msg.Msg := WM_SYSCOMMAND;
      msg.WParam := SC_MINIMIZE;
    end;
  end;
  // WICHTIG:
  // Die eigentliche WndProc mit den ggf. geänderten
  // Werten aufrufen
  inherited;
end;
Eine andere Möglichkeit, vielleicht etwas übersichtlicher, ist es sich direkt für die verschiedenen Messages Verarbeitungsmethoden anzulegen:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure WMSysCommand(var msg : TMessage); message WM_SYSCOMMAND;
    procedure WMNclButtonDblClk(var msg : TMessage); message WM_NCLBUTTONDBLCLK;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WMNclButtonDblClk(var msg: TMessage);
begin
  // Wenn ein Doppelclick auf die Titelzeile erkannt wird
  // Minimieren anfordern
  SendMessage(self.Handle,WM_SYSCOMMAND,SC_MINIMIZE,0);
  // WICHTIG:
  // Hier darf nicht die Messageverarbeitung mit inherited aufgerufen werden,
  // da die urprüngliche Message dann nicht unterdrückt wird.
end;

procedure TForm1.WMSysCommand(var msg: TMessage);
begin
  // Wenn Maximierung angefordert wird auf minimieren ändern
  if msg.WParam = SC_MAXIMIZE then msg.WParam := SC_MINIMIZE;
  // und weiterverarbeiten
  inherited;
end;
Anmerkung:
In einer Methode entspricht self immer dem Objekt zu dem die Methode gehört. Hier sind es Methoden des Objektes Form1, so dass self.Handle das Handle des Formulares Form1 enthält.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
DeMo

Registriert seit: 11. Mär 2004
29 Beiträge
 
#7

Re: Über leiste minimieren

  Alt 29. Mai 2004, 15:35
danke sehr, hast mir wirklich geholfen ! !

werde es gleich mal ausprobieren !

mfg DeMo
-==[Free Your Mind]==-
  Mit Zitat antworten Zitat
DeMo

Registriert seit: 11. Mär 2004
29 Beiträge
 
#8

Re: Über leiste minimieren

  Alt 29. Mai 2004, 16:32
so ich habe es ausprobiert ! und bei der ersten Variante gab es ein Fehler doch die zweite geht einwandfrei ,doch leider ist es nicht ganz das was ich wollte !

Also hier nochmal was ich will!

Beim doppelklick auf die Leiste des programms soll das programm net in die WindowsLeiste minimiert werden sondern, von dem programm soll dann halt nur die Leiste zusehen sein! Aba das nciht weiter schlimm da ich durch deine hilfe es jetzt so auch hinbekomme hier der code:

Delphi-Quellcode:
procedure TForm1.WMNclButtonDblClk(var msg: TMessage);
begin
 if Form1.ClientHeight = 114 then begin
    Form1.ClientHeight:= 0;
 end else begin
    Form1.ClientHeight:= 114;
 end;
end;

Also danke nochmal
-==[Free Your Mind]==-
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#9

Re: Über leiste minimieren

  Alt 29. Mai 2004, 17:05
Der Code ist gut, allerdings funktioniert er nicht mehr einwandfrei, wenn du die Größe des Formulars änderst. Deshalb könntest du auch folgendes verwenden:
Delphi-Quellcode:
procedure TForm1.WMNclButtonDblClk(var msg: TMessage);
begin
  if ClientHeight > 0 then
  begin
    Tag := ClientHeight;
    ClientHeight:= 0;
  end
  else
    ClientHeight:= Tag;
end;
In den Routinen für Form1 brauchst du das Form1. nicht explizit zu schreiben, der Compiler erledigt das für dich.
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  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 18:58 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