TField.DisplayWidth und TDataModule

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
wp_xyz
Beiträge: 4323
Registriert: Fr 8. Apr 2011, 09:01

Re: TField.DisplayWidth und TDataModule

Beitrag von wp_xyz »

Das glaube ich nicht. Da folgende Programm ist ein Konsolen-Programm und zeigt Werte für Field.DisplayWidth an, ohne dass irgendeine visuelle Komponente im Spiel sein kann (die dbf-Datei stammt aus meinem vorigen Post):

Code: Alles auswählen

program project2;

uses
  SysUtils, db, dbf, TypInfo;
var
  dataset: TDbf;
  f: TField;
begin
  dataset := TDbf.Create(nil);
  try
    dataset.FilePathFull := ExtractFilePath(Paramstr(0));
    dataset.TableName := 'DeadlyMushrooms.dbf';
    dataset.Open;
    for f in dataset.Fields do
      WriteLn(
        'FieldNo ', f.FieldNo, ': ',
        f.FieldName,
        ', DataType: ', GetEnumName(TypeInfo(TFieldType), integer(f.DataType)),
        ', Size: ', f.Size,
        ', DataSize: ', f.DataSize,
        ', DisplayWidth ', f.DisplayWidth
      );
  finally
    dataset.Free;
  end;

  ReadLn;
end. 

Code: Alles auswählen

FieldNo 1: ID, DataType: ftInteger, Size: 0, DataSize: 4, DisplayWidth 10
FieldNo 2: SCIENTIFIC, DataType: ftString, Size: 30, DataSize: 31, DisplayWidth 30
FieldNo 3: COMMONNAME, DataType: ftString, Size: 30, DataSize: 31, DisplayWidth 30
FieldNo 4: ORDER, DataType: ftString, Size: 20, DataSize: 21, DisplayWidth 20
FieldNo 5: GENUS, DataType: ftString, Size: 20, DataSize: 21, DisplayWidth 20
FieldNo 6: NOTES, DataType: ftMemo, Size: 0, DataSize: 0, DisplayWidth 10
FieldNo 7: PICTURE, DataType: ftBlob, Size: 0, DataSize: 0, DisplayWidth 10

Soner
Beiträge: 513
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: TField.DisplayWidth und TDataModule

Beitrag von Soner »

Ich frage mich was DisplayWidth mit visuelle Komponenten zu tun hat. Sowohl bei der FreePascal- als auch bei der Delphidokumentation steht geschrieben, dass DisplayWidth Länge in Zeichen sind und kein Pixel. Also wieviel Zeichen das Feld zur Darstellung braucht.

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 »

Also ich habe das mal in meinem Programm von TDataModule auf TForm umgestellt. Dazu habe ich einfach nur in der PAS Datei die class() abgeändert, dann Lazarus neu gestartet.
Bild1.png
(204.34 KiB) Noch nie heruntergeladen
Beim Starten kamen ein paar Mecker-Meldungen die ich ignoriert habe und Lazarus hat das Laden vom Formular fortgesetzt, das Ergenis, wie Lazarus die LFM Datei automatisch angepasst hat:
Bild2.png
(193.97 KiB) Noch nie heruntergeladen
Wenn ich mit dieser Änderung mein Programm starte / beende und wieder starte, dann werden die DisplayWidth Eingenschaften von TField korrekt gespeichert. Ich kann in der Main-Form im TDBGrid die Spaltenbreite ändern und es wird jedesmal beim Beenden korrekt gespeichert und beim nächsten Start geladen und genau so eingestellt.
Also, wp_xyz hat nicht recht und af0815 hat in meinem Fall recht.
Warum das Demo von wp_xyz dennoch korrekt funktioniert habe ich leider noch nicht heraus gefunden.

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 gehe davon aus das wp_xyz recht hat und ich liege teilweise falsch. Es hängt sicher mit der Reihenfolge zusammen, wie die Komponenten zerstört werden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

Re: TField.DisplayWidth und TDataModule

Beitrag von wp_xyz »

Leider kann man deine Screenshots nicht durch den Compiler und Debugger jagen... So bleibt nur der Blick in die Kristallkugel.

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 »

Den kann ich auch leider nicht schicken, der ist doch etwas größer, das Projekt etwas aufwändiger.
Aber du kannst dich gerne mit meinem PC per AnyDesk verbinden und es debuggen. Dann brauchst du bei dir mein Projekt nicht erst einrichten.
VG Markus

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

Re: TField.DisplayWidth und TDataModule

Beitrag von wp_xyz »

In der Regel lösen sich solche Probleme von selbst, wenn man schrittweise versucht, aus dem Projekt alles zu entfernen, das nichts mit dem Problem zu tun hat, und immer wieder prüft, ob das Problem noch auftritt. Und selbst, wenn du dabei den Fehler nicht selbst gefunden hast, so hast du nun ein minimales Projekt, das du im Forum hochladen kannst.

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 »

Ja, so mache ich das in der Regel auch. In diesem Fall werden ich die TZQuery einfach auf das Hauptformular legen, ist sicherer und funktioniert dann auch. Das Löschen ist in meinem Projekt etwas mehr Aufwand, wenn man nach dem Löschen immer alles zu lauffähig haben möchte dass man das Problem findet...
Thx, VG Markus

Antworten