Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Komponente von TShape mit Caption (https://www.delphipraxis.net/166107-komponente-von-tshape-mit-caption.html)

entwickler 30. Jan 2012 14:33

Komponente von TShape mit Caption
 
Hallo DP :hi:

Kurz: ich möchte eine Komponente schreiben, welche SudokuKasten heißen soll.

Wie der Name schon schlussfolgern lässt, soll die Komponente einen einzigen Block darstellen (vom Spiel Sudoku [http://de.wikipedia.org/wiki/Sudoku]), in dem eine Zahl angezeigt werden kann. Die Komponente lässt sich meiner Meinung nach gut von TShape ableiten, weil man so die Rahmen des Blocks individuell gestallten lassen kann, jedoch fehlt die Eigenschaft 'Caption' oder 'Font'. Eigentlich bräuchte ich ja auch nur ein einzelnes Zeichen (Char), also nicht mal einen string als Caption.
Später ist mir aufgefallen, dass ein Vorfahrtyp von TShape, nämlich TControl die Eigenschaft Text besitzt [Hierachie: TComponent -> TControl -> TGraphicControl -> TShape (-> TSudokuKasten)]. Wie kann ich diese Eigenschaft der von TShape abgeleiteten Komponente wieder zuweisen, wie kann ich die Eigenschaft Font (ebenfalls in TControl enthalten) dem Text dann zuweisen und wie kann ich diese Caption in der Komponente (evtl. auch mittig) anzeigen lassen?

Bis jetzt habe ich noch nicht begonnen, an der Komponente zu schreiben, weil ich nicht weis, wie ich diese aufbauen soll. Kann ich vielleicht die Eigenschaft Caption auch vom Typ Char deklarieren?

Ich bin für jeden (weiterhelfenden) Kommentar dankbar :wink:

DeddyH 30. Jan 2012 14:39

AW: Komponente von TShape mit Caption
 
Ich habe jetzt nicht nachgesehen, aber vermutlich sind die "unsichtbaren" Eigenschaften in der Vorfahrklasse protected deklariert. Um sie also öffentlich verfügbar zu machen musst Du sie nur in den published-Abschnitt aufnehmen. Und für die Darstellung müsstest Du dann die Paint-Methode überschreiben und da dann Deinen Text ausgeben.

entwickler 30. Jan 2012 15:05

AW: Komponente von TShape mit Caption
 
Wie lasse ich den Text denn in der Paint-Methode zeichnen? Und außerdem: Wie kann ich diesem Text einen eigenen Font zuweisen?

DeddyH 30. Jan 2012 15:09

AW: Komponente von TShape mit Caption
 
Aus dem Kopf und ohne Gewähr:
Delphi-Quellcode:
procedure TDeinShape.Paint;
var
  R: TRect;
begin
  inherited;
  Canvas.Font.Assign(Font);
  Canvas.Brush.Style := bsClear;
  R := Rect(0, 0, Width, Height);
  DrawText(Canvas.Handle, PChar(Text), -1, R, DT_SINGLELINE or DT_CENTER or DT_VCENTER);
end;

entwickler 30. Jan 2012 16:09

AW: Komponente von TShape mit Caption
 
Ich habe bisher folgendes geschrieben:
Delphi-Quellcode:
type
  TSudokuKasten = class(TShape)
  private
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
    { Public-Deklarationen }
  published
    property Caption  : string       read Text     write SetText;
    //property Font     : TFont        read     write SetFont;
    { Published-Deklarationen }
  end;
Doch bei der property Caption : string weis ich nicht, was ich bei write schreiben soll, weil Delphi 'write Text' nicht akzeptiert. Was tun?

DeddyH 30. Jan 2012 16:26

AW: Komponente von TShape mit Caption
 
Delphi-Quellcode:
type
  TSudokuKasten = class(TShape)
  private
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
    procedure Paint; override;
  public
    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
    property Caption;
    property Font;
  end;
Das müsste genügen.

Furtbichler 31. Jan 2012 07:29

AW: Komponente von TShape mit Caption
 
Ein Panel mit Ctrl3D=False und Bevel* = bvNone reicht nicht?

Sir Rufo 31. Jan 2012 08:20

AW: Komponente von TShape mit Caption
 
Zitat:

Zitat von entwickler (Beitrag 1148332)
Die Komponente lässt sich meiner Meinung nach gut von TShape ableiten, weil man so die Rahmen des Blocks individuell gestallten lassen kann, ...

Wenn du Wert auf eine individuelle Gestaltung legst, dann solltest du noch tiefer greifen und von Delphi-Referenz durchsuchenTGraphicControl ableiten.

Das Zeichnen musst du halt dann komplett selber erledigen, wird aber in diesem speziellen Fall auch sinnvoller sein - meine Meinung :)

DeddyH 31. Jan 2012 08:39

AW: Komponente von TShape mit Caption
 
Würde ich zwar auch so machen, aber vielleicht ist das im Moment noch zu ambitioniert. Obwohl: man wächst ja mit seinen Aufgaben ;)

entwickler 5. Feb 2012 14:34

AW: Komponente von TShape mit Caption
 
Da kann ich DeddyH momentan nur zustimmen :).

Wenn ich also die Methode von Furtbichler benutze, habe ich zwar die Egienschaft Caption, aber keinen Rahmen, den ich gestallten kann. Wie kann ich denn dann Rahmen beispielsweise von TShape einbringen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 Uhr.
Seite 1 von 2  1 2      

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