Autor Beitrag
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Di 29.04.08 15:59 
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...

ausblenden 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
  //myForm.WindowState := wsMaximized;  //ändert nichts
  self.MyProcedure1;  //Funktioniert
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,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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.

ausblenden volle Höhe 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;  //Windows zickt sonst beim Maximieren
    Frm^.WindowState := qArrangement[i].WindowState;
  end;
end;

end.


Edit:

ausblenden volle Höhe 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(00300300);
  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 := wsNormal;  //Windows zickt sonst beim Maximieren
  Frm.WindowState := Arr.WindowState;
  ShowMessage('Passiert');
end;


mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)