AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TPaintBox dauerhaft vor andere PaintBox setzen
Thema durchsuchen
Ansicht
Themen-Optionen

TPaintBox dauerhaft vor andere PaintBox setzen

Ein Thema von janjan · begonnen am 4. Mär 2003 · letzter Beitrag vom 4. Mär 2003
Antwort Antwort
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
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2
  Alt 4. Mär 2003, 10:27
Du musst zuerst die große Fläche erzeugen und danach die PaintBox-Labels. Oder du nutzt die Methode BringToFront für jedes PaintBox-Label.
  Mit Zitat antworten Zitat
janjan

Registriert seit: 16. Jan 2003
Ort: Bonn ("links über Königswinter ")
240 Beiträge
 
Delphi 4 Standard
 
#3
  Alt 4. Mär 2003, 10:29
Auf die Idee bin ich auch schon gekommen, aber das klappt nicht
Die Wichtigkeit eines Postings im Forum ist reziprok zur Anzahl der enthaltenenen, kumulierten Ausrufungszeichen!!!
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4
  Alt 4. Mär 2003, 10:45
Du könntest die Komponente von TCustomControl ableiten. Diese Klasse besitzt eine Cannvas und ist von TWinControl abgeleitet.
  Mit Zitat antworten Zitat
janjan

Registriert seit: 16. Jan 2003
Ort: Bonn ("links über Königswinter ")
240 Beiträge
 
Delphi 4 Standard
 
#5
  Alt 4. Mär 2003, 10:56
Vieln Dank, das scheint zu klappen.
Die Wichtigkeit eines Postings im Forum ist reziprok zur Anzahl der enthaltenenen, kumulierten Ausrufungszeichen!!!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz