Autor Beitrag
Peter18
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 463
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Mo 29.01.18 11:06 
Ein freundliches Hallo an alle,

nachdem die Scalierung des Hauptformulars ganz gut funktioniert wollte ich das Prinzip auf die Modal-Formulare übertragen: Banane!!!

Die Modal-Formulare werden mit Rollbalken gezeigt. Sie haben die Größe, wie zur Entwicklungszeit, auch bei den Werten "Height" und "Width". In den Rollbalken sind unter "Range" die gleichen Werte zu finden. Ich kann nun das Formular mit der Maus auf die richtige Größe ziehen, würde es aber lieber gleich in der richtigen Größe zeigen.

Muß ich mir die Größe selbst ausrechnen, oder sind sie irgendwo versteckt (hab sie noch nicht gefunden)??

Grüße von der regnerischen Nordsee

Peter
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2165
Erhaltene Danke: 399

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mo 29.01.18 17:22 
Guten Abend Peter18,

wenn ich die Größe (.Width, .Height) vorher festlege, und das (modale) Fenster mit .ShowModal() aufrufe, wird es in dieser Größe angezeigt. :gruebel:

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 463
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Mo 29.01.18 17:58 
Hallo Frühlingsrolle,

Dank Dir für Deine Antwort, aber so weit war ich mit meiner Frage auch. Ich möchte das Formular in der Größe anzeigen, dass die Rollbalken verschwinden wenn Windows alles umscaliert.

Grüße von der noch immer regnerischen Nordsee

Peter
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2165
Erhaltene Danke: 399

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mo 29.01.18 20:59 
Dann könntest du folgendes machen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
begin
  while GetWindowLong(ModalesFenster.Handle, GWL_STYLE) and WS_HSCROLL <> 0 do  // solange die horizontale Scrollbar gegeben ist
  begin
    ModalesFenster.Width := ModalesFenster.Width + 1;                           // vergrößer die Fensterbreite um 1
  end;

  while GetWindowLong(ModalesFenster.Handle, GWL_STYLE) and WS_VSCROLL <> 0 do  // solange die vertikale Scrollbar gegeben ist
  begin
    ModalesFenster.Height := ModalesFenster.Height + 1;                         // vergrößer die Fensterhöhe um 1
  end;
end;

Mach das Fenster vorher unsichtbar, also .Visible := false, zeig das Fenster modal an, führ diesen Code aus und am Ende wieder sichtbar machen.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 463
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Di 30.01.18 14:50 
Hallo Frühlingsrolle,

Dank Dir nochmals! Ich hatte gehofft, es gäbe eine einfachere Lösung. Aber dann könnt es ja jeder.

Zur Scalierung hat sich eine weitere Frage ergeben. Dafür mach ich aber eine neue Frage auf.

Grüße von der sonnigen Nordsee

Peter
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 463
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Di 30.01.18 17:20 
Hallo Frühlingsrolle und alle,

hier eine Lösung die schneller geht und unsichtbar machen erübrigt vor allem, wenn sie In OnShow verwendet wird:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function TDatEdit.FormHeight( I : Integer ): Integer;
begin
  if I > 0 then while GetWindowLong(Handle, GWL_STYLE) and WS_HSCROLL <> 0 do Width := Width + I
           else while GetWindowLong(Handle, GWL_STYLE) and WS_HSCROLL  = 0 do Width := Width + I;
  if I <> 1 then FormHeight( -(I div 2) );
end;

function TDatEdit.FormWidth ( I : Integer ): Integer;
begin
  if I > 0 then while GetWindowLong(Handle, GWL_STYLE) and WS_VSCROLL <> 0 do Height := Height + I
           else while GetWindowLong(Handle, GWL_STYLE) and WS_VSCROLL  = 0 do Height := Height + I;
  if I <> 1 then FormWidth( -(I div 2) );
end;

Die Routinen werden rekursiv durchlaufen und arbeiten nach dem Verfahren der binären Suche. Der Wert "I" muß beim ersten Aufruf also eine X-Fache Verdoppelung von 1 sein z.B. 20.

Die Routine macht 20-ger Sprünge, bis der Rollbalken weg ist, dann 10-er Sprünge, bis err wieder da ist und so weiter. Die Routine terminiert, wenn "I=1" ist.

Hinweis: Anker werfen ist nur oben und links gut, sonst droht eine Endlosschleife!!!

Grüße von der Nordsee

Peter