Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Fenstergröße beibehalten


Delete - Di 02.04.19 20:19
Titel: Fenstergröße beibehalten
- Nachträglich durch die Entwickler-Ecke gelöscht -


Gausi - Mi 03.04.19 09:42

Bringt es etwas, bei den Eigenschaften der Form bei Constraints was einzutragen?


Delete - Mi 03.04.19 13:07

- Nachträglich durch die Entwickler-Ecke gelöscht -


Delete - Mi 03.04.19 19:06

- Nachträglich durch die Entwickler-Ecke gelöscht -


Sinspin - Do 04.04.19 12:09

Das sollte sich via überschreiben der WindowProc machen lassen.
Du reagierst dann auf die Events und verhinderst dass die orginal aktion in der orginal WindowProc ausgeführt wird. Für alle anderen Ereignisse rufst das Orginal auf.


Delete - Do 04.04.19 13:01

- Nachträglich durch die Entwickler-Ecke gelöscht -


Chiyoko - Do 04.04.19 13:09


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
        protected override void WndProc(ref Message m) 
        {
            switch (m.Msg)
            {
                case WM_WINDOWPOSCHANGING :
                case WM_WINDOWPOSCHANGED:
                    // Do Nothing...
                    break;   
                Default:
                    base.WndProc(ref m);
            }
        }


Delete - Do 04.04.19 14:20

- Nachträglich durch die Entwickler-Ecke gelöscht -


Sinspin - Do 04.04.19 14:22

Kann es sein dass ich dich mit jemandem verwechsle?

Im Beitrag zum PopupMenu [https://www.entwickler-ecke.de/viewtopic.php?t=117504&postorder=asc&start=20] ging es doch schon um die WindowProc und da war jemand mit einem ganz ähnlichen Nutzernamen aktiv.

Aber, gerne hier nochmal ein Schnipsel der zeigt wie es gehen sollte.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
type
  TForm1 = class(TForm)
  protected
    procedure WndProc(var Message: TMessage) ; override;
  private
  end;

implementation
  
procedure TForm1.WndProc(var Message: TMessage) ;
begin
  case message.Msg of
    WM_WINDOWPOSCHANGING :;
    WM_WINDOWPOSCHANGED :;
    WM_SIZE :;
    WM_NCCALCSIZE :;
  else
    inherited;
  end;
end;


Delete - Do 04.04.19 14:29

- Nachträglich durch die Entwickler-Ecke gelöscht -


Chiyoko - Do 04.04.19 15:56

user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Die auskommentierte Stelle, ist die, die mich interessiert.
Soll sie leer stehen?


Ja, nur bei Aufruf von Base wird die Nachricht weiter geleitet.


Sinspin - Fr 05.04.19 11:54

user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Das war nicht mein Topic. Ich habe dsrin, so wie du, eine Hilfestellung geleistet.
Das Thema Popupmenu hat so garnichts mit dem Thema hier zu tun, außer die WndProc() Methode, die ein Bestandteil von beiden Themen ist.

Ich hatte oben WindowProc erwähnt und bin davon ausgegangen dass du noch weiter mitgelesen hast in dem Beitrag wo es auch schon auf WindowProc hinauslief. Mein Sample verhindert jedenfalls dass die Nachrichten vom Fenster verarbeitet werden können. Ob dir das hilft bei deinem Problem musst du testen.


Delete - Fr 05.04.19 17:41

- Nachträglich durch die Entwickler-Ecke gelöscht -


mandras - Fr 05.04.19 21:41

Hallo Frühlingsrolle,

ich habe Deinen Beispielcode in D6 getestet, ebenso mit Delphi XE2.
Ergebnis:
Der Fenstertitel wird nicht mehr gesetzt wenn ich den Button betätige,
ebenfalls hat das Fenster beim Programmstart keinen Titel mehr
da auch das initiale SetText abgefangen wird.


Sinspin - So 07.04.19 13:45

Hey.

Habe gerade mal beide Beispiele ausprobiert. Caption verhindern klappt. Und die anderen Botschaften verhindern hat ein geradezu witziges Ergebnis bei der Darstellung des Fensters zur Folge.

Zeig mal bitte dein Testprojekt. Ist sicher nur eine Kleinigkeit.


Delete - So 07.04.19 15:55

- Nachträglich durch die Entwickler-Ecke gelöscht -


Sinspin - Mo 08.04.19 18:59

Sooo, Debug Mode/Release Mode unter 32Bit in XE2.
Projekt heißt zwar noch PopupFinder aber hat damit nix mehr zu tuen. Hatte schlicht keine Lust das umzubenennen :zwinker:
Via "TestCaption" = true/false kann man zwischen beiden Tests umschalten und muss dann neu übersetzen.


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:
procedure TForm1.WndProc(var Message: TMessage) ;
const
  TestCaption = false;

begin
  if not TestCaption then
  begin
    case message.Msg of
      WM_WINDOWPOSCHANGING : Log('WM_WINDOWPOSCHANGING');
      WM_WINDOWPOSCHANGED : Log('WM_WINDOWPOSCHANGED');
      WM_SIZE : Log('WM_SIZE');
      WM_NCCALCSIZE : Log('WM_NCCALCSIZE');
    else
      begin
        //Log('else');  <-- seems there is no way to get a log output working
        inherited;
      end;
    end;
  end
  else
  begin
    if Message.msg = WM_SETTEXT then
      Log('WM_SETTEXT : '+PChar(Message.LParam))
    else
    begin
      //Log('else'); <-- seems there is no way to get a log output working
      inherited WndProc(Message);
    end;
  end;
end;


Delete - Mo 08.04.19 19:34

- Nachträglich durch die Entwickler-Ecke gelöscht -


Sinspin - Mo 08.04.19 23:23

D10.2, 32Bit unter Win10 64Bit. Geht auch. Caption und Size.
Allerdings scheint es wirklich eine Minimalgröße zu geben die man nicht unterschreiten kann. Sehr interessant.

Ich habe ein Programm, glaub ich mit XE2 übersetzt, hier laufen das ist deutlich kleiner vom Fenster als die Minimalgröße.
Es hat allerdings keinen üblichen Fensterrahmen sondern ist via WindowRegion zugeschnitten.
Der Teil den ich nicht kleiner bekommen habe ist somit einfach unsichtbar.


Delete - Di 09.04.19 10:02

- Nachträglich durch die Entwickler-Ecke gelöscht -