Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TLabel auf einem TPaintBox zur Laufzeit erstellen.


mcst09 - Mo 25.12.06 02:17
Titel: TLabel auf einem TPaintBox zur Laufzeit erstellen.
Hallo,

ich habe eine PaintBox die ich zur Laufzeit erstelle. Auf diese PaintBox möchte ich nun ein Label erstellen mit einem Text. Aber leider kann ich zwar den Code kompilieren, aber es ist kein Text auf der PaintBox sichtbar.

Hier der Code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
lPaintBox := TPaintBox.Create(nil);
...
...

lLabel := TLabel.Create(lPaintBox);
with (lLabel) do begin
  Align       := clClient;
  Caption     := 'blablabla' // oder Text statt Caption, weiss ich jetzt nimma auswendig
  ParentColor := true;
end;


hab jetzt noch versucht den Parent anzugeben, sprich

Delphi-Quelltext
1:
Parent := lPaintBox;                    

aber laut Compiler ist eine TPaintBox kein TWinControl!
Was ist eine PaintBox dann? Und wie bekomme ich das Label auf die PaintBox??

Dank und Gruß
AXL


jaenicke - Mo 25.12.06 03:32

Du musst Parent auf das Formular setzen! Dann musst du evtl. noch dein Label mit BringToFront nach vorne bringen, damit es vor der Paintbox ist und nicht dahinter "versteckt".

Ach so: Und eine PaintBox ist von TGraphicControl abgeleitet und eben nicht von TWinControl. TGraphicControl und TWinControl sind wiederum beide von TControl abgeleitet, haben also denselben Vorfahren.


turboPASCAL - Do 16.07.09 21:11

Ist es wirklich notwendig ein Label auf eine Paintbox zu pappen wenn
doch die Möglichkeit besteht in der Paintbog einfach den Text
per Canvas.Textout() etc. auszugeben ?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
var
  pb: TPaintBox;

procedure IrgendwoAmAnfang;
begin
  pb := TPaintBox.create(self);
  try
    pb.parent := self;
    pb.top := 20;
    pb.left := 20;
    pb.width := 120;
    pb.height := 80;
  except
     on e: exception do
       showmessage('Fehler bei dem erstellen der Paintbox: '#13 + e.message);
  end;
end;

procedure ZumEnde;
begin
  if assigned(pb) then freeandnil(pb);
end;

procedure Zwischendurch;
begin
  pb.canvas.font.Color := clred;
  pb.canvas.font.style := [fsBold];
  pb.canvas.Brush.Style := bsClear;
  pb.canvas.TextOut(10,10, timetostr(now));
  pb.canvas.Brush.Style := bsSolid;
end;


... mal so als einfacher lösungsvorschlag ;) ...


jaenicke - Do 16.07.09 21:43

Das in Kombination mit einer OffScreenBitmap, ja. Dann wird der Hintergrund des Texts aus der Bitmap geholt und der Text darüber gezeichnet.


turboPASCAL - Do 16.07.09 22:03

Ja, ich habe Thread Nr. 2 übersehen gehabt. ;)

Ich würde für das "TextCleaning" auch nur einen Teil aus dem Gesamtbild nutzen.
Kommt nun aber darauf an was mcst09 machen möchte in Bezug auf die Graphic in der PaintBox.


ffgorcky - Fr 17.07.09 11:16

Also jetzt einfach noch mal zu Deinem ersten Beitrag:
user profile iconmcst09 hat folgendes geschrieben Zum zitierten Posting springen:
Aber leider kann ich zwar den Code kompilieren, aber es ist kein Text auf der PaintBox sichtbar.[/delphi]

Ich hoffe, Du hast in jedem Falle andere Farben für das Bild und den Text an der Stelle...