Autor Beitrag
K.S.M.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82

Windows 7 Professional
Delphi 2010, HTML, JavaScript, CSS, PHP, ein wenig C, Flash ActionScript 2.0/3.0, SQL, Assembler
BeitragVerfasst: Di 27.04.10 17:39 
Hallo :)

Es gitb ja immer wieder Fenster, die eine eigene Title bar oben besitzen, die speziell aussieht ... Ich würde auch gern ein Fenster im eigenen Stil erstellen, allerdings weiß ich nicht wie man das macht.

Ich habe bisher nur herauskriegen können, dass man irgendwie diese Nachrichten abfangen muss:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
WM_NCCREATE
WM_NCCALCSIZE
WM_NCHITTEST
WM_NCLBUTTONDBLCLK
WM_NCLBUTTONDOWN
WM_NCPAINT
WM_NCACTIVATE


Kennt jemand von euch vlt ein Tutorial oder kann mir kurz erklären wie das geht?

Vielen Dank im Voraus :)

_________________
"Programmieren ist keine Kunst. Programmieren ist eine Fähigkeit!"
Webo
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 577
Erhaltene Danke: 14

Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
BeitragVerfasst: Di 27.04.10 17:45 
Suchst du so etwas ?

_________________
Man kann nur das aus dem Ärmel schütteln, was man auch vorher reingesteckt hat.
K.S.M. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82

Windows 7 Professional
Delphi 2010, HTML, JavaScript, CSS, PHP, ein wenig C, Flash ActionScript 2.0/3.0, SQL, Assembler
BeitragVerfasst: Di 27.04.10 19:00 
Nein, leider nicht ganz. Also Das der Fensterrand korrekt aussieht ist schonmal richtig, aber das kriege ich so wohl auch noch hin, ...

Ich hab folgendes problem: Ich suche ja eine voll funktionsfähige Title Bar die z. B. auch die Snap-Funktion unter Windows 7 erlaubt. Und das tut diese Mthode offensichtlich nicht. Deswegen dachte ich ja, das man eher auf die WMNC...-Nachrichten eingehen müsste.

_________________
"Programmieren ist keine Kunst. Programmieren ist eine Fähigkeit!"
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 28.04.10 05:48 
Das passiert dort bereits. Wenn die bisher behandelten Nachrichten für den Snap Effekt usw. nicht ausreichen, dann kannst du die entsprechenden doch einfach dort ergänzen (welche das dann sein könnten, weiß ich nicht, danach habe ich bisher nicht geschaut). ;-)
K.S.M. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82

Windows 7 Professional
Delphi 2010, HTML, JavaScript, CSS, PHP, ein wenig C, Flash ActionScript 2.0/3.0, SQL, Assembler
BeitragVerfasst: Mi 28.04.10 16:43 
Alles klar, vielen Dank. Müsste ich denn dann wieder eher nach WM_NC...-Nachrichten schauen?

_________________
"Programmieren ist keine Kunst. Programmieren ist eine Fähigkeit!"
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 28.04.10 19:32 
Das weiß ich nicht wie dieser Snap-Effekt realisiert wird. Ich vermute aber, dass das nicht allzuviel Aufwand ist, da das ja auch mit älteren Programmen funktioniert. Ich bin gerade mit Vista online, ich muss mal schauen ob ich nachher noch dazu komme das auszuprobieren. Ich habe u.a. berufsbedingt nicht gut Zeit, deshalb habe ich an dem Projekt auch schon lange nichts mehr gemacht, aber mal sehen. :nixweiss:

// EDIT:
Was mir aber gerade einfällt: Ich vermute einmal man muss während dem Snap evtl. das innere Fenster anpassen, damit es durchsichtig wird usw., das muss ich mal anschauen was da eigentlich passiert mit XStyle-Programmen.
K.S.M. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82

Windows 7 Professional
Delphi 2010, HTML, JavaScript, CSS, PHP, ein wenig C, Flash ActionScript 2.0/3.0, SQL, Assembler
BeitragVerfasst: Mi 28.04.10 23:09 
Wäre es denn nicht überhaupt eam einfachsten, das WM_NCPAINT-Ereignis abzufangen und dann eine Canvas zu schreiben, die auf das Non-Client-Windows-Handle zugreift? Bislang sieht mein Code so aus:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
  procedure TFrmMain.DrawTitleBar;
  var
    Canvas: TCanvas;
    TitleBarHeight: Integer;
  begin
    TitleBarHeight := GetSystemMetrics( SM_CYCAPTION ) + 8 + FAdditionalTop; { Ursprüngliche Titlebar-Höhe + 8-Pixel Fensterrand (köntne man auch noch abfragen...) + Die zusätzliche Höhe } 
    Canvas := TCanvas.Create;
    try
      Canvas.Handle := GetWindowDC( Handle );
      with Canvas do
        begin
          // Rote Titlebar
          Brush.Color := clRed;
          Rectangle( 00, Width, TitleBarHeight );
          // Blauer Rand
          Brush.Color := clBlue;
          // Links
          Rectangle( 0, TitleBarHeight, 8, Height );
          // Unten
          Rectangle( 0, Height - 8, Width, Height );
          // Rechts
          Rectangle( Width - 8, TitleBarHeight, Width, Height );
          // Clear
          Brush.Style := bsClear;
        end;
    finally
      Canvas.Free;
    end;
  end;

  procedure TFrmMain.WMNCPaint( var AMsg: TWMNCPaint );
  begin
    DrawTitleBar;
  end;

  procedure TFrmMain.WMNCCalcSize( var message: TWMNCCalcSize );
  begin
    inherited;
    FAdditionalTop := 17;
    Inc( message.CalcSize_Params^.rgrc[ 0 ].Top, FAdditionalTop );
  end;


Im Screenshot könnt Ihr sehen, wie es aussieht. Windows 7 erlaubt hier die Snap-Funktion. und der ganze rote Bereich kann wie eine Titlebar verwendet werden. Allerdings kriege ich die runden Ecken oben links und rechts nicht weg ...
Einloggen, um Attachments anzusehen!
_________________
"Programmieren ist keine Kunst. Programmieren ist eine Fähigkeit!"
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 29.04.10 14:19 
Das geht natürlich, setzt aber voraus, dass die Fenster auch dementsprechend vorbereitet sind. Das heißt im Gegensatz zu XStyleForm kann man das nicht einfach auf beliebige Fenster anwenden.

Wenn es damit geht, sollte es eigentlich aber auch mit XStyleForm gehen, aber ich vermute einmal da spielt die Weitergabe der Daten / Messages zwischen den beiden Fenstern einen Streich. Ich bin leider nicht dazu gekommen es mir anzuschauen...