Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   ListView Spaltenbreiten in Datei speichern (https://www.delphipraxis.net/197106-listview-spaltenbreiten-datei-speichern.html)

DieDolly 18. Jul 2018 01:44

ListView Spaltenbreiten in Datei speichern
 
Wie würdet ihr am einfachsten und effektivsten Spaltenbreiten einer ListView in einer Datei speichern?
Ich möchte die gerne speichern und auch wieder laden können.
Mein aktueller Ansatz ist, alle Spalten durchzugehen, die Breite in Prozent (100% = ListView-Breite - 5 für Scrollbar) umzurechnen und zu speichern.

KodeZwerg 18. Jul 2018 02:58

AW: ListView Spaltenbreiten in Datei speichern
 
Beitrag war falsch da TE was anderes machen will als ich Vorschlug.

DieDolly 18. Jul 2018 09:10

AW: ListView Spaltenbreiten in Datei speichern
 
Mir ist vollkommen klar, wie ich Spaltenwerte abfrage.
Mir geht es nur dadrum zu wissen, wie man die Werte am effizientesten speichert und lädt.

Uwe Raabe 18. Jul 2018 09:18

AW: ListView Spaltenbreiten in Datei speichern
 
Zitat:

Zitat von DieDolly (Beitrag 1407632)
Mir geht es nur dadrum zu wissen, wie man die Werte am effizientesten speichert und lädt.

Effizient in Bezug auf was?

DieDolly 18. Jul 2018 09:39

AW: ListView Spaltenbreiten in Datei speichern
 
Gut lesbarer und vielleicht wiederverwendbarer Code (verschiedene Monitore, verschiedene Auflösungen), Prüfungen damit nichts Falsches gespeichert oder geladen wird und sowas.

p80286 18. Jul 2018 11:05

AW: ListView Spaltenbreiten in Datei speichern
 
Kannst Du das etwas genauer ausführen?
Im allgemeinen läuft ein Programm auf einem Rechner mit einem Monitor und einer Auflösung. Zum Abspeichern der notwendigen Angaben sollte ein Record reichen. Lesbarer sind z.B csv, xml oder Json.Es kommtim wesentlichen auf Deine Ansprüche und Möglichkeiten an.

Gruß
K-H

DieDolly 18. Jul 2018 11:18

AW: ListView Spaltenbreiten in Datei speichern
 
Ich möchte gerne die Spaltenbreiten mit wenig Code so abspeichern können, dass die Breiten auf anderen Computern gleich aussehen. Natürlich in einer Ini-Datei. Kein Json, csv oder xml.
Deswegen dachte ich an prozentuale Werte die ausgerechnet und gespeichert werden.

Ist es eine Überlegung wert, wenn ich die Daten (komma-separierter String mit Zahlen) aus einer Ini in ein Record lade und dann beim ändern der Spaltenbreiten immer das Record aktualisiere?
So könnte ich beim Programmende auf das Record zugreifen und die Spaltenbreiten speichern.

Jasocul 18. Jul 2018 12:02

AW: ListView Spaltenbreiten in Datei speichern
 
Wenn du dir im Record auch noch merkst, ob überhaupt etwas geändert wurde, kannst du auch noch steuern, ob du überhaupt speichern musst.
Ich würde alle Spalten speichern, bis auf die letzte. Dazu die Breite des ListView. Dann kannst du alle Spalten berechnen und die letzte Spalte bekommt den übrig gebliebenen Platz.

Das hat den Vorteil, dass Rundungsfehler durch die prozentuale Berechnung ziemlich egal sind.

DieDolly 18. Jul 2018 12:05

AW: ListView Spaltenbreiten in Datei speichern
 
Könntest du dazu ein kleines Beispiel bereitstellen?

Jasocul 18. Jul 2018 12:20

AW: ListView Spaltenbreiten in Datei speichern
 
Zitat:

Zitat von DieDolly (Beitrag 1407654)
Könntest du dazu ein kleines Beispiel bereitstellen?

Sorry, soviel Zeit habe ich nebenbei nicht.
Wie man eine INI-Datei verwendet, sollte dir klar sein.
Das Record könnte so aussehen:
Delphi-Quellcode:
MyRecord = Record
  Changed : Boolean;
  TotalWidth : Integer;
  WidthCol1 : Integer;
  WidthCol2 : Integer;
  WidthCol3 : Integer;
 ...
end;

//EDIT:
//Einfacher dürfte es werden, wenn die Spaltenbreiten als Array verwaltet werden.
Die Breite der letzten Spalte musst du dir nicht merken.
Changed muss nach dem Einlesen aus der Ini-Datei mit False vorbelegt werden.
Bei Veränderung der Spaltenbreite setzt du Changed auf True und belegst die Spaltenbreiten mit den neuen Werten.

Wenn du die Daten in der Anwendung neu einliest, musst du die TotalWidth mit dem Wert des ListView vergleichen und daraus einen Umrechnungs-Faktor ermitteln. Mit diesem multiplizierst du dann die eingelesenen Werte der Spalten.

Das ist aber nur ein Beispiel-Ansatz.

Du kannst natürlich auch einfach so eine Komponente verwenden.:wink:

KodeZwerg 18. Jul 2018 12:40

AW: ListView Spaltenbreiten in Datei speichern
 
Zitat:

Zitat von DieDolly (Beitrag 1407650)
Ich möchte gerne die Spaltenbreiten mit wenig Code so abspeichern können, dass die Breiten auf anderen Computern gleich aussehen.

Ich habe absolut keine Ahnung was Du bezwecken willst, das was Du schreibst macht der Kompiler automatisch, nennt sich Skalieren.
Du kannst natürlich im Create oder ReSize Part eine prozentuale Breite definieren lassen. (ohne speichern)

DieDolly 18. Jul 2018 12:43

AW: ListView Spaltenbreiten in Datei speichern
 
Alles verstanden, bis auf das mit dem Umrechnungsfaktor.
@KodeZwerg ich denke du liest zuviel Zwischen den Zeilen.

Zitat:

Du kannst natürlich auch einfach so eine Komponente verwenden.
Viel Automatismus kann auch viele Probleme verursachen. Dann doch lieber per Hand.

Jasocul 18. Jul 2018 12:47

AW: ListView Spaltenbreiten in Datei speichern
 
Zitat:

Zitat von DieDolly (Beitrag 1407667)
Alles verstanden, bis auf das mit dem Umrechnungsfaktor.

Auf dem einen Rechner ist die Breite 300 px und auf dem anderen 450.
Das heißt, alles müsste mit 1,5 (450/300) multipliziert werden. Das wäre dann der Umrechnungsfaktor.

DieDolly 18. Jul 2018 13:25

AW: ListView Spaltenbreiten in Datei speichern
 
Verstehe ich noch immer nicht. Auf einem anderen könnte es genau so gut 200, 300 oder 700 sein.
Warum nicht einfach die Pixel in Prozentumrechnen und abspeichern?

KodeZwerg 18. Jul 2018 13:28

AW: ListView Spaltenbreiten in Datei speichern
 
Zitat:

Zitat von DieDolly (Beitrag 1407667)
ich denke du liest zuviel Zwischen den Zeilen.

Wird wohl so sein. Viel Glück was auch immer Du da machen willst.

Schokohase 18. Jul 2018 13:30

AW: ListView Spaltenbreiten in Datei speichern
 
@DieDolly

Dann gib doch mal ein konkretes Beispiel, wie du dir das vorstellst.

Gesamte Breite und die Breite der Spalten auf dem Rechner A
und wie die Spaltenbreiten auf Rechner B sein sollen, wenn dort die Gesamtbreite = Gesamtbreite auf Rechner A + X ist.

@KodeZwerg
Zu deinem Code aus deinem ersten Beitrag hier solltest du noch schreiben
Zitat:

Betreten der Baustelle verboten.
Eltern haften für ihre Kinder.
Das ist schon sehr grausliger Code

EDIT: Sehe gerade, der ist ja gottlob schon entfernt worden

KodeZwerg 18. Jul 2018 13:38

AW: ListView Spaltenbreiten in Datei speichern
 
Zitat:

Zitat von Schokohase (Beitrag 1407680)
Zu deinem Code aus deinem ersten Beitrag hier solltest du noch schreiben
Zitat:

Betreten der Baustelle verboten.
Eltern haften für ihre Kinder.
Das ist schon sehr grausliger Code

Zitat:

Zitat von KodeZwerg (Beitrag 1407599)
Delphi-Quellcode:
IntegerDummy := EineListView.Columns[0].Width;
enthält den Wert. Ersetze die "0" mit der "Spalten-Nummer -1" wo Du den Wert brauchst, das setzen geht genauso von statten.
Delphi-Quellcode:
EineListView.Columns[0].Width := IntegerDummy;
Hilft Dir das?

Absolut, gebe ich 100% Recht und habs entfernt da TE nicht Spaltenbreiten sichern und laden will sondern irgend einen anderen Quatsch.

Schokohase 18. Jul 2018 13:43

AW: ListView Spaltenbreiten in Datei speichern
 
Zitat:

Zitat von KodeZwerg (Beitrag 1407685)
Absolut, gebe ich 100% Recht und habs entfernt da TE nicht Spaltenbreiten sichern und laden will sondern irgend einen anderen Quatsch.

Du hast dem TE versucht zu erklären, wie er die Spaltenbreiten lesen und setzen kann.
Dabei hat der TE im ersten Beitrag schon durchblicken lassen, das er genau das kann
Zitat:

Zitat von DieDolly (Beitrag 1407598)
Mein aktueller Ansatz ist, alle Spalten durchzugehen, die Breite in Prozent (100% = ListView-Breite - 5 für Scrollbar) umzurechnen und zu speichern.

Ich bezog mich aber auf den Code im Allgemeinen und der war sehr grauslig und den sollte niemand einfach so übernehmen.

Anyway, der Code ist ja weg und kann daher niemanden (vor allem Anfänger) verwirren.

DieDolly 18. Jul 2018 13:52

AW: ListView Spaltenbreiten in Datei speichern
 
Zitat:

da TE nicht Spaltenbreiten sichern und laden will sondern irgend einen anderen Quatsch.
Was ist am folgenden nicht verständlich?
Zitat:

Wie würdet ihr am einfachsten und effektivsten Spaltenbreiten einer ListView in einer Datei speichern?
Ich möchte die gerne speichern und auch wieder laden können.
Ich rechne einfach weiter alles in Prozent um und speichere das dann. Die Idee mit dem Record werde ich übernehmen.

KodeZwerg 18. Jul 2018 13:58

AW: ListView Spaltenbreiten in Datei speichern
 
Zitat:

Zitat von DieDolly (Beitrag 1407650)
Ich möchte gerne die Spaltenbreiten mit wenig Code so abspeichern können, dass die Breiten auf anderen Computern gleich aussehen. Natürlich in einer Ini-Datei. Kein Json, csv oder xml.
Deswegen dachte ich an prozentuale Werte die ausgerechnet und gespeichert werden.

Ist es eine Überlegung wert, wenn ich die Daten (komma-separierter String mit Zahlen) aus einer Ini in ein Record lade und dann beim ändern der Spaltenbreiten immer das Record aktualisiere?
So könnte ich beim Programmende auf das Record zugreifen und die Spaltenbreiten speichern.

@Schokohase: Das ist es was mich mehr als verwirrt. Von Hause aus skaliert der Kompiler die GUI so das sie auf den meisten Pc gleich aussieht. Also will der TE die interne GUI Skalierung selbst in die Hand nehmen um das gleiche Ergebnis zu erzielen?
Ich bin gespannt was passiert wenn auf anderem Pc eine andere Dpi gesetzt ist:stupid:

Jasocul 18. Jul 2018 13:59

AW: ListView Spaltenbreiten in Datei speichern
 
Zitat:

Zitat von DieDolly (Beitrag 1407677)
Verstehe ich noch immer nicht. Auf einem anderen könnte es genau so gut 200, 300 oder 700 sein.
Warum nicht einfach die Pixel in Prozentumrechnen und abspeichern?

Viele Wege führen nach Rom. :wink:

EWeiss 18. Jul 2018 14:04

AW: ListView Spaltenbreiten in Datei speichern
 
Zitat:

Ich bin gespannt was passiert wenn auf anderem Pc eine andere Dpi gesetzt ist
Wo ist das Problem die kann man ermitteln oder?

gruss

DieDolly 18. Jul 2018 14:12

AW: ListView Spaltenbreiten in Datei speichern
 
Zitat:

Von Hause aus skaliert der Kompiler die GUI so das sie auf den meisten Pc gleich aussieht. Also will der TE die interne GUI Skalierung selbst in die Hand nehmen um das gleiche Ergebnis zu erzielen?
Seit wann skaliert ein Delphi-Programm die Breite der ListView-Spalten selber? Und selbst wenn, muss man das sicher erst aktivieren.
Das ist aber nicht das was ich brauche. Ansonsten würde der Titel anders lauten.

Meine Frage wurde beantwortet. Ihr könnt nun aufhören euch die Köpfe einzuschlagen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 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