Einzelnen Beitrag anzeigen

janjan

Registriert seit: 16. Jan 2003
Ort: Bonn ("links über Königswinter ")
240 Beiträge
 
Delphi 4 Standard
 
#1

TPaintBox dauerhaft vor andere PaintBox setzen

  Alt 4. Mär 2003, 09:35
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!!!
  Mit Zitat antworten Zitat