Delphi-PRAXiS
Seite 1 von 3  1 23      

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 Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrlGrid (https://www.delphipraxis.net/85041-anzeigeproblem-bei-eigener-db-text-komponente-auf-dbctrlgrid.html)

mschaefer 25. Jan 2007 08:53


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

marabu 25. Jan 2007 09:25

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

mschaefer 25. Jan 2007 09:42

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.

marabu 25. Jan 2007 10:15

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.

mschaefer 25. Jan 2007 10:52

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:

stahli 25. Jan 2007 11:51

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

Hansa 25. Jan 2007 12:02

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:
  TDBText = class(TCustomLabel)
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.

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.

stahli 25. Jan 2007 12:34

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 ;-)

mschaefer 25. Jan 2007 12:47

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...

marabu 25. Jan 2007 13:00

Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl
 
Hallo Martin,

Zitat:

Zitat von mschaefer
@Hansa: Das mit dem DBText als gleichen Namen macht hier tatsächlich nichts, da die Projektunit bevorzugt wird.

nicht in deiner Demo. Wie ich schon in Beitrag #2 schrieb, musste ich die Unit UDBTEXT in der Uses-Klausel ans Ende schieben, weil sonst die original VCL-Komponente verwendet wurde. Dadurch habe ich beobachten können, dass dein Anzeigeproblem erstmal nichts mit deiner Komponente zu tun hat, sondern damit, dass die Komponente erst zur Laufzeit auf das Grid gelegt wird.

Zitat:

Zitat von mschaefer
irgendwie reden wir noch aneinander Vorbei

Immer noch?

Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:38 Uhr.
Seite 1 von 3  1 23      

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