sehr viele TextGadget als Array

Probleme beim Erstellen von 3D-Modellen und Texturen, keine Ahnung womit man Musik macht? Dies ist dein Forum.
hyperG
Beiträge: 23
Registriert: 28.06.2014 10:43

sehr viele TextGadget als Array

Beitrag von hyperG »

Hallo zusammen,

finde diese Sprache ideal klein, kurz und schnell.
ABER ich möchte nun eine große Bildschirmseite mit etwa 1000 kleinen Anzeigefenstern erstellen
(z.B. TextGadget)
Problem 1: einige Fenster sollen mit Schrift um 90° gedreht sein. Mit dem Editor (Version 5.1) oder der Deklaration bekommt man das nicht hin (Windows-Botschaft nötig? aber dann müssten sich beim Laden der Seite {was sehr schnell gehen soll} 800 Unter-Fenster per Botschaft drehen?)

Problem 2: Rand und Hintergrundfarbe: die vielen Beispiele mit API-Befehlen sind ja sehr aufwendig
Gibt's da neue Versionen oder was einfaches wie SetBkColor(myTextGadget, color)?

Problem 3: Anzeigen sollen Werte schnell (< 400 ms) anzeigen.
3 grobe Konzepte:
a) Multitasking (hatte ich hier schon hinbekommen, kann aber unerwartete Effekte bewirken)
b) jeder eigenen Timer ??
c) Array (mein Favorit):
for i=1 to 1000
myTextGadget.Text = ?? geht nicht
SetGadgetText(myTextGadget,global_Text); ?? geht nicht?
SetBkColor(myTextGadget, color); ?? geht nicht?

Habe auch schon überlegt, das Fenster mit anderer Sprache (c++ Editor) in eine DLL auszulagern,
und diese DLL in PureBasic zu laden...
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: sehr viele TextGadget als Array

Beitrag von Kiffi »

diese Probleme lassen sich meines Erachtens mit dem CanvasGadget lösen. Dürfte schnell genug sein und verbraucht auch weniger Ressourcen (CPU & Speicher) als 1000 einzelne Textgadgets zu erstellen.

Grüße ... Peter
Hygge
hyperG
Beiträge: 23
Registriert: 28.06.2014 10:43

Re: sehr viele TextGadget als Array

Beitrag von hyperG »

Kiffi hat geschrieben:... mit dem CanvasGadget lösen
... Peter
Meintest Du purebasic.com/documentation/gadget/canvasgadget.html

Das mag zwar ein geeigneter Hintergrund für die 1000 Anzeigen sein,
ABER es fehlen die 1000 Anzeige-Texte selbst mit
- wechselnden Werten (Quelle ist ein Array)
- wechselnde Hintergrundfarbe und Rand
- etwa 50% um 90° gedreht

Was außer TextGadget kann den Texte schnell veränderlich anzeigen?

Früher gab es doch mal bei VisualBasic eine *.RES Datei ...
Da der eigene Form-Editor nur einfachste Texte kann, dachte ich an dem Import von etwas externes...
(RES; ActiveX, DLL, ...) ???
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: sehr viele TextGadget als Array

Beitrag von Kiffi »

hyperG hat geschrieben:Das mag zwar ein geeigneter Hintergrund für die 1000 Anzeigen sein,
ABER es fehlen die 1000 Anzeige-Texte selbst mit [...]
nee, da musst Du ein wenig umdenken. Anstatt 1000 TextGadgets Deinem Window hinzuzufügen, 'malst' Du die Anzeige (das, was in den TextGadgets angezeigt werden soll) direkt auf ein CanvasGadget. Mit den Drawing-Befehlen hast Du dann freie Gestaltungsmöglichkeiten (Farbe, Rahmen, Ausrichtung, etc.)

Grüße ... Peter
Hygge
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: sehr viele TextGadget als Array

Beitrag von DarkSoul »

Was hast du mit 1000 TextGadgets vor? Willst du Excel nachbauen? :shock:

Ansonsten:

Code: Alles auswählen

#NumTextGadgets = 1000
Dim color(#NumTextGadgets)
Dim textGadgets(#NumTextGadgets)
OpenWindow(0,0,0,320,200,"Blubb",0)
For i = 0 To #NumTextGadgets - 1
  textGadgets(i) = TextGadget(#PB_Any,0,0,320,20,"") ;Gadgets sind übereinandergestapelt. Entsprechend den Bedürfnissen die Laufvariable i in den Positionsparametern verwenden.
  SetGadgetText(textGadgets(i), "text")
  SetGadgetColor(textGadgets(i), #PB_Gadget_BackColor, color(i)) 
Next i
- Bitte beachte die von C abweichende Syntax der Arrays und der FOR-Schleife.
- SetBkColor() ist WinAPI. Wenn du diese nutzt, verlierst du die Kompatiblität zu Linux/OSX. In diesem Fall bietet PB gleichwertigen Ersatz aus seinem eigenen Framework. Falls du unbedingt die API-Version nutzen willst, musst du einem API-Aufruf ein '_' hinter den Namen hängen, damit PB das unterscheiden kann: SetBkColor_()

Toll ist die Lösung nicht. Ich würde auch mit Canvas+2DDrawing-Lib arbeiten. Mit den TextGadgets produzierst du einen fürchterlichen Overhead an Daten. Die Performance wird darunter leiden. Bei mir braucht der Code ne gute Sekunde, bis die 1000 Gadgets in den Fenster sind. Die Gadgets sind IMHO für User-Interfaces geeignet und nicht zum aufwändigen Malen von nicht interaktiven Tabellen/Statistiken.

2DDrawing ist mit Debugger ziemlich lahm. Aber ohne Debugger ein vielfaches schneller.

1000 parallel laufende eigene Timer sind auch eine eher schlechte Idee. Wie wäre es mit nur einem Timer, bei dem geschaut wird, welche Daten geändert werden müssen und diese dann entsprechend aktualisiert werden? <)

Du schreibst Multitasking: De GUI darf ohnehin nur vom Mainthread aus manipuliert werden. :wink:

EDIT (war zu lahm): CanvasGadget ist schon sehr performant. Die Anzeige würde ich ohnehin nur alle Sekunde aktualisieren (auch wenn sich die Werte im Speicher schneller ändern), denn so schnell ist vermutlich kaum ein menschliches Auge. :mrgreen:
Rendere einfach jeweils den wichtigsten Wert von denen, die innerhalb eines Aktualisierungsintervalls auftreten.
Du sollst damit nicht dein Fenster hübschen. Dein "Hintergrund" IST die Datenausgabe - ohne TextGadgets :mrgreen:
Bild
Antworten