AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi [OOP] Ableiten von TImage: Wann hat mein Objekt eine Größe?
Thema durchsuchen
Ansicht
Themen-Optionen

[OOP] Ableiten von TImage: Wann hat mein Objekt eine Größe?

Ein Thema von Jazzman_Marburg · begonnen am 19. Okt 2010 · letzter Beitrag vom 20. Okt 2010
 
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: [OOP] Ableiten von TImage: Wann hat mein Objekt eine Größe?

  Alt 19. Okt 2010, 18:53
Was verstehe ich denn jetzt nicht? Im Constructor wird doch der Owner gesetzt, nicht der Parent?

Versuch mal, die Parent-Zuweisung auszuklammern und zur Laufzeit zuzuweisen, nachdem der Constructor komplett durchgelaufen ist...
(Ich bin nicht sicher, aber vielleicht ist die Zuweisung zu früh.)

Alternativ kannst Du doch die Zeichnen-Funktion einfach abbrechen, wenn Width oder Height 0 sind.

Delphi-Quellcode:
procedure Zeichnen;
begin
  if (Width = 0) or (Height = 0) then
    Exit;
  ...
end;
Ich habe mir für ähnliche Zwecke eine TRaster erstellt. Diese liegt über einem "Designer" (TScrollBox). Sie ist transparent und Maustransparent, zeichnet ein Punkteraster und kann Laserlines für ein auf dem Designer selektiertes Objekt zeichnen. Vielleicht nützt Dir das ja als Anregung...

Delphi-Quellcode:
  TRaster = class(TPaintBox)
  private
    FLaserControl: TControl;
    procedure SetLaserControl(const Value: TControl);
  protected
    procedure CMHitTest(var Msg: TWMMouse); message CM_HITTEST;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Paint; override;
    function Designer: TodDesigner; virtual;
    property LaserControl: TControl read FLaserControl write SetLaserControl;
  end;


{ TRaster }

procedure TRaster.CMHitTest(var Msg: TWMMouse);
begin
  inherited;
  Msg.Result := 0;
end;

constructor TRaster.Create(AOwner: TComponent);
begin
  inherited;
end;

function TRaster.Designer: TodDesigner;
begin
  if Owner is TodDesigner then
    Result := (Owner as TodDesigner)
  else
    Result := nil;
end;

destructor TRaster.Destroy;
begin
  inherited;
end;

procedure TRaster.Paint;
var
  odDesigner: TodDesigner;
  X, Y: Integer;
  mi, ma: Integer;
begin
  inherited;
  if Owner is TodDesigner then
  begin
    odDesigner := (Owner as TodDesigner);
    if (odDesigner.ShowRasterX > 1) and (odDesigner.ShowRasterY > 1) then
    with Canvas do
    begin
      if (LaserControl <> nil) and (Designer <> nil) then
      begin
        ma := 1;
        mi := 0;
        Pen.Color := clSkyBlue;
        MoveTo(0, Designer.VertScrollBar.Position + LaserControl.Top - ma);
        LineTo(Width, Designer.VertScrollBar.Position + LaserControl.Top - ma);
        MoveTo(0, Designer.VertScrollBar.Position + LaserControl.Top + LaserControl.Height - mi);
        LineTo(Width, Designer.VertScrollBar.Position + LaserControl.Top + LaserControl.Height - mi);
        MoveTo(Designer.HorzScrollBar.Position + LaserControl.Left - ma, 0);
        LineTo(Designer.HorzScrollBar.Position + LaserControl.Left - ma, Height);
        MoveTo(Designer.HorzScrollBar.Position + LaserControl.Left + LaserControl.Width - mi, 0);
        LineTo(Designer.HorzScrollBar.Position + LaserControl.Left + LaserControl.Width - mi, Height);
        Pen.Color := clBlack;
      end;
      Y := odDesigner.RasterFrame + odDesigner.RasterYDif;
      while Y < Height do
      begin
        X := odDesigner.RasterFrame + odDesigner.RasterXDif;
        while X < Width do
        begin
          Pixels[X, Y] := clGray;
          Inc(X, odDesigner.ShowRasterX);
        end;
        Inc(Y, odDesigner.ShowRasterY);
      end;
    end;
  end;
end;

procedure TRaster.SetLaserControl(const Value: TControl);
begin
  if FLaserControl <> Value then
  begin
    FLaserControl := Value;
    Refresh;
  end;
end;
Angehängte Grafiken
Dateityp: png raster.png (27,7 KB, 30x aufgerufen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz