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/)
-   -   Positionierungsprobleme (https://www.delphipraxis.net/183848-positionierungsprobleme.html)

Chris211183 9. Feb 2015 09:59


Positionierungsprobleme
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo DP´ler,

ich baue gerade eine Komponente THixHistograph, welche von TCustompanel abgeleitet ist.
Es wird ein Hintergrund gezeichnet und darauf eine Darstellungsfläche.

Nun soll an die Darstellungsfläche in X und Y eine Skalierung, welche sich auch mit der Breiten-und Höhenänderung der Komponente angleicht.

Die Skalen sind bereits Komponenten, welche ich in dieser verwende, da ich alle eigenschaften nicht neu setzen will.

Nun zum Problem:

Die Scalen, welche von THorScale und TVertScale abgeleitet sind, haben aufgrund Ihrer Erzeugung ein Width und Height bereits aus ihrem Constructor...
Die Darstellungsfläche hat im Komponentenconstructor ja auch gesetzte Werte, wie mach ich das, dass sich die Darstellung der Skalen an den Width und Height der Darstellungsfläche orientiert und nicht mit den eigenen Werten...


Delphi-Quellcode:
constructor THixHistoGraph.Create(AOwner: TComponent);
begin
  inherited;
   FColor          := clBtnFace;
  FHistoBkColor   := clBtnFace;
  Width           := 270;
  Height          := 200;
  FGapTop         := 40;
  FGapBottom      := 60;
  FGapLeft        := 70;
  FGapRight       := 40;
  FBorderstyle    := bsSingle;
  FVisible        := true;
  FFont           := TFont.Create;
  FGridLineStyle  := psSolid;
  FViewXCurrentMin := 0;
  FViewXCurrentMax := 10;
  FViewYMin       := 0;
  FViewYMax       := 10;
  FXScale         := THorScale.Create(Self);            
  FXScale.Parent  := Self;
  FXScale.Width   := Width - GapLeft- GapRight - 1;
  FXScale.Top     := Height - GapBottom;
  FYScale         := TVertScale.Create(Self);
  FYScale.Parent  := Self;
  FYScale.Height  := Height - GapTop - GapBottom;
end;
Sieht gut aus, außer, wenn man die Komponente größer bzw. kleiner zieht

Delphi-Quellcode:
procedure THixHistoGraph.DrawComponent;

var
   ComponentBackround         : TRect;                                        // zeichnet den Hintergrund der Komponente
   HistoBackround             : TRect;                                        // zeichnet die Darstellungsfläche der Komponente
begin
   inherited;
   if (Parent = NIL) or not visible
   then Exit;

   begin
      ComponentBackround := Rect(0, 0, Width, Height);
   end;
   Canvas.Brush.Color := FColor;
   Canvas.Pen.Color  := FColor;
   Canvas.FillRect(ComponentBackround);
   Frame3D(Canvas, ComponentBackround, clBtnHighlight, clBtnShadow, 1);        // 3D Rahmen mit der Breite von 1 für Komponentenhintergrund

   with HistoBackround do
   begin
      HistoBackround := Rect(GapLeft,
                             GapTop,
                             Width - GapRight,
                             Height - GapBottom);
   end;
   Canvas.Brush.Color := FHistoBkColor;
   Canvas.Pen.Color  := FHistoBkColor;
   Canvas.FillRect(HistoBackround);
   Frame3D(Canvas, HistoBackround, clBtnShadow, clBtnHighlight, 1);
end;



procedure THixHistoGraph.DrawScales;


begin
   inherited;
   if (Parent = NIL) or not visible
   then Exit;


   with XScale do
   begin
   XScale.Left := GapLeft+1;

   end;

   with YScale do
   begin
      YScale.Left := 1;
      YScale.Top := GapTop + 1;
      YScale.Width := GapLeft - 2;
   end;

end;
Bin Dankbar für jeden Denkanstoß

Hier mal noch ein Screenshot

DeddyH 9. Feb 2015 10:26

AW: Positionierungsprobleme
 
Ich bin zwar nicht sicher, ob ich das richtig verstanden habe, aber versuch doch mal, in der Hauptkomponente SetBounds zu überschreiben. Da kannst Du dann die Unterkomponenten neu positionieren. Wobei ich mich frage, wozu es überhaupt die Unterkomponenten braucht, aber das steht auf einem anderen Blatt.

Chris211183 9. Feb 2015 10:35

AW: Positionierungsprobleme
 
Also die Hauptkomponente entsteht gerade...
Die Skalen sind nur von zwei anderen Komponenten abgeleitet, welche ich in der jetzigen verwende !

stahli 9. Feb 2015 11:46

AW: Positionierungsprobleme
 
M.E. kannst Du einfach Resize überschreiben und dort die Scalen anordnen.

Chris211183 9. Feb 2015 12:14

AW: Positionierungsprobleme
 
mhhhh, hab ich noch nicht gemacht...

procedure Resize(?);override;

Perlsau 9. Feb 2015 12:19

AW: Positionierungsprobleme
 
Da es sich offenbar um ganz einfache Striche und Ziffernfolgen handelt, würde ich das selber zeichnen. Das scheint mir "das geringere Übel" zu sein. Zudem kannst du beim Selberzeichnen auch noch ein paar Properties anbringen, die Schriftart, Linienstärke, Linienlänge, Unterteilungen oder was auch immer bestimmen und so eine weitaus flexiblere Komponente entwickeln.

Chris211183 9. Feb 2015 12:27

AW: Positionierungsprobleme
 
Alles Gut !!!!

Danke an Stali, Resize hat das gemacht, was ich wollte !!!

Ihr seid super !!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:52 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