Delphi-PRAXiS
Seite 8 von 13   « Erste     678 910     Letzte »    

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 Benötige Hilfe beim Entwickeln einer Komponente (https://www.delphipraxis.net/98560-benoetige-hilfe-beim-entwickeln-einer-komponente.html)

torud 6. Sep 2007 11:37

Re: Benötige Hilfe beim Entwickeln einer Komponente
 
Blöde Frage, aber wie soll ich dann einen anderen Font wählen können? Per Code? Ich versuche mich...

Alter Mann 6. Sep 2007 11:47

Re: Benötige Hilfe beim Entwickeln einer Komponente
 
Hi torud

Kleines Beispiel für den Font(stammt aus dem Kalender - unter OpenSource).

Delphi-Quellcode:
  TCalendarControl = class(TCustomControl)
  private
    ...
    FFont        : TFont;
    ...
    procedure  SetFont(Value : TFont);
    ...
  public
    constructor Create(aOwner : TComponent); override;
    destructor Destroy;                     override;
    ...
  end;

...

implementation

...
constructor TCalendarControl.Create(aOwner : TComponent);
begin
  inherited Create(aOwner);
  ...
  FFont        := TFont.Create;
  FFont.Name   := 'Arial';
  FFont.Size   := 8;
  ...
end;

procedure  TCalendarControl.SetFont(Value : TFont);
begin
  if FFont <> Value then
  begin
    FFont.Assign(Value);
    Canvas.Font.Assign(Value);
    Invalidate;
  end;
end;

destructor TCalendarControl.Destroy;
begin
  ...
  FFont.Free;
  inherited Destroy;
end;
und für den Rahmen:

Delphi-Quellcode:
...
procedure  TCalendarControl.Paint;
...
begin
  ...
    if FOptions.BorderStyle = bsSingle then
    begin
      Rectangle(R);
      InflateRect(R, -1, -1);
    end;
  ...
end;
...
Für Rectangle geht auch RoundRect.

Die Zuweisung Canvas.Font.Assign(Value) kann auch in Paint erfolgen, dann aber so Canvas.Font.Assign(FFont).

Gruß

torud 6. Sep 2007 11:55

Re: Benötige Hilfe beim Entwickeln einer Komponente
 
Da fehlt doch aber der Plublished-Abschnitt - Oder?

ich nehme mal an, dass das so aussehen sollte:

Delphi-Quellcode:
  published
    property Font: TFont read FFont write SetFont;
//edit
getestet => FUNZT SUPER!!!

Das mit dem Border muss ich mir auch noch ansehen, da mir das jetzt gar nix sagt...

Alter Mann 6. Sep 2007 12:02

Re: Benötige Hilfe beim Entwickeln einer Komponente
 
Böse Falle, habe ich doch glattweg übersehen.

Richtiger ist es so:
Delphi-Quellcode:
...
  public
    ...
    property Font : TFont read GetFont write SetFont;
    ...

function   TCalendarControl.GetFont : TFont;
begin
  Result := Canvas.Font;
end;

...
Aber wie schon geschrieben, Kalender-Kompo unter OpenSource in der DP.


Gruß

torud 6. Sep 2007 12:18

Re: Benötige Hilfe beim Entwickeln einer Komponente
 
Jo ich habe dort schon mal geschaut, aber wie Du selbst dort in Deinem letzten post schreibst, hast du den Source rausgenommen. Also nix zum schauen... :gruebel:

BTW: Ich habe die Veröffentlichung nicht in public stehen, sondern in published, da es anders nicht ging! Ansonsten ist es nun ok mit dem Font zumindest.

BTW2: Nun bräuchte ich nur noch etwas Unterstützung mit dem "Layout", da da die Vertikale Ausrichtung nicht funktioniert. Dies wird derzeit so gemacht. Horizontal läuft es, Vertikal nicht. Zeilenumbruch geht auch.

Delphi-Quellcode:
    case TextAlign of
      taCenter      : myAlignment := DT_CENTER;
      taLeftJustify : myAlignment := DT_LEFT;
      taRightJustify : myAlignment := DT_RIGHT;
    end; //funzt

    case Layout of
      tlTop         : myAlignment := myAlignment or DT_TOP;
      tlCenter      : myAlignment := myAlignment or DT_VCENTER;
      tlBottom      : myAlignment := myAlignment or DT_BOTTOM;
    end; //funzt nicht

    IF FTextWordwrap then myAlignment := MyAlignment or DT_WORDBREAK; //funzt auch

    DrawText(self.Canvas.Handle, PChar(FText), -1, TextRect, myAlignment);
TextAlign, Layout und FTextWordwrap sind inhaltlich korrekt belegt. Leider werden aber die Angaben von Layout nicht berücksichtigt.

Alter Mann 6. Sep 2007 12:33

Re: Benötige Hilfe beim Entwickeln einer Komponente
 
Hi torud,

ich habe gerade kein D6Prof. auf meinem Rechner installiert, aber schau doch mal in der Hilfe (Windows SDK)
nach DrawText, dort steht:
Zitat:

DT_VCENTER Centers text vertically (single line only).
Dass heißt, wenn der Text vertikal Zentriert sein soll, darf kein DT_WORDBREAK enthalten sein.

Alles klar?

Gruß

torud 6. Sep 2007 13:11

Re: Benötige Hilfe beim Entwickeln einer Komponente
 
Ich will Dir nicht widersprechen, da ich einfach zu wenig Erfahrungen habe, aber wenn dem so wäre, müsste es ja funktionieren, wenn ich einen einfachen kurzen Text in die Komponente schreibe, WordWrap auf False stellt und im Layout tlCenter wähle. Dem ist aber nicht so...der Text bleibt stur tlTop...

Die SDK habe ich nicht zur Hand, werde aber mal googlen...

DeddyH 6. Sep 2007 13:14

Re: Benötige Hilfe beim Entwickeln einer Komponente
 
Delphi-Quellcode:
IF FTextWordwrap then myAlignment := MyAlignment or DT_WORDBREAK
else myAlignment := MyAlignment or DT_SINGLELINE;

torud 6. Sep 2007 13:29

Re: Benötige Hilfe beim Entwickeln einer Komponente
 
Gute Idee, aber es bleibt stur!

oki 6. Sep 2007 13:47

Re: Benötige Hilfe beim Entwickeln einer Komponente
 
Hi torud,

schau in der MSDN-Hilfe unter DrawText nach, da sind die Flags erläutert.

Zum Thema Font. Noch mal, keinen eigenen Font kreieren!!!!! :warn:

Da du dein Control von TCustomControl ableitest, sind die Eigenschaften wie Font usw. natürlich noch nicht published. also mußt du die Sichtbarkeit der Eigenschaft ändern.
Mach einfach folgendes:
Delphi-Quellcode:
published
  property Font;
....
end;
mit dieser Anweisung änderst du einfach die Sichtbarkeit einer Eigenschaft, ohne sie zu überschreiben. Dann ist sie auch im OI!

Gruß oki


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:51 Uhr.
Seite 8 von 13   « Erste     678 910     Letzte »    

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