Einzelnen Beitrag anzeigen

Chris211183

Registriert seit: 19. Sep 2013
Ort: Braunschweig
204 Beiträge
 
Delphi 6 Professional
 
#1

Positionierungsprobleme

  Alt 9. Feb 2015, 09:59
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
Miniaturansicht angehängter Grafiken
screenshot.jpg  
Christian

Geändert von Chris211183 ( 9. Feb 2015 um 10:05 Uhr)
  Mit Zitat antworten Zitat