AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Rand eines Windows nicht anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

Rand eines Windows nicht anzeigen

Ein Thema von 3_of_8 · begonnen am 27. Jan 2006 · letzter Beitrag vom 4. Feb 2007
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Rand eines Windows nicht anzeigen

  Alt 27. Jan 2006, 21:17
Delphi-Quellcode:
  with wndClass do // Setup der Fenster Klasse
  begin
    style := CS_HREDRAW or // Neuzeichenen wenn Fenster-Breite geändert
                     CS_VREDRAW or // Neuzeichenen wenn Fenster-Höhe geändert
                     CS_OWNDC; // Device Context exlusiv
    lpfnWndProc := @WndProc; // WndProc wird als Window Procedure gesetzt
    hInstance := h_Instance;
    hCursor := LoadCursor(0, IDC_ARROW);
    lpszClassName := 'OpenGL';
  end;

  if (RegisterClass(wndClass) = 0) then // Fenster Klasse registrieren
  begin
    MessageBox(0, 'Failed to register the window class!', 'Error', MB_OK or MB_ICONERROR);
    Result := False;
    Exit
  end;

  dwStyle := WS_OVERLAPPEDWINDOW or // Überschneidung zulassen
             WS_CLIPCHILDREN or // Kein Zeichnen in Child Fenstern
             WS_CLIPSIBLINGS; // Kein Zeichnen in Sibling Fenstern
  dwExStyle := WS_EX_APPWINDOW or // Fenster im Fordergrund
               WS_EX_WINDOWEDGE; // Erhobener Rand

  // Das oben definierte Fenster wird erstellt
  h_Wnd := CreateWindowEx(dwExStyle, // Erweiterter Fenster Stil
                          'OpenGL', // Name der Klasse
                          PChar(WindowTitle), // Fenster Titel (caption)
                          dwStyle, // Fenster Stil
                          0, 0, // Fenster Position
                          Width, Height, // Größe des Fensters
                          0, // Keine Paren-Windows
                          0, // Kein Menü
                          h_Instance, // die Instanz
                          nil);
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Rand eines Windows nicht anzeigen

  Alt 27. Jan 2006, 21:20
Zitat:
WS_OVERLAPPED
Creates an overlapped window. An overlapped window has a title bar and a border. Same as the WS_TILED style.

WS_OVERLAPPEDWINDOW
Creates an overlapped window with the WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX, and WS_MAXIMIZEBOX styles. Same as the WS_TILEDWINDOW style.
Ergo die nötigen Stile einzeln setzen und WS_BORDERR weglassen. BTW fällt auf dass WS_OVERLAPPEDWINDOW den Stil WS_THICKFRAME beinhaltet.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Rand eines Windows nicht anzeigen

  Alt 27. Jan 2006, 21:21
Jetzt bitte nochmal die Version für dumme Normalsterbliche wie mich.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#14

Re: Rand eines Windows nicht anzeigen

  Alt 27. Jan 2006, 21:26
Delphi-Quellcode:
var
  dwExStyle, dwStyle: Cardinal;
begin
  dwExStyle := GetWindowLong(hWnd, GWL_EXSTYLE);
  SetWindowLong(hWnd, GWL_EXSTYLE, dwExStyle and not WS_EX_APPWINDOW);
  dwStyle := GetWindowLong(hWnd, GWL_STYLE);
  SetWindowLong(hWnd, GWL_STYLE, dwStyle and not WS_OVERLAPPEDWINDOW);
end;
Naja, eigentlich Quatsch dafür 2 Variablen zu nehmen, aber naja
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Rand eines Windows nicht anzeigen

  Alt 27. Jan 2006, 21:27
Und wie geht das ganze jetzt auch nach dem Erstellen des Fensters? So wie bei der VCL?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#16

Re: Rand eines Windows nicht anzeigen

  Alt 27. Jan 2006, 21:29
Ja, hab ich doch geschrieben
Für hWnd einfach das Handle von deinem Fenster einsetzen.
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Rand eines Windows nicht anzeigen

  Alt 27. Jan 2006, 21:40
Jo, geht. Hab das irgendwie falsch verstanden. ^^ Ich und WinAPI.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#18

Re: Rand eines Windows nicht anzeigen

  Alt 28. Jan 2006, 02:10
Zitat von 3_of_8:
Jo, geht. Hab das irgendwie falsch verstanden. ^^ Ich und WinAPI.
kleiner Tip ... dann lasse es sein !!
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Rand eines Windows nicht anzeigen

  Alt 28. Jan 2006, 09:59
Ich brauche das nur für OpenGL. Da ist die Initialisierung mit WinAPI noch das kleinste Problem.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
informix05
(Gast)

n/a Beiträge
 
#20

Re: Rand eines Windows nicht anzeigen

  Alt 31. Jan 2007, 12:59
Zitat von 3_of_8:
Ich habe ein Fenster erstellt.

Davon will ich jetzt den Rand verstecken, so wie bei TForm.borderstyle:=bsNone;

Aber ich finde die passenden Messages nicht. Wie mache ich das?
Hallo,

du möchtest wahrscheinlich ein rand- und titelleistenloses Fenster haben, dass aber trotzdem verschieb- und skalierbar bleibt.

- Im uses-Teil muss die Unit "Messages" enthalten sein.

- Die Eigenschaft "BorderStyle" deines Fenster muss auf "bsNone" gesetzt werden (auch zur Laufzeit möglich).

- Im Deklarationsteil deiner TForm-Klasse im private-Abschnitt ist folgende Prozedur einzufügen, die Windows-Mausbotschaften ans Fenster abfängt:

procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;

- Im Implementations-Teil fügst du folgenden Quelltext ein:

Delphi-Quellcode:
procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
const
   BORDER_WIDTH = 5;
begin
   inherited;
   if M.Result = htClient then begin // Mauszeiger im Client-Bereich des Fensters
      // Windows vorgaukeln, Mauszeiger wäre auf Titelleiste des Fensters
      // ==> Fenster ohne Titelleiste kann durch Klick & Drag im Client-Bereich verschoben werden
      M.Result := htCaption;
      // falls Mauszeiger am nicht vorhandenen Fensterrand
      // ==> Windows vorgaukeln, Rand wäre vorhanden
      // ==> Fenster (BorderStyle = bsNone) kann trotzdem skaliert werden
      if (M.XPos > Left) and (M.XPos < Left + BORDER_WIDTH) then begin
         // Mauszeiger am linken Rand
         M.Result := htLeft;
         if (M.YPos > Top) and (M.YPos < Top + BORDER_WIDTH) then begin
            // Mauszeiger an Ecke oben links
            M.Result := htTopLeft;
         end else begin
            if (M.YPos < Top + Height) and (M.YPos > Top + Height - BORDER_WIDTH) then begin
               // Mauszeiger an Ecke unten links
               M.Result := htBottomLeft;
            end
         end;
      end else begin
         if (M.XPos < Left + Width) and (M.XPos > Left + Width - BORDER_WIDTH) then begin
            // Mauszeiger am rechten Rand
            M.Result := htRight;
            if (M.YPos > Top) and (M.YPos < Top + BORDER_WIDTH) then begin
               // Mauszeiger an Ecke oben rechts
               M.Result := htTopRight;
            end else begin
               if (M.YPos < Top + Height) and (M.YPos > Top + Height - BORDER_WIDTH) then begin
                  // Mauszeiger an Ecke unten rechts
                  M.Result := htBottomRight;
               end
            end;
         end else begin
            // Mauszeiger innerhalb linker u. rechter Rand
            if (M.YPos > Top) and (M.YPos < Top + BORDER_WIDTH) then begin
               // Mauszeiger am oberen Rand
               M.Result := htTop;
            end else begin
               if (M.YPos < Top + Height) and (M.YPos > Top + Height - BORDER_WIDTH) then begin
                  // Mauszeiger am unteren Rand
                  M.Result := htBottom;
               end
            end;
         end;
      end;
   end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 02: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