Thema: Delphi Bevel nur an den Ecken

Einzelnen Beitrag anzeigen

Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Bevel nur an den Ecken

  Alt 18. Jul 2013, 08:42
Controls hineinzusetzen ist bei TGraphicControl nicht möglich, da es nicht von TWinControl abstammt und somit nicht als Parent fungieren kann. Sollte es aber nur um Beschriftungen gehen, die kann man ja als Properties deklarieren und im Paint einfach mit draufzeichnen.

[edit] Etwa so:
Delphi-Quellcode:
unit uDings;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TDings = class(TGraphicControl)
  private
    FInfoUnten: string;
    FInfoOben: string;
    procedure SetInfoOben(const Value: string);
    procedure SetInfoUnten(const Value: string);
  protected
    procedure Paint; override;
  published
    property InfoOben: string read FInfoOben write SetInfoOben;
    property InfoUnten: string read FInfoUnten write SetInfoUnten;
  end;

  TFormTest = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    FDings: TDings;
  public
    { Public-Deklarationen }
  end;

var
  FormTest: TFormTest;

implementation

{$R *.dfm}

procedure TDings.Paint;
const
  BEVELWIDTH = 20;
var
  R: TRect;
begin
  inherited;
  Canvas.Brush.Style := bsClear;
  Canvas.Pen.Width := 2;
  Canvas.MoveTo(0, BEVELWIDTH);
  Canvas.LineTo(0, 0);
  Canvas.LineTo(BEVELWIDTH, 0);
  Canvas.MoveTo(Width - BEVELWIDTH, 0);
  Canvas.LineTo(Width, 0);
  Canvas.LineTo(Width, BEVELWIDTH);
  Canvas.MoveTo(Width, Height - BEVELWIDTH);
  Canvas.LineTo(Width, Height);
  Canvas.LineTo(Width - BEVELWIDTH, Height);
  Canvas.MoveTo(BEVELWIDTH, Height);
  Canvas.LineTo(0, Height);
  Canvas.LineTo(0, Height - BEVELWIDTH);
  R := Rect(0, 0, Width, Height);
  InflateRect(R, -3, -2);
  DrawText(Canvas.Handle, PChar(FInfoOben), -1, R, DT_SINGLELINE or DT_TOP or DT_LEFT);
  DrawText(Canvas.Handle, PChar(FInfoUnten), -1, R, DT_SINGLELINE or DT_BOTTOM or DT_LEFT);
end;

procedure TFormTest.FormCreate(Sender: TObject);
begin
  FDings := TDings.Create(self);
  FDings.Left := 20;
  FDings.Top := 20;
  FDings.Width := 200;
  FDings.Height := 100;
  FDings.Parent := self;
  FDings.InfoOben := 'Oberer Text';
  FDings.InfoUnten := 'Unterer Text';
end;

procedure TDings.SetInfoOben(const Value: string);
begin
  FInfoOben := Value;
  Invalidate;
end;

procedure TDings.SetInfoUnten(const Value: string);
begin
  FInfoUnten := Value;
  Invalidate;
end;

end.
Das sieht dann so aus (die eklige Hintergrundfarbe des Formulars dient nur dazu, zu zeigen, dass TDings auch wirklich transparent ist.[/edit]
Miniaturansicht angehängter Grafiken
dings.png  
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (18. Jul 2013 um 09:11 Uhr)
  Mit Zitat antworten Zitat