![]() |
Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrlGrid
Liste der Anhänge anzeigen (Anzahl: 1)
Moin, moin,
Habe eine eigene DBText-Komponente die auf einem Formular auch bestens Funktioniert. Auf einem DBGrid wird sie aber nicht auf allen Panels angezeigt. Woran liegt das :?: Mich interessiert das auch für komplexere Komponenten. Mir fehlt wohl irgendein Ereignis zum Neuzeichnen. Ok soweit so lausig... Im Anhang liegt ein Beispielprojekt (D6), wo die Kompo dynamisch erzeugt wird, damit man zum Testen nichts installieren muß. Viele Grüße // Martin |
Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl
Hallo Martin,
ich kann keine Anomalie feststellen. Ich habe die Unit UDBText in der Uses-Klausel nach ganz hinten verschoben, damit auch mit deiner Komponente getestet wird. Hast du Hinweise, wie ich dein Anzeigeproblem nachvollziehen könnte? Freundliche Grüße |
Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl
Schönen Morgen,
Die Probleme fangen an, wenn man die Datensätze wechselt. Meine Komponente liegt rechts neben dem "Test" auf dem DBCtrlGrid (nicht die Große ganz rechts). Das lausige Ding akutaliseirt bei mir nicht in allen Panels, sondern nur im geradea akutellen Panel. Folge: Die anderen Panels bleiben leer. Viele Grüße // Martin PS: Man kann die Parenteigenschaft meiner Kompo ändern, dann erscheint Sie auch auf anderen Elementen, da ist natürlich kein Problem, da keien weiteren Panels gezeichnet werden müssen. |
Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl
Nicht deine Komponente ist das Problem, sondern die Art wie du sie zur Laufzeit auf das Grid klebst. Durch meine Änderung an deiner Uses-Klausel habe ich ja auch rechts deine Komponente - und die funktioniert, soweit ich das erkennen kann.
|
Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl
Liste der Anhänge anzeigen (Anzahl: 1)
Das Problem tritt nur bei DBCtrlGrid auf.
Hm, irgendwie reden wir noch aneinander Vorbei... weiß der Geier... Tja, ich probier das mal mit einer Grafik, dass bringt dies doch anschaulicher. An die Stelle wo ich von Hand den roten Pfeil gezeichnet habe, müßte die Komponente eigentlich "1351" anzeigen. Tut sie nicht. Es bleibt leer. Da hakt es. Dafür zeigt sie die 1351 eine Zeile weiter oben an, wo eigentlich "1231" steht. Viele Grüße // Martin PS: Egal ob installiert oder dynamisch erzeugt, bekomme ich folgendes Verhalten: |
Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl
Hallo mschaefer,
ich kann Deinen Quelltext hier im Dienst nicht laden und testen (ich weiß also nicht, was Deine Kompo genau anders macht), daher nur mal eine Vermutung: Vielleicht wird sie ja gezeichnet und zeigt nur einen Leerstring an. Ändere doch zuerst mal die Hintergrundfarbe oder füge dem Ausgabetext die aktuelle Uhrzeit hinzu. Wenn nur die Uhrzeit angezeigt wird, erfolgt die Anzeige, aber der "Feldinhalt" ist leer. Das könnte dann möglichweise am Datensatzpuffer liegen. Das Problem hatte ich bei einer eigenen Dantenbankkomponente (die mehrere Datensätze anzeigt) auch schon. Ich musste dann noch den Puffer in einer ausreichenden Größe festlegen. (hoffe, das bringt Dir was) Stahli |
Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl
Hallo Martin,
sehe auch nicht, was da genau los ist. Allerdings fällt mir folgendes auf :
Delphi-Quellcode:
Die Klasse heißt genauso wie die von Delphi, nämlich "TDBText". :shock: Ob das mal gutgeht. Das nächste ist die Ableitung von TCustomLabel. Wozu das ? Dadurch handelst Du dir ein, tatsächlich mit den Datalinks rumhantieren zu müssen und sämtliche Sachen vom TLabel nachprogrammieren zu müssen. Wieso nicht das TLabel verwenden ? Und diese erweitern.
TDBText = class(TCustomLabel)
Habe selber einige DB-Komponenten. Bei denen bin ich aber immer von den Delphi-eigenen für DBs ausgegangen. In diesem Falle wäre das eben ein TDBText. Wo kommen die Infos über das DataLink eigentlich her ? Normalerweise kennt die keiner. :mrgreen: Außer Marco Cantu. |
Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl
... da kommen wir der Sache schon näher ;-)
So ahnlich habe ich das auch gemacht. Ich habe mehrere Standardkomponenten und die DB-fähig gemacht, indem ich diese mit meinen zwei Komponenten DBSqlID bzw. DBSqlWhere erweitert und verbunden habe. Beide sind von DBSqlCustom abgeleitet. DBSqlId ist relativ einfach aufgebaut und gibt Inhalte eines Datensatzes zurück (benutze ich derzeit in DBPanelSql, DBLabelSql, DBEditSql, DBRadioGroupSql, DBUpDownSql). DBSqlWhere ermöglicht es, mehrere Datensätze anzuzeigen (derzeit DBPanelsSql, DBTabControlSql), dafür muss ein entsprechender Datensatzpuffer eingerichtet werden, sonst gibt es bei Zugriffen nur Leerstrings. Die Besonderheiten meiner Kompos sind: - Anzeige beliebiger Datensätze (abhängig von einem ID-Feld und unabhängig vom aktuellen Datensatz) - sofortiges Ändern in der Datenbank (jeder eingegebene Buchstabe im DBEditSql ist sofort in allen anderen Datenbankkomponenten zu sehen - Änderungen von Join-Datenmengen, indem dazu lediglich eine UpdateTabelle, UdateIdField und UpdateIdValue definiert werden muss - filtern und sortieren von Datenmengen, einstellbar in der Komponente selbst - automatisches Drag&Drop für das Verschieben von Datensätzen (es muss ein PosField definiert werden und die Komponente ändert dann die entsprechenden Positionswerte) - koppeln und entkoppeln von Datenmengenkomponenten (jede kann also unterschiedliche Datensätze anzeigen oder diese mit anderen syncronisieren) Was macht denn Deine Komponente besonderes? Nutzt Du nur den aktuellen Datensatz der Datenmenge oder auch mehrere Datensätze? Stahli PS: Mit den FieldDataLinks habe ich mich mehrere Wochen beschäftigt ;-) |
Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl
Ja ich habe den Weg gewählt, weil ich das Verhalten von erweiterten Non-DB-Komponenten 1:1 bei den DB-Kompos haben wollte. Das sind manchamal ganz triviale Dinge:
z.B. 1: ein Memo, das seine Hintergrundfarbe beim Anklicken ändert. Damit ich das nicht beim DBMemo nochmal programmieren mußte, ist das mit einer Overlayclasse dann DB-fähig gemacht worden. z.B. 2: eine Labelkomponente die alle Linefeeds ausfiltert und nur eine bestimmte Anzahl Zeichen anzeigt. Die wird als Vorschaukomponente in einer Listenausgabe auf die Daten eines Memos der Detailansicht angestzt. Der Weg hat mir schon viel Arbeit abgenommen, aber das DBCtrlGrid-Problem habe ich leider bei einer Reihe von Kompos bisher nicht gelöst bekommen. @Hansa: Das mit dem DBText als gleichen Namen macht vielleicht was aus. Bei mir geht es, bei Marabu nicht oder nur mit Usesumstellung. Du hast natürlich recht, wenn Du darauf Hinweist, dass man solche Benennugen besser lassen sollte. Brauchte ein möglichst einfaches Projektbeispiel und mit erweiterten Memos wird das recht komplex. Viele Grüße // Martin PS: @stahli habe keine Komponenten dabei, die mehrere Datensätze bearbeiten. Da bist Du wohl weiter! PPS: Jetzt habe ich "Marco Cantu" doch erstmal gogglen müssen. Die Idee mit dem DataLink kam bei einem Projekt, was zeitlich hart an der Crashgrenze war. Aber Marco könnte man mal ja noch fragen... |
Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl
Hallo Martin,
Zitat:
Zitat:
Freundliche Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz