Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - wsMaximized := - unter welchen Bedingungen ausgeführt?
Hidden - Di 29.04.08 15:59
Titel: wsMaximized := - unter welchen Bedingungen ausgeführt?
Hi,
Ich habe folgenden, skurrilen, Fall:
Wenn ich in einer Prozedur
myForm.WindowState := wsMaximized; verwende, wird dies nicht umgesetzt. Verwende ich dagegen eine Prozedur, in der am Ende
myForm.WindowState := wsMaximized; steht, wird maximiert :shock:
Beide Prozeduren sind Prozeduren desselben Objektes, diesbezüglich sollte es keine Schwierigkeiten geben...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure MyClass.MyProcedure1; begin doSomething; myForm.WindowState := wsMaximized; end;
procedure MyClass.MyProcedure2; begin self.MyProcedure1; end; |
Es wird noch ein stück skurriler: Wenn ich vor
myForm.WindowState := wsMaximized; ein
myForm.WindowState := wsNormal; setze, klappts...
Eigentlich habe ich da nur eine Deutungshypothese: Aus irgendeinem Grund ist ein setzen auf wsMax in dem Moment nicht erlaubt; der zusätzliche Befehl verbraucht Zeit und bis dahin hat Windows das Setzen wieder enabled.
Andere Ideen?
mfG,
jaenicke - Di 29.04.08 16:11
Das kann ich nicht nachvollziehen, ich habe eine neue Klasse erstellt mit deinem Quelltext, aber der tut (wie ich auch nicht anders erwartet habe ;-)) seinen Dienst. Kannst du vielleicht ein Beispielprogramm anhängen?
Hidden - Do 01.05.08 16:00
Hi,
Edit:Es liegt anscheinend doch noch an anderen Sachen: dieses Beispiel funktioniert...
Das ganze Programm veröffentlichen werde ich erstmal nicht, da überlege ich noch, ob es Freeware oder Open Source werden soll.
Insofern danke für die Mühe, wahrscheinlich kann mir ohne den kompletten Source dann niemand helfen.
Ich würde mal stark tippen, dass der Fehler durch meine Prozedur zum laden der Form-Einstellungen zustande kommt..
In der Prozedur, nach der ich WS setzen wollte, klappt es nämlich auch nicht!
Tschuldigung, dass ich diese, ausschlaggebende, Sache weggelassen habe... :oops:
Ändert einiges :wink:
Ich habe es jetzt so gelöst, dass ich einfach vor Windowstate := wsMaximized ein WindowState := wsNormal setze - damit gehts.
Die betreffende Codezeile hab ich mal markiert:
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: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95:
| unit mSpeicherObjekt;
interface
uses Types, Forms, mFormAnzahl;
type TArrangeForm = record Size: TRect; Visible: Boolean; WindowState: TWindowState; end; TArrangeForms = Array[FormIndex] of TArrangeForm;
procedure SaveLayOut(const aFileName: String); function TryLoadLayOut(const aFileName: String): Boolean; function GetFormArrangement: TArrangeForms; procedure ReadFormArrangement(const qArrangement: TArrangeForms);
implementation
uses SysUtils, mFormKommunikation;
procedure SaveLayOut(const aFileName: String); var F: File of TArrangeForm; Arrangement: TArrangeForms; i: FormIndex; begin Arrangement := GetFormArrangement; try AssignFile(F, aFileName); ReWrite(F); for i := 0 to FormAnzahl - 1 do Write(F, Arrangement[i]); finally CloseFile(F); end; end;
function TryLoadLayOut(const aFileName: String): Boolean; var F: File of TArrangeForm; Arrangement: TArrangeForms; i: FormIndex; begin result := FileExists(aFileName); if result then begin try AssignFile(F, aFileName); Reset(F); for i := 0 to FormAnzahl - 1 do Read(F, Arrangement[i]); finally CloseFile(F); end; ReadFormArrangement(Arrangement); end; end;
function GetFormArrangement: TArrangeForms; var i: FormIndex; Frm: PForm; begin for i := 0 to FormAnzahl - 1 do begin Frm := GlobalTraffic.Forms[i]; result[i].WindowState := Frm^.WindowState; Frm^.WindowState := wsNormal; result[i].Size := Rect(Frm^.Left, Frm^.Top, Frm^.Width, Frm^.Height); result[i].Visible := Frm^.Visible; Frm^.WindowState := result[i].WindowState; end; end;
procedure ReadFormArrangement(const qArrangement: TArrangeForms); var i: FormIndex; Frm: PForm; begin for i := 0 to FormAnzahl - 1 do begin Frm := GlobalTraffic.Forms[i]; Frm^.Left := qArrangement[i].Size.Left; Frm^.Top := qArrangement[i].Size.Top; Frm^.Width := qArrangement[i].Size.Right; Frm^.Height := qArrangement[i].Size.Bottom; Frm^.Visible := qArrangement[i].Visible; Frm^.WindowState := wsNormal; Frm^.WindowState := qArrangement[i].WindowState; end; end;
end. |
Edit:
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:
| type TArrangeForm = record Size: TRect; Visible: Boolean; WindowState: TWindowState; end; TForm1 = class(TForm) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject); var Arr: TArrangeForm; Frm: TForm; begin Frm := self; Arr.Size := Rect(0, 0, 300, 300); Arr.Visible := true; Arr.WindowState := wsMaximized; Frm.Left := Arr.Size.Left; Frm.Top := Arr.Size.Top; Frm.Width := Arr.Size.Right; Frm.Height := Arr.Size.Bottom; Frm.Visible := Arr.Visible; Frm.WindowState := Arr.WindowState; ShowMessage('Passiert'); end; |
mfG,
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!