Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Label.canvas beschreiben (https://www.delphipraxis.net/100836-label-canvas-beschreiben.html)

messie 4. Okt 2007 14:14


Label.canvas beschreiben
 
Moin,

ich schreibe auf das Canvas eines TntLabels (geht um hoch- und tiefgestellte Schrift). Das ist etwas holperig, weil die Beschriftung rechtsbündig sein muss.
Mein Schreibvorgang wird im Form.OnResize ausgeführt.
Nun wird mir bei jeder Gelegenheit das Label verdeckt (z.B. von einer MessageBox) und danach neu gezeichnet. Damit wird wieder die leere Caption gezeichnet. Wenn ich den Aufruf in die Form.OnRepaint setze, wird meist nur das nachgezeichnet, was nicht von einer Meldung etc. verdeckt war bzw. beim Ausblenden einer Meldung etc. wird das Repaint des Forms nicht ausgelöst.

Im Prinzip bräuchte ich ein Ereignis wie ein TLabel.Repaint, damit ich dort die Beschriftung umsetzen kann.

Hat jemand einen Tipp?

Danke, Messie

Luckie 4. Okt 2007 14:21

Re: Label.canvas beschreiben
 
Entweder musst du da Label subclassen und im OnPaint des Labels zeichnen oder du leitest dir von dem Label ein eigene Label ab und überschreibst dort das OnPaint Ereignis.

SirThornberry 4. Okt 2007 14:21

Re: Label.canvas beschreiben
 
hast du im label gar nichts stehen außer dein selbst gezeichnetes? wenn dem so ist kannst du auch auf das label verzeichten und gleich auf das Form zeichnen. Ansonsten solltest du von dem Label ableiten und selbst ein OnPaint impelmentieren (Paint überschreiben und OnPaint-Event einführen).

messie 5. Okt 2007 07:50

Re: Label.canvas beschreiben
 
Zitat:

Zitat von Luckie
Entweder musst du da Label subclassen und im OnPaint des Labels zeichnen oder du leitest dir von dem Label ein eigene Label ab und überschreibst dort das OnPaint Ereignis.

Ich habe kein OnPaint beim TntLabel zum Überschreiben gefunden.

Zitat:

Zitat von SirThornberry
Wenn dem so ist kannst du auch auf das label verzeichten und gleich auf das Form zeichnen. Ansonsten solltest du von dem Label ableiten und selbst ein OnPaint implementieren (Paint überschreiben und OnPaint-Event einführen).

Ich habe eine Groupbox und ein Panel drunter, also kann ich nicht direkt aufs Form zeichnen (auch weil die zur Laufzeit skaliert werden).
Ich habe kein Paint zum Überschreiben, oder meinst Du Repaint? Wie bekomme ich da ein OnPaint rein?
Ich hätte da noch ein "TTntCustomLabel.DoDrawText(var Rect: TRect; Flags: Integer)", vielleicht könnte ich die überschreiben.


Grüße, Messie

SirThornberry 5. Okt 2007 08:08

Re: Label.canvas beschreiben
 
hmm, mal ne frage. warum nimmst du zur zeit ein Label? Brauchst du irgendwelche Eigenschaften davon?
Und das es Paint nicht gibt (zum überschreiben) wäre dann der fall wenn es nicht von TCustomControl oder TGraphicControl abgeleitet ist.

messie 5. Okt 2007 08:28

Re: Label.canvas beschreiben
 
Zitat:

Zitat von SirThornberry
hmm, mal ne frage. warum nimmst du zur zeit ein Label? Brauchst du irgendwelche Eigenschaften davon?

Weil ich es in mehreren Varianten benutze und nur einmal direkt darauf zeichnen muss.
Zitat:

Zitat von SirThornberry
Und das es Paint nicht gibt (zum überschreiben) wäre dann der fall wenn es nicht von TCustomControl oder TGraphicControl abgeleitet ist.

Stimmt, es ist ein TGraphicControl - so weit hatte ich mich in der Hierarchie garnicht vorgearbeitet (die Tnts sind da nicht immer ganz übersichtlich).

Wie bekomme ich da jetzt ein OnPaint rein wenn ich Paint überschrieben habe?

Noch eine grundsätzliche Frage: wenn ich eine Subkompo ableite, kann ich die dann auch lokal registrieren, also ohne in ein Package in die IDE zu laden?

Grüße, Messie

uligerhardt 5. Okt 2007 08:51

Re: Label.canvas beschreiben
 
Zitat:

Zitat von messie
Noch eine grundsätzliche Frage: wenn ich eine Subkompo ableite, kann ich die dann auch lokal registrieren, also ohne in ein Package in die IDE zu laden?

Ich fürchte nein. Das hätte ich auch gerne für projektspezifische oder Testkompos.

[Edit: Tippfehler]

uligerhardt 5. Okt 2007 09:06

Re: Label.canvas beschreiben
 
Ach ja: Es gäbe noch "Interposer classes". Aber:
Zitat:

Zitat von Peter Below
I consider interposer classes mostly useful for debugging or quickly
testing some modifications. For production use you should create a real
descendent of the class you want to extend (with a new class name),
install it (if it is a component) and use it also at design-time.


Flocke 5. Okt 2007 13:55

Re: Label.canvas beschreiben
 
Zitat:

Zitat von messie
Wie bekomme ich da jetzt ein OnPaint rein wenn ich Paint überschrieben habe?

Mach' dir das Leben einfach - nimm eine TPaintBox (Palette System) und deren Ereignis OnPaint.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 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