Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - borderIcons: [biSystemMenu,biMinimize,biMaximize]
bombilein - Di 31.08.04 17:05
Titel: borderIcons: [biSystemMenu,biMinimize,biMaximize]
hi,
welcher Event-handler ist für diese Border-Icons zuständig?
ich möchte z.b. das Maximieren in bestimmten Fällen unterdrücken.
Hab an das Event "OnCanResize" gedacht; dieser Versuch endete jedoch in einem Desaster :autsch:
Viper - Di 31.08.04 17:13
Hallo.
Das Event OnCanResize ist aber genau richtig, falls du das vergrößern oder verkleinern verhindern willst. Was ist denn dabei so schief gegangen? Schreib einfach mal den Code dazu, wo du die Probleme mit hattest.
bombilein - Di 31.08.04 17:30
Mein handler:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TfrmOrderView.FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean); begin
if(bcanResize) then begin if(not Controller.GetScenarioActive()) then begin Resize := False; end; end; end; |
Interessant ist auch noch dieses:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TfrmOrderView.FormCreate(Sender: TObject); begin bcanResize := False; WindowState := wsMinimized; end; |
D.h. ich minimieren das Fenster sofort in der Creation-Phase. Über den Objektinspektor hat es nur zu Problemen geführt.
Ich habe auch nicht nur dieses eine Formular, sondern insgesamt drei Stück.
Der Fehler ist jetzt folgender:
wenn ich auf den Button "maximiere" des Icons des Forms klicke, wird das Fenster maximiert.
zum einen werden die drei Buttons oben rechts angezeigt, zweitens wird unterhalb dem menü eine horizontale Linke von einigen cm Länge angezeigt.
habe gerade Screenshots angefertigt... aber ich habe kein webspace :(
bombilein - Di 31.08.04 17:55
Um die Auswirkungen noch deutlicher zu beschreiben:
wenn ich jetzt auf den "wiederherstell-icon" klicke, wird dieses durch das minimier-icon ausgetauscht. und das soll nicht geschehen.
Viper - Di 31.08.04 18:10
Hallo.
Wenn du möchtest, kannst du mir die Bilder via E-Mail schicken, dann stell ich sie Online.
Ich glaube aber, dass das nicht nötig ist. Wenn ich dich recht verstanden habe, möchtest du die drei Icons oben in der Formular-Leiste nicht angezeigt haben und das kannst du im Objektinspektor einstellen. Da gibt es die Eigenschaft Bordericons vom Formular. Dort kannst du einstellen, welche Icons angezeigt werden sollen, oder nicht.
bombilein - Di 31.08.04 18:16
Hi Viper,
das hatte ich auch schon probiert. Das Problem war jedoch, wenn ich alle icons ausblende und dann einen Doppelklick auf die Titelleiste tätige, schmiert das ganze Programm ab.
Aber an sich will ich die drei Icons schon haben; aber solange keine Datei geöffnet ist, sollen diese einfach keine Auswirkungen haben, sie sollen von mir per hand sozusagen abgefangen werden.
Email kommt gleich.
Motzi - Di 31.08.04 19:42
Einen Message-Handler für
WM_SYSCOMMAND schreiben und wParam auf SC_MAXIMIZE testen...
bombilein - Di 31.08.04 21:12
Danke MOtzi.
das war die Lösung. Es funktioniert jetzt einwandfrei mit nachstehendem Code.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TfrmOrderView.WMSysCommand(var Msg: tWMSysCommand); begin if(not Controller.GetScenarioActive()) then begin if(((Msg.CmdType and $FFF0) = SC_RESTORE) or ((Msg.CmdType and $FFF0) = SC_MAXIMIZE)) then begin ; end else DefaultHandler(Msg); end; end; |
aber ein paar kleine Fragen, damit ich nicht dumm sterben muss.
1. Wo finde ich mehr infos über "tWMSysCommand". in einer anderen doku als auch in der Delphi doku finde ich nur was über TMessage.
2. was bedeutet dies $FFF0! ich weiß gerade noch, dass das eine Zahl in hexdezimal-Darstellung ist.
Viper - Mi 01.09.04 11:52
Dann hat sich ja alles geklärt. Da wäre ich sowieso nie draug gekommen. :roll:
Die E-Mail kann ich dann ja einfach löschen!
Motzi - Mi 01.09.04 12:02
1) Informationen zu
WM_SYSCOMMAND und anderen Messages bekommst du im PSDK oder online im [url=
http://www.msdn.microsoft.com]MSDN[/url].
2) Diese And-Verknüpfung mit $FFF0 ist dazu da um die untersten 4 Bits des Parameters auszublenden, da diese intern von Windows verwendet werden. Würde man diese nicht ausblenden könnten sie das Ergebnis des Vergleichs verfälschen. Das SDK schreibt dazu:
PSDK hat folgendes geschrieben: |
In WM_SYSCOMMAND messages, the four low-order bits of the wParam parameter are used internally by the system. To obtain the correct result when testing the value of wParam, an application must combine the value 0xFFF0 with the wParam value by using the bitwise AND operator. |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!