Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Positionierung via Align buggt rum... (https://www.delphipraxis.net/90313-positionierung-via-align-buggt-rum.html)

glkgereon 15. Apr 2007 10:16


Positionierung via Align buggt rum...
 
Hi,

Ich habe ein Eingabefeld (für einen Chat) mit ein paar Controls dabei.
insgesamt ein Edit (oder Memo), drei Buttongroups und eine TFatMemo (im prinzip auch eine Memo).

Die sollen einfach übereinander gestapelt werden (Align:=alBottom)
Nun habe ich das Problem, dass die Reihenfolge irgendwie verrückt spielt...

Bisher sieht die konstruktion so aus:
Ich habe mir eine Komponente von TPanel abgeleitet und dadrauf die ganzen Sachen positioniert.
Es gibt 2 Darstellungsmodi.
- Setzen der Höhe nach der Summe der einzelnen Höhen
- Setzen der einzelnen Höhen nach der Gesamthöhe

Also rufe ich immer im Paint folgendes auf:
Delphi-Quellcode:
begin
  if (FLastHeight<>Height) or (FLastWidth<>Width) then
  begin //Wenn sich was verändert hat dann mal höhen updaten...
    UpdateHeight;
    FLastHeight:=Height;
    FLastWidth:=Width;
  end;
  inherited;
end;
Delphi-Quellcode:
procedure TFatPreviewEditor.UpdateHeight;
var H: Integer;
begin
  Case FDefineHeight of
    dhbParticulars:
    begin
      H:=2;
      if Multiline then
        Inc(H,FMemo.Height)
      else
        Inc(H,FEdit.Height);
      if Preview then Inc(H,FPreviewMemo.Height+2);
      if FInputButtons.Visible then Inc(H,FInputButtons.Height+2);
      if FSmilieButtons.Visible then Inc(H,FSmilieButtons.Height+2);
      if FInputColors.Visible then Inc(H,FInputColors.Height+2);
      Height:=H;
    end;
    dhbOverall:
    begin
      H:=Height;
      if FInputButtons.Visible then Dec(H,FInputButtons.Height+2);
      if FSmilieButtons.Visible then Dec(H,FSmilieButtons.Height+2);
      if FInputColors.Visible then Dec(H,FInputColors.Height+2);
      if Preview then begin
        H:=H div 2;
        FPreviewMemo.Height:=H-2;
      end;                
      if Multiline then
        FMemo.Height:=H-2
      else
        FEdit.Height:=H-2;
    end;
  end;
  FMemo.Top:=0; //Hier versuche ich die zu sortieren...
  FEdit.Top:=0;
  FInputButtons.Top:=0;
  FInputColors.Top:=0;
  FSmilieButtons.Top:=0;
  FPreviewMemo.Top:=0;
end;
Das funktioniert auch soweit alles...
Aber die Reihenfolge ist manchmal durcheinandergewürfelt.
Aber auch nicht zufällig, sondern bei einer bestimmten Größe immer gleich
Was mache ich falsch/was könnte ich anders machen?

SirThornberry 15. Apr 2007 11:08

Re: Positionierung via Align buggt rum...
 
wenn du bei allen Top auf 0 setzt ist es eben eine Art Glücksspiel welches das oberste ist. Setze die Top-Werte entsprechend so das klar ersichtlich ist welches ganz oben ist.
Delphi-Quellcode:
erstes.top := 0;
zweites.top := 1;
[...]

glkgereon 15. Apr 2007 11:11

Re: Positionierung via Align buggt rum...
 
Delphi-Quellcode:
  FMemo.Top:=5;
  FEdit.Top:=4;
  FInputButtons.Top:=3;
  FInputColors.Top:=2;
  FSmilieButtons.Top:=1;
  FPreviewMemo.Top:=0;
Macht exakt das selbe :-(

SirThornberry 15. Apr 2007 11:16

Re: Positionierung via Align buggt rum...
 
kannst du das projekt mal anhängen? bzw. geht es wenn du die Top-Werte richtig setzt?
Delphi-Quellcode:
FMemo.Top:=FMemo.Parent.Height - FMemo.Height;
FEdit.Top:=FMemo.Top - FEdit.height;
FInputButtons.Top:=FEdit.Top - FInputButtons.Height;
[...]

glkgereon 15. Apr 2007 11:24

Re: Positionierung via Align buggt rum...
 
Zitat:

Zitat von SirThornberry
kannst du das projekt mal anhängen? bzw. geht es wenn du die Top-Werte richtig setzt?
Delphi-Quellcode:
FMemo.Top:=FMemo.Parent.Height - FMemo.Height;
FEdit.Top:=FMemo.Top - FEdit.height;
FInputButtons.Top:=FEdit.Top - FInputButtons.Height;
[...]

Also mit Projekt anhängen ist schwierig :-)
Ein weitere Problem ist dass Smilies und Colors nur manchmal angezeigt werden, und es ist nur entweder Edit oder Memo sichtbar.

Ich habe es nun mal so gemacht:
Delphi-Quellcode:
  FPreviewMemo.Top:=0;
  FSmilieButtons.Top:=FPreviewMemo.Height;
  FInputColors.Top:=FPreviewMemo.Height+10;
  FInputButtons.Top:=FPreviewMemo.Height+20;
  FEdit.Top:=FInputButtons.Top+FInputButtons.Height;
  FMemo.Top:=FInputButtons.Top+FInputButtons.Height;
und es funktioniert :dancer:

Danke :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz