TGraphicControl -> Ableitung neuer Komponeneten
- af0815
- Lazarusforum e. V.
- Beiträge: 6209
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
TGraphicControl -> Ableitung neuer Komponeneten
Ich arbeite derzeit mit Komponenten von Jim Cooper (diagramming classes), die sind mittlerweile auch in der Jedi (unter Beispiele) drinnen.
Dort werden die Komponenten, weil sie grafisch sind, von TGraphicControl abgeleitet. Bis jetzt bin ich da auf einige liebe Eigenschaften drauf gekommen :cry: :shock:
*) Wenn keine Höhe und/oder Breite gesetzt, dann funktioniert die Vererbung von 'paint' nicht -> so als würde das virtual/override fehlen !!
*) Der Canvas ist nur so groß wie die Komponente, alles andere wird nicht gezeichnet -> also clipping auf die eigene Region.
Gibt es noch so Informationen zu TGraphicControl ?
Dort werden die Komponenten, weil sie grafisch sind, von TGraphicControl abgeleitet. Bis jetzt bin ich da auf einige liebe Eigenschaften drauf gekommen :cry: :shock:
*) Wenn keine Höhe und/oder Breite gesetzt, dann funktioniert die Vererbung von 'paint' nicht -> so als würde das virtual/override fehlen !!
*) Der Canvas ist nur so groß wie die Komponente, alles andere wird nicht gezeichnet -> also clipping auf die eigene Region.
Gibt es noch so Informationen zu TGraphicControl ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: TGraphicControl -> Ableitung neuer Komponeneten
af0815 hat geschrieben:
Ich kann deine Entrüstung nicht nachvollziehen.
Was soll denn gemalt werden, wenn es keine Grösse hat?
Wohin sonst als in den eigenen Bereich soll denn gemalt werden?
- af0815
- Lazarusforum e. V.
- Beiträge: 6209
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Ich kann deine Entrüstung nicht nachvollziehen.
Nicht Entrüstung sondern Überraschung. Denn wenn das Ding keine Ausdehnung hat, so habe ich erwartet, das die Vererbung funktioniert. Denn nur den 'paint' von TObject aufzurufen und nicht die richtige, ist schon ein bischen stark. Was ich im paint mache (vielleicht die größße prüfen und gegebenfalls ändern) ist einmal egal. Ich habe ja so nicht einmal die Chance sowas zu checken. Und was ist, wenn ich dann im paint am Canvas des Parents etwas machen will ?!
@pluto: Das ist nicht unüberwindlich Dafür hat sie fast keinen Overhead.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815 hat geschrieben: so habe ich erwartet, das die Vererbung funktioniert.
Naja, die "Vererbung" wird wohl schon funzen, bloss Paint wird halt nicht aufgerufen, wieso auch?
af0815 hat geschrieben:Was ich im paint mache (vielleicht die größße prüfen und gegebenfalls ändern) ist einmal egal. Ich habe ja so nicht einmal die Chance sowas zu checken. Und was ist, wenn ich dann im paint am Canvas des Parents etwas machen will ?!
Ich will nicht ausschliessen, dass ich einfach nicht verstehe was du machen willst, aber
für mich klingt das alles ein bisschen verworren und nach Holzweg.
Nimm doch die dafür geeigneten Events wie OnResize, OnChangeBounds etc..
- af0815
- Lazarusforum e. V.
- Beiträge: 6209
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
@theo
Eben NICHT, es wird definitiv das falsche Paint aufgerufen. Wenn keines aufgerufen worden wäre, so hätte ich es noch verstanden, nur die Vererbung sterben zu lassen und nur Paint des TObject aufzurufen, ist mir zu steil.
@pluto
Meistens die Daten, mit denen ich zeichnen will, prüfe ich. Und 'divisions by zero' sind ziemlich lästig, wennst du vielleicht skalierst.
@all
Ok, es hat sich also noch niemand wirklich mit TGraphicControl beschäftigt und meine Frage war ja lediglich, ob wer noch Informationen hat.
af0815 hat folgendes geschrieben:
so habe ich erwartet, das die Vererbung funktioniert.
Naja, die "Vererbung" wird wohl schon funzen, bloss Paint wird halt nicht aufgerufen, wieso auch?
Eben NICHT, es wird definitiv das falsche Paint aufgerufen. Wenn keines aufgerufen worden wäre, so hätte ich es noch verstanden, nur die Vererbung sterben zu lassen und nur Paint des TObject aufzurufen, ist mir zu steil.
@pluto
Meistens die Daten, mit denen ich zeichnen will, prüfe ich. Und 'divisions by zero' sind ziemlich lästig, wennst du vielleicht skalierst.
@all
Ok, es hat sich also noch niemand wirklich mit TGraphicControl beschäftigt und meine Frage war ja lediglich, ob wer noch Informationen hat.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815 hat geschrieben:Eben NICHT, es wird definitiv das falsche Paint aufgerufen. Wenn keines aufgerufen worden wäre, so hätte ich es noch verstanden, nur die Vererbung sterben zu lassen und nur Paint des TObject aufzurufen, ist mir zu steil.
Wie soll denn das gehen? Wie hast du das "festgestellt"?
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Wie soll denn das gehen? Wie hast du das "festgestellt"?
ich vertrau af jetzt einfach mal und sag: "per debugger ?"
dann hast du evlt. in deinem abgeleitet klasse die methode nicht mit override gegenzeichnet !
siehe senf dazugeben im anderen thread. wenn er die methode nicht mit override gekennzeichnet hätte wär der code nicht compilierbar gewesen
@af0815
wenn du dir sicher bist, -> bugreport denk der dürfte in ner woche erledigt sein nach meinen erfahrungen zumal die 0.9.22 bald raus ist und alles an gravierenden fehler in pre 0.9.22 geschoben wird jetzt. denk die 0.9.22 wird sehr schön und stabil
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Wie soll denn das gehen? Wie hast du das "festgestellt"?Christian hat geschrieben:ich vertrau af jetzt einfach mal und sag: "per debugger ?"
Dann erklär mir doch bitte mal Teil 1 der Frage. Wie kann man die "Vererbung sterben lassen" aufgrund von Werten die zur Laufzeit gesetzt werden?
Das würde mich ernsthaft interessieren.
- af0815
- Lazarusforum e. V.
- Beiträge: 6209
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
@Christian
Du hast recht, mit dem debugger, ich hatte sogar in jeder von mir in der Vererbung angelegten Klasse die Breakpoints (in paint) sitzen, bzw. habe paint explizit aufgerufen und getraced.
@theo
Ich glaube nicht, das das Verhalten ein Bug ist. Da hat der Compiler/Linker eventuell schon recht. NUR DAS VERHALTEN IST NICHT DOKUMENTIERT.
Das kann dir bei anderen Komponenten auch ganz schön Ärger machen. Ich habe auf der Mailingliste dann auch schon sehen müssen mit der TGraphicControl, das die spärliche Doku erst an das eigentümliche Verhalten bezüglich Canvas angepasst wurde.
Ist/war lehrreich
Du hast recht, mit dem debugger, ich hatte sogar in jeder von mir in der Vererbung angelegten Klasse die Breakpoints (in paint) sitzen, bzw. habe paint explizit aufgerufen und getraced.
@theo
Ich glaube nicht, das das Verhalten ein Bug ist. Da hat der Compiler/Linker eventuell schon recht. NUR DAS VERHALTEN IST NICHT DOKUMENTIERT.
Das kann dir bei anderen Komponenten auch ganz schön Ärger machen. Ich habe auf der Mailingliste dann auch schon sehen müssen mit der TGraphicControl, das die spärliche Doku erst an das eigentümliche Verhalten bezüglich Canvas angepasst wurde.
Ist/war lehrreich
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
Wenn man aber richtig mit override überschrieben hat, dann sollte man in der Paint-Methode regelmäßig auch ein inherited loslassen, sonst ist die Vorgänger-Methode nämlich wirklich und endgültig "überschrieben" was ja auch durch "override" ausgesagt wird.
Vielleicht hapert's an dem inherited, obwohl das manchmal etwas lästig ist damit zu arbeiten.
Vielleicht hapert's an dem inherited, obwohl das manchmal etwas lästig ist damit zu arbeiten.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)
af0815 hat geschrieben:Ich glaube nicht, das das Verhalten ein Bug ist. Da hat der Compiler/Linker eventuell schon recht. NUR DAS VERHALTEN IST NICHT DOKUMENTIERT.
Naja, man hat aber die Sourcen
Ich würde mal tippen, dass dein "Hund" hier begraben liegt:
wincontrol.inc Line 3021
Code: Alles auswählen
procedure TWinControl.PaintControls(DC: HDC; First: TControl);
dort wird doch einfach
Code: Alles auswählen
RectVisible(DC, Rect(Left, Top, Left + Width, Top + Height)
niemals true wenn das Rect keine Dimensionen hat und somit auch
Code: Alles auswählen
Perform(LM_PAINT, WParam(DC), 0);
nie aufgerufen und somit wird auch das nicht ausgeführt:
Code: Alles auswählen
procedure TGraphicControl.WMPaint(var Message: TLMPaint);
und damit auch:
Code: Alles auswählen
procedure TGraphicControl.Paint;
nicht.
Alles ganz normal und kein Vererbungs-Voodoo, oder?
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
@theo
Sichert es aber nicht auch die Parent-Methode ab, das bei Aufruf von inherited trotzdem im Parent ausgeführt auch wenn die HxB-Dimension gleich 0 wird?
Zumindest müßte er dann im Debugger den Aufruf hinkriegen und nachvollziehen können warum das nicht geht.
Sichert es aber nicht auch die Parent-Methode ab, das bei Aufruf von inherited trotzdem im Parent ausgeführt auch wenn die HxB-Dimension gleich 0 wird?
Zumindest müßte er dann im Debugger den Aufruf hinkriegen und nachvollziehen können warum das nicht geht.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)