TField.DisplayWidth und TDataModule

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
MmVisual
Beiträge: 1248
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
CPU-Target: 32/64Bit

TField.DisplayWidth und TDataModule

Beitrag von MmVisual »

Hallo,

Ich habe eine Routine geschrieben, die automatisch beim Beenden vom Programm alle Tabellen im Formular findet und je Feld die "DisplayWidth" abspeichert.
Das funktioniert auch alles wenn das Formulat eine TForm ist. Jedoch wenn ich das bei TDataModule genau gleich mache, dann ist "DisplayWidth" immer 0.
Also es gibt bei mir nur eine Einzige Rotine ich rufe ich immer bei OnDestroy auf, die macht das dann, egal ob TForm oder TDataModule.

Ich verstehe jetzt nicht warum das bei TDataModule anders ist. Muss man noch eine Option in TDataModule aktivieren?
Ich meine auch dass es früher mal funktioniert hatte. Ich weiß jetzt nicht ob es an Lazarus V2.0.12 oder Zeos liegt. Doch ich denke es liegt an Lazarus, da TField ja nicht von Zeos kommt. Sollte es doch an Zeos liegen, schreibe ich bei denen ein Bugticket.
Bild1.png
Bild1.png (5.54 KiB) 1245 mal betrachtet
Vielen Dank für die Hilfe.

VG Markus

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5196
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: TField.DisplayWidth und TDataModule

Beitrag von af0815 »

In einem nicht visuellen Datamodul, kann es keine Zuordnung zu visuellen Eigenschaften geben. Anhand welcher Parameter soll da eine Breite in der Anzeige errechnet werden?
Kann sein, das dein Code funktioniert, solange ein visuellen Objekt gebunden ist. Das vermute ich, das sich die Reihenfolge beim Zerstören geändert hat.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MmVisual
Beiträge: 1248
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
CPU-Target: 32/64Bit

Re: TField.DisplayWidth und TDataModule

Beitrag von MmVisual »

Mein Formular ist schon so dermaßen überladen, da dachte ich lagere mal langsam die TZQuery auf das TDataModul aus. Das TDataModul ist ja im Prinzip auch eine "Müllhalde" für alles was mit Datenbanken zu tun hat. (Bzw. wenn man Query's in mehreren Formularen nutzen möchte)
Und in der TForm.DBGrid.Dataset kann man ja TDataModul.TZQuery problemlos zuweisen.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5196
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: TField.DisplayWidth und TDataModule

Beitrag von af0815 »

Dann sollte nur das Form die visuellen Sachen speichern, das macht im DM ja keinen Sinn.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MmVisual
Beiträge: 1248
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
CPU-Target: 32/64Bit

Re: TField.DisplayWidth und TDataModule

Beitrag von MmVisual »

Finde ich dennoch nicht richtig dass in TDM das "DisplayWidth" einfach immer 0 ist.

charlytango
Beiträge: 490
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz 2.0 fixes FPC 3.2 fixes
CPU-Target: Win 32Bit, 64bit
Wohnort: Wien

Re: TField.DisplayWidth und TDataModule

Beitrag von charlytango »

Habe ich das richtig verstanden dass du die DisplayWidth eines TDataModule auslesen möchtest?
Wozu ?

Ein TDatamodule ist ein "visueller" Container für nicht visuelle Objekte.
Ein TDM ist im laufenden Programm ja nicht sichtbar ???

Du wirst dir sicher etwas dabei gedacht haben, mir erschließt sich der Sinn hier nicht ??

Bezüglich überladener Formulare empfehle ich den Gebrauch von eingedockten Formularen oder Frames.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5196
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: TField.DisplayWidth und TDataModule

Beitrag von af0815 »

MmVisual hat geschrieben:
Sa 25. Sep 2021, 21:33
Finde ich dennoch nicht richtig dass in TDM das "DisplayWidth" einfach immer 0 ist.
Ist völlig korrekt, das DM ist nicht sichtbar bzw. Hat kein Fenster, somit kann die DisplayWidth nur 0 sein.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MmVisual
Beiträge: 1248
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
CPU-Target: 32/64Bit

Re: TField.DisplayWidth und TDataModule

Beitrag von MmVisual »

Das ist es eben, wenn den TDataModul als Container für Daten verwendet, die man wiederum mit einem Formular verbindet, dann gibt es Gulasch und funktioniert nicht korrekt.

Das heißt aber auch, wenn man so ein TDataModul nicht als Container für Daten nutzen kann, dann ist das ganze TDataModul komplett sinnlos dass es überhaupt existiert. -> sollte vielleicht mal jemand löschen.

PS: Damals, vor vielen Jahren, als ich noch Delphi programmiert hatte, hat das mit der DisplayWidth im TDataModule noch korrekt funktioniert. Daher verstehe ich nicht wieso das nun so "hipp" ist dass es jetzt wegopimiert wurde.

Grüße Markus

Benutzeravatar
gladio
Beiträge: 167
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: TField.DisplayWidth und TDataModule

Beitrag von gladio »

wenn du so sehr Wert auf das DisplayWidth legst, dann kannst du doch deine Danetnkomponenten auf ein normales Formular legen, das du niemals anzeigst

MmVisual
Beiträge: 1248
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
CPU-Target: 32/64Bit

Re: TField.DisplayWidth und TDataModule

Beitrag von MmVisual »

Jop, werde ich wohl so umbauen müssen.

wp_xyz
Beiträge: 4323
Registriert: Fr 8. Apr 2011, 09:01

Re: TField.DisplayWidth und TDataModule

Beitrag von wp_xyz »

Jetzt müsst ihr mir Nachhilfe geben: DisplayWidth ist doch eine Eigenschaft von TField. Was hat das damit zu tun, ob die zugehörige Dataset-Komponente auf einem Formular oder einem Datenmodul liegt?

MmVisual
Beiträge: 1248
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
CPU-Target: 32/64Bit

Re: TField.DisplayWidth und TDataModule

Beitrag von MmVisual »

Jop. Genau. Da war ich auch erstaunt.

wp_xyz
Beiträge: 4323
Registriert: Fr 8. Apr 2011, 09:01

Re: TField.DisplayWidth und TDataModule

Beitrag von wp_xyz »

Das beigefügte Beispiel zeigt, dass Field.DisplayWidth sehr wohl sinnvolle Werte enthält, wenn der zugehörige Dataset auf einem Datamodule liegt.
Dateianhänge
field_displaywidth.zip
(3.09 KiB) 45-mal heruntergeladen

MmVisual
Beiträge: 1248
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
CPU-Target: 32/64Bit

Re: TField.DisplayWidth und TDataModule

Beitrag von MmVisual »

Ich muss dir recht geben, dein Beispiel, umgebaut auf Zeos funktioniert. Ich habe in DataModuleCreate() die DislayWidth auf einen anderen Wert gesetzt, der wurde korrekt übernommen und im DataModuleDestroy() ist der auch noch sichtbar.

Sorry, dass ich euch belästigt habe, ich habe danach schon ziemlich lange gesucht, dann muss der Fehler doch noch wo anders begraben sein.

Dankeschön,

VG Markus

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5196
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: TField.DisplayWidth und TDataModule

Beitrag von af0815 »

Ich schrieb am Anfang, das wenn die Verbindung zur visuellen Komponente fehlt es zu Problemen kommt.

Ich bin immer noch der Meinung, das dort dein Problem begraben ist. Den wenn es keine visuelle Komponente zu dem Zeitpunkt gibt, so kann es kein Ergebnis geben.

Eine Abhilfe könnte sein, das Datenmodul selbst zu erstellen und auch selbst freizugeben.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten