AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrlGrid
Thema durchsuchen
Ansicht
Themen-Optionen

Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrlGrid

Ein Thema von mschaefer · begonnen am 25. Jan 2007 · letzter Beitrag vom 27. Jan 2007
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#1

Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrlGrid

  Alt 25. Jan 2007, 08:53
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
Angehängte Dateien
Dateityp: zip projekt_172.zip (435,4 KB, 20x aufgerufen)
Martin Schaefer
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl

  Alt 25. Jan 2007, 09:25
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
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#3

Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl

  Alt 25. Jan 2007, 09:42
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.
Martin Schaefer
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl

  Alt 25. Jan 2007, 10:15
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.
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#5

Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl

  Alt 25. Jan 2007, 10:52
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:
Miniaturansicht angehängter Grafiken
fehler_383.jpg  
Martin Schaefer
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl

  Alt 25. Jan 2007, 11:51
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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl

  Alt 25. Jan 2007, 12:02
Hallo Martin,

sehe auch nicht, was da genau los ist. Allerdings fällt mir folgendes auf :

  TDBText = class(TCustomLabel) Die Klasse heißt genauso wie die von Delphi, nämlich "TDBText". 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. Außer Marco Cantu.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl

  Alt 25. Jan 2007, 12:34
... 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
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#9

Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl

  Alt 25. Jan 2007, 12:47
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...
Martin Schaefer
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Anzeigeproblem bei eigener DB-Text-Komponente auf DBCtrl

  Alt 25. Jan 2007, 13:00
Hallo Martin,

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 von mschaefer:
irgendwie reden wir noch aneinander Vorbei
Immer noch?

Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:46 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