Registriert seit: 3. Sep 2008
51 Beiträge
Delphi 2007 Enterprise
|
Re: Canvas / FlodFill-Problem mit eigener Komponente
14. Jan 2010, 19:45
Die Paint Methode sieht wie folgt aus:
Delphi-Quellcode:
procedure TTabBar.Paint;
var x: Integer;
begin
with Canvas do
begin
Brush.Color := Color;
Pen.Color := Color;
Rectangle(0,0,Width,Height);
end;
for x := 1 to TabCaptions.Count do
if x = TActIndex then
DrawTab(TActColor, TBColor, Height, 200, (x-1) * 200 + 5*x, true, TTabCaps.Strings[x-1])
else
DrawTab(TFColor, TBColor, Height, 200, (x-1) * 200 + 5*x, false, TTabCaps.Strings[x-1]);
end;
und die methode DrawTab:
Delphi-Quellcode:
procedure TTabBar.DrawTab(FillColor, BorderColor: TColor; Height, Width, LeftPos: Integer; Active: Boolean; Caption: String);
begin
with Canvas do
begin
Pen.Width := 2;
Brush.Color := FillColor;
Pen.Color := BorderColor;
Canvas.Font.Assign(Font);
//Canvas.Brush.Style := bsClear;
if Active then
begin
MoveTo(1+LeftPos,Height);
LineTo(1+LeftPos, 8);
Arc(0+LeftPos,1,12+LeftPos,13,9+LeftPos,1,0+LeftPos,10);
MoveTo(7+LeftPos,2);
LineTo(Width-7+LeftPos,2);
Arc(Width-12+LeftPos,1,Width+LeftPos,13,Width+LeftPos,10,Width-9+LeftPos,1);
MoveTo(Width-1+LeftPos, 8);
LineTo(Width-1+LeftPos, 1+Height);
FloodFill(15+LeftPos,7, BorderColor, fsBorder);
end
else
RoundRect(1+LeftPos, 2, 1+Width+LeftPos, Height-3, 9,9);
Canvas.Pen.Color := Canvas.Font.Color;
Canvas.TextOut(LeftPos + 20, (Height div 2) - (Canvas.TextHeight(Caption) div 2)-1, Caption);
end;
end;
Das ganze soll eine "TabBar" werden, wie z.b. die bei Firefox bzw Internet-Explorer, allerdings in Delphi implementiert.
Naja, morgen ist auch noch ein Tag
Dominik C.
|