AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Titelleiste eines Fensters ausblenden
Thema durchsuchen
Ansicht
Themen-Optionen

Titelleiste eines Fensters ausblenden

Ein Thema von Niko · begonnen am 13. Okt 2003 · letzter Beitrag vom 30. Jul 2004
Antwort Antwort
Seite 2 von 2     12   
graphicar
(Gast)

n/a Beiträge
 
#11

Re: Titelleiste eines Fensters ausblenden

  Alt 29. Jul 2004, 18:46
Es geht speziell um die Zeile:


SetWindowLong (HMainWnd, GWL_STYLE, GetWindowLong (HMainWnd, GWL_STYLE) and not WS_CAPTION); Du hast die Schlüsselwörter and not verwendet. Dies ergibt nur Schmarn.
Wenn du aber nur or anwendest, kommt eine klare Ausführung zu Stande.

SetWindowLong (HMainWnd, GWL_STYLE, GetWindowLong (HMainWnd, GWL_STYLE) or WS_CAPTION); Cii jaa©$me
graphicar
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Titelleiste eines Fensters ausblenden

  Alt 29. Jul 2004, 19:52
Hi,

wenn ich or verwende füge ich die Konstante (bzw. das entsprechende Bit) ja hinzu. Da ich WS_CAPTION aber entfernen will muss ich doch and not verwenden.

(Verbessert mich bitte wenn ich hier falsch liege!)
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Titelleiste eines Fensters ausblenden

  Alt 29. Jul 2004, 20:01
muss ich niko recht geben, mit "and not" sollten die Bits eigentlich entfernt werden..
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Titelleiste eines Fensters ausblenden

  Alt 29. Jul 2004, 23:27
Zitat von Niko:
@Luckie:
So funktioniert's, wenn ich aber WS_POPUP weggelassen habe ging es nicht mehr und ich weiß nicht, warum.
Nun ja, was soll ich dazu sagen. WS_POPUP hat eben den Effekt, den du wünscht. Damit erreichst du doch dein Ziel. Was willst du mehr? Das verstehe ich jetzt nicht ganz.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
graphicar
(Gast)

n/a Beiträge
 
#15

Re: Titelleiste eines Fensters ausblenden

  Alt 30. Jul 2004, 11:19
Hmm, das ärgert mich aber langsam. Eurer and not ist falsch. Ich habe
diese Nacht mit einem Studenten für Elektrotechnik und einem für
technische Informatik darüber diskutiert. Sie meinen es gibt gewisse
Vorschiften nach denen dort kein and stehen darf, bzw. muss es anders
positioniert/kombiniert werden. Eure Programme schmieren jedes Mal
ab und der Monitor macht störende Bildschirmfehler. Dennoch klammert
ihr euch immernoch an falsche Befehle. Jedem das seine.

BEISPIEL:

Hier nun ein vollständiges Beispiel, was Fensterstil-Parameter addiert
und subtrahiert. Addition mit "or" und Substration von Parametern mit
"xor". "WS_CAPTION" ist ein schlechtes Anschauungsbeispiel. Ich habe
daher als Beispiel "WS_SIZEBOX" genommen. Damit man sieht, dass die
Befehlsreihe richtig ausgeführt werden. Und jeder auf die Richtigkeit der
Befehle bauen und damit nun seine Ideen realisieren kann. "WS_SIZEBOX"
stellt die Möglichkeit dar, mit der Maus die Fenstergröße zu ändern.


Delphi-Quellcode:
[...]

// HAUTPROGRAMM.
/////////////////

var
  FormMain_hWnd : DWord; // Handle-Variable für das Fenster.
  FormMain_style : Cardinal; // Ausleseort für den jeweils aktuellen Fensterstil.

[...]

// Erstellung eines Standardfensters.
  FormMain_hWnd := CreateWindowEx (0, ClassName, AppName, WS_CAPTION or WS_VISIBLE or WS_SYSMENU,
                     CW_USEDEFAULT, CW_USEDEFAULT, WindowWidth, WindowHeight, 0, 0,
                     hInstance, nil);

// Akutalisierung der Stil-Variable des Fensters.
  FormMain_style := GetWindowLong(FormMain_hWnd, GWL_STYLE);

[...]

// NACHRICHTENSCHLEIFE.
////////////////////////
// Es werden zwei Buttons benötigt, die als Konstanten
// IDC_BUTTON und IDC_BUTTON2 gesetzt haben.
///////////////////////////////////////////////////

IDC_BUTTON : Begin

                // Aus dem Fensterstil wird die Eigenschaft "WS_SIZEGROUP" entfernt.
                  SetWindowLong(FormMain_hWnd, GWL_STYLE, FormMain_style xor WS_SIZEBOX);

                // Akutalisierung der Stil-Variable des Fensters.
                  FormMain_style := GetWindowLong(FormMain_hWnd, GWL_STYLE);

              End;
IDC_BUTTON2 : Begin

                // Setzung einer weiteren Fenstereigeneschaft: Fenster wird größenveränderbar.
                  SetWindowLong(FormMain_hWnd, GWL_STYLE, FormMain_style or WS_SIZEBOX);

                // Akutalisierung der Stil-Variable des Fensters.
                  FormMain_style := GetWindowLong(FormMain_hWnd, GWL_STYLE);

              End;

[...]


Mag sein, dass sich Windows bei Veränderungen von Grundparametern wie WS_CAPTION
während der Lautzeit ein wenig krumm stellt. Mag sein, dass diese Theorie nie praktisch
umsetzbar sein wird. Jedenfalls klappt mein Weg. Sekundäre Parameter lassen sich gut
damit editieren. Nehme den Tipp von Luckie, erstelle gewisse Einstellungen während der
Entwicklung und den Rest während der Laufzeit.

Cii jaa©$me
graphicar
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Titelleiste eines Fensters ausblenden

  Alt 30. Jul 2004, 11:36
Also bei allen Respekt, Fensterstile habe ich bisher unter Delphi immer mit and not gelöscht und ich hatte nie Probleme. Und das es so auch richtig ist zeigt folgendes Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Dummy: DWORD;
begin
  Dummy := WS_POPUP;
  Showmessage(IntToStr(dummy));
  Dummy := WS_POPUP or WS_CAPTION;
  Showmessage(IntToStr(dummy));
  Dummy := dummy xor WS_CAPTION;
  Showmessage(IntToStr(dummy));
end;
Zum Schluss hat dummy wieder den ursprünglichen Wert. Mit xor mag es auch gehen, aber üblicherweise löscht man in Delphi mit and not ein Bit.

Man muss nur beachten, dass man wenn die Flags schon gesetzt sind, dass man sie sich vorher mit MSDN-Library durchsuchenGetWindowLong holt und dann bei MSDN-Library durchsuchenSetwindowlong einsetzt und dann das Flag mit and not entfernt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
graphicar
(Gast)

n/a Beiträge
 
#17

Re: Titelleiste eines Fensters ausblenden

  Alt 30. Jul 2004, 11:51
Der Respekt sei dir erbracht. Gut dass du das gesagt hattest.
Bis jetzt hatte ich niemanden der einen Kommentar dafür abgab,
dass etweilger Quellcode bei ihm funktioniert hätte.

Gut, dann nehme ich natürlich meine Aussage zurück. Für alle
weiteren User die das hier lesen, verwendet [and not] oder [xor].
Falls die eine Variante nicht klappt, dann nehmt die andere.

Luckie, ich habe eine alte Delphiversion, kommen daher vielleicht
die Differenzen in der Ausführung beider Befehle? *grübel,grübel*

Cii jaa©$me
graphicar
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#18

Re: Titelleiste eines Fensters ausblenden

  Alt 30. Jul 2004, 20:37
xor und and not sind äquivalent, vorausgesetzt, dass das Bit das man entfernen möchte auch wirklich enthalten ist, sonst wird es durch xor gesetzt. Bei and not kann man sich darauf verlassen, dass es hinterher weg ist.

Code:
a := 00101000
b := 00001000


a and not b =
00101000 and not 00001000 = | Umkehren von b
00101000 and    11110111 = | überall da 1 setzen, wo in beiden Operanden 1, sonst 0
00100000


a xor b =
00101000 xor 00001000 = | überall da 1 setzen, wo in genau einem Operanden 1, sonst 0
00100000
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 14:59 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