![]() |
Re: Titelleiste eines Fensters ausblenden
Es geht speziell um die Zeile:
Delphi-Quellcode:
Du hast die Schlüsselwörter and not verwendet. Dies ergibt nur Schmarn.
SetWindowLong (HMainWnd, GWL_STYLE, GetWindowLong (HMainWnd, GWL_STYLE) and not WS_CAPTION);
Wenn du aber nur or anwendest, kommt eine klare Ausführung zu Stande.
Delphi-Quellcode:
Cii jaa©$me
SetWindowLong (HMainWnd, GWL_STYLE, GetWindowLong (HMainWnd, GWL_STYLE) or WS_CAPTION);
graphicar |
Re: Titelleiste eines Fensters ausblenden
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!) |
Re: Titelleiste eines Fensters ausblenden
muss ich niko recht geben, mit "and not" sollten die Bits eigentlich entfernt werden..
|
Re: Titelleiste eines Fensters ausblenden
Zitat:
|
Re: Titelleiste eines Fensters ausblenden
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 |
Re: Titelleiste eines Fensters ausblenden
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:
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.
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; Man muss nur beachten, dass man wenn die Flags schon gesetzt sind, dass man sie sich vorher mit ![]() ![]() |
Re: Titelleiste eines Fensters ausblenden
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 |
Re: Titelleiste eines Fensters ausblenden
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz