Tabelle / ListIconGadget

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Tabelle / ListIconGadget

Beitrag von Daffy0815 »

Hallo Leute,

wenn ich das richtig sehe, dann ist das Mittel der Wahl zum Aufbau einer Tabelle das "ListIconGadget".

Die Tabelle sieht in etwa so aus:

Code: Alles auswählen

LfdNr      Datum       Zeit      Wert  Einheit Ergebnis
=======================================================
12345678   01.01.2011  17:23:45  2000  Pascal  Undicht
Gibt es eine Möglichkeit bei AddgadgetColumn / AddGadgetItem anzugeben ob die Ausgabe rechtsbündig / linksbündig / zentriert erfolgen soll
oder muss man den einzusetzenden String vorher selbst "zu Fuß" entsprechend zusammenbauen?

Ist es möglich den Font innerhalb der Felder zu ändern (Bei Zahlen wäre MonoSpace günstiger)?

Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Tabelle / ListIconGadget

Beitrag von RSBasic »

@Daffy0815
Leider geht das wieder nur über WinAPI, aber das möchtest du ja nicht.
Das einzige, was ginge ist, die Schriftart des kompl. Gadgets zu ändern, aber Item einzeln zu ändern, ist leider nicht möglich. Sorry.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Tabelle / ListIconGadget

Beitrag von Daffy0815 »

@RSBasic

Na ja, das mit den unterschiedlichen Fonts ist nicht so problematisch.
Ich bin eigentlich nur "zu faul" noch einen 7-Sprachen-8-Bit Font in Monospace zu erstellen.

Das mit der Ausrichtung ist ja lösbar über die Stringbefehle.
Die Sache ist sowieso recht aufwändig da sich die Spaltenbreiten ja je nach Sprache ändern.


Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Tabelle / ListIconGadget

Beitrag von Daffy0815 »

Was mich auch noch interessieren würde:

Kann man mit "AddGadgetItem" auch "oben einfügen"?

Das Ganze ist die Ausgabe eines Ergebnisspeichers bei dem der letzte Eintrag an erster Stelle stehen soll.

Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Tabelle / ListIconGadget

Beitrag von RSBasic »

@Daffy0815
Ja, siehe 2. Parameter "Position":

Code: Alles auswählen

EnableExplicit

Define EventID

If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ListIconGadget(1,10,10,480,380,"",200,0)
  
  AddGadgetItem(1,0,"1. Eintrag",0,0)
  AddGadgetItem(1,0,"2. Eintrag",0,0)
  AddGadgetItem(1,0,"3. Eintrag",0,0)
  
  Repeat
    EventID=WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Tabelle / ListIconGadget

Beitrag von Daffy0815 »

@RSBASIC

Danke!

Funktioniert tatsächlich!
Ich hatte schon befürchtet nach jeder neuen Messung die Datensätze neu sortieren zu müssen.
Ist bekannt bei wie vielen AddGadgetItem`s das System "schlappmacht"?


Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Tabelle / ListIconGadget

Beitrag von RSBasic »

Nur wenn du viele Einträge aufeinmal hinzufügen möchtest, dann dauert es in der Regel recht lange, bis alle Einträge in deinem ListIconGadget hinzugefügt wurden.
Aber für sowas gibt es zwar auch ne Lösung, aber leider für dich nur über WinAPI. Dabei wird das Neuzeichnen temporär deaktiviert, so dass die Einträge schneller hinzugefügt werden können. Aber das System wird dadurch nicht langsamer, es wird nur ein wenig mehr Speicher benötigt.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Tabelle / ListIconGadget

Beitrag von Daffy0815 »

@RSBASIC

Na ja, so ganz im klaren bin ich mir bei der Sache sowieso noch nicht.

Bei meinen Microcontrollergeräten befindet sich der Messwertspeicher als Ringspeicher in einem batteriegepufferten Ram und ist dadurch auf 8000 Datensätze limitiert.
Bei einer PC-Lösung ist dieses Limit zwar (faktisch) nicht vorhanden aber bei Speicherung der Daten in einer Datei besteht halt immer die Gefahr das bei Stromausfall oder unbeabsichtigtem Ausschalten des Gerätes der gesamte Messwertspeicher "zum Teufel geht".
Von daher betrachtet werde ich wohl bei dem batteriegepufferten RAM bleiben.

Das mit dem "einfachen" Ausschalten ist nun mal ein RIESENNACHTEIL der PC-Lösung.

Aber mal interessehalber: Wie würde denn die WinAPI-Lösung zum temporären Aussetzen des Neuzeichnens aussehen?

Gruß

Daffy


PS. Im "Vorwärtsgang" geht die Sache natürlich um Dekaden schneller und was würde mich daran hindern mit fester Satzlänge zu arbeiten und die Datei mit den Messergebnissen "Rückwärts" zu lesen.
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: Tabelle / ListIconGadget

Beitrag von Regenduft »

Daffy0815 hat geschrieben:Ist es möglich den Font innerhalb der Felder zu ändern (Bei Zahlen wäre MonoSpace günstiger)
Bei den meisen Fonts sind Zahlen monospaced, einfach mal austesten (wie hier :wink:):
8888888888888888
1111111111111111
Daffy0815 hat geschrieben:Das mit der Ausrichtung ist ja lösbar über die Stringbefehle.
Wenn ich's nicht falsch verstanden habe, hast Du da einen Denkfehler drin. Wenn du (z.B.) "linksbündig" mit LSet() umsetzen willst geht das nur bei einem monospaced Font.
Daffy0815 hat geschrieben:Ist bekannt bei wie vielen AddGadgetItem`s das System "schlappmacht"?
RSBasic hat geschrieben:Nur wenn du viele Einträge aufeinmal hinzufügen möchtest, dann dauert es in der Regel recht lange, bis alle Einträge in deinem ListIconGadget hinzugefügt wurden.
Naja... wenn man zwischen den AddGadgetItem()-Aufrufen keine (Wait)WindowEvent()-Aufrufe durchführt geht das eigentlich ganz flott... Im Notfall bei Initialisierung mit einer großen Liste eine Event-Fresserschleife machen (empfände ich persönlich aber als zu pfuschig) oder:
RSBasic hat geschrieben:Aber für sowas gibt es zwar auch ne Lösung, aber leider für dich nur über WinAPI. Dabei wird das Neuzeichnen temporär deaktiviert, so dass die Einträge schneller hinzugefügt werden können. Aber das System wird dadurch nicht langsamer, es wird nur ein wenig mehr Speicher benötigt.
Ein HideGadget() sollte den selben Effekt haben. Wenn man dafür solange ein Ersatzgadget anzeigt (z.B. "Liste wird erstellt...") dann sieht es auch ganz OK aus. Schön ist auch (bei riesen listen) ein Progressbar-Gadget, welches man dann aber nur getaktet aktualisieren sollte, um den Geschwindigkeitsgewinn nicht wieder zu verprassen.
Daffy0815 hat geschrieben:bei Speicherung der Daten in einer Datei besteht halt immer die Gefahr das bei Stromausfall oder unbeabsichtigtem Ausschalten des Gerätes der gesamte Messwertspeicher "zum Teufel geht".
Wie wär's mit (temporär) redundanter Speicherung ohne Schreibpuffer (Wenn die Taktung nicht zu hoch ist). Dann würde im Worst-Case nur der letzte Eintrag fehlen oder eine von 2 Dateien wäre defekt.
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Benutzeravatar
Shardik
Beiträge: 752
Registriert: 25.01.2005 12:19

Re: Tabelle / ListIconGadget

Beitrag von Shardik »

Daffy0815 hat geschrieben:Gibt es eine Möglichkeit bei AddgadgetColumn / AddGadgetItem anzugeben ob die Ausgabe rechtsbündig / linksbündig / zentriert erfolgen soll
oder muss man den einzusetzenden String vorher selbst "zu Fuß" entsprechend zusammenbauen?
Ich habe im englischen Forum ein plattform-unabhängiges Beispiel gezeigt, das zwar
API-Funktionen nutzt, aber durch Verwendung von CompilerSelect-Blöcken sowohl
unter Windows als auch unter Linux funktioniert. Eine Mac-Implementation ist mir
leider trotz vieler Stunden Recherche und Tests noch nicht gelungen und ich bezweifle
mittlerweile stark, daß dies auf dem Mac mit dem Carbon-Framework überhaupt möglich
ist... /:->

Eine Lösung für den Mac durch Wrapping von Cocoa-Funktionen wäre zwar machbar,
aber dann könnte das ListIconGadget nicht mehr verwendet werden, das intern den
Carbon DataBrowser nutzt. Wenn die Mac-Version einmal auf das Cocoa-Framework
umgestellt sein wird, löst sich dieses Problem allerdings von selbst... :wink:
Antworten