Ich hab mal wieder ein kleines Problem mit meinen selbstgeschriebenen Komponente:
Ich hab in meinem Programm eine große Anzeige auf der die meisten Daten angezeigt werden. Abgeleitet ist dieses Control von TPaintBox. Bisher hab ich zur Anzeige der restlichen Daten TStaticTexts benutzt, da diese immer vor der PaintBox angezeigt werden.
Da mit die StaticTexts grafisch aber nich so gut gefallen ahebn, hab ich eigene geschrieben, die aber nicht von TStaticText sondern auch von TPaintBox abgeleitet sind.
Das Problem ist jetzt, das bei überlagerung der beiden Komponenten meine LabelKomponenten unter dem großen Anzeige verschwinden.
Kann ich das irgendwie verhindern oder muss ich das Label von einer anderen Komponente ableiten? Ich habs mit TStaticText probiert, das bietet aber leider keine Paint Routine.
Mein Favorit wäre eine Komponente von TStaticText abgeleitet, die irgenwie auf WM_Paint reagiert und da einen farbigen Rahmen von 1 pixel Breite um das Label malt.
Hier noch der Code für meine Labels:
Delphi-Quellcode:
unit milLabel;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls, inifiles, ExtCtrls;
type
TTestlabel =
class(TPaintBox)
protected
FCaption:
String;
FInnerColor: TColor;
FOuterColor: TColor;
FFont: TFont;
procedure FSetCaption(S:
string);
procedure FSetInnerColor(C: TColor);
procedure FSetOuterColor(C: TColor);
public
{ Public-Deklarationen }
procedure Paint;
override;
constructor Create(AOwner: TComponent);
override;
published
{ Published-Deklarationen }
property Caption:
String read FCaption
write FSetCaption;
property InnerColor: TColor
read FInnerColor
write FSetInnerColor;
property OuterColor: TColor
read FOuterColor
write FSetOuterColor;
end;
procedure Register;
implementation
procedure TTestLabel.FSetCaption(s:
String);
begin
FCaption:=S;
Paint;
end;
procedure TTestLabel.FSetInnerColor(c: TColor);
begin
FInnerColor:=C;
Paint;
end;
procedure TTestLabel.FSetOuterColor(c: TColor);
begin
FOuterColor:=C;
Paint;
end;
constructor TTestLabel.Create(AOwner: TComponent);
begin
FInnerColor:=clBlack;
FOuterColor:=clBlue;
FCaption:='
TestLabel';
inherited Create(AOwner);
Height:=23;
Width:= 73;
Font.
Name:='
Tahoma';
Font.Height:=-14;
Font.Style:=[fsBold];
end;
procedure TTestLabel.Paint;
begin
Canvas.Font:=Font;
with Canvas
do
begin
Pen.Color:=FOuterColor;
Brush.Color:=FInnerColor;
Rectangle(0,0,Width,Height);
Font.Color:=clWhite;
TextOut( 4,(Height
div 2)-(TextHeight('
#+*%/')
div 2),FCaption);
end;
end;
procedure Register;
begin
RegisterComponents('
Beispiele', [TTestLabel]);
end;
end.
Die Wichtigkeit eines Postings im Forum ist reziprok zur Anzahl der enthaltenenen, kumulierten Ausrufungszeichen!!!