100 Buttons und mehr

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

100 Buttons und mehr

Beitrag von AUGE_OHR »

hi,

ich bastel gerade an einem Lager Plan. Beim ersten Versuch hab ich in
eine FOR/NEXT Schleife 100 XbpPushbutton()s aufgebaut. Soweit sogut
aber es ist zu langsam ...

Dann hab ich das ganze mal mit XbpStatic() Class versucht was auf eine
3GHz Maschine zwar ok ist aber auf langsamen PC´s (< 1GHz) immer
noch zu langsam ...

Ein Array Browser geht von der optischen Form nicht da ich 8 Reihen
a 13 Plätze habe in einem Hochregal was 4 Ebenen a 3 Plätze hat.
... wie könnte man sowas (schneller) darstellen ?

Ich erzeuge, wie gewöhlich, alle Childs mit .F. und lasse die erst durch
oDlg:Show() anzeigen. Dabei kann ich aber auf den langsamen PC´s
sehen wie erzunächst alles aufbaut aber dann nochmal ein "refresh"
macht ? (hab kein :resize oder so)
Beim :resize kann ich ja oDlg:drawingArea:LockUpdate(.T.) verwenden
aber das scheint beim :create() nciht zu wirken ?

also nochmal zurück zum Problem: Wie stelle ich 8x13x4x3 Lagerplätze
(graphisch) dar sodas es auch auf einem PC < 1GHz noch gut aussieht ?

gruss by OHR
Jimmy
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

Hallo Jimmy,

wieso machst du es nicht mit einem Array fester Größe und dem Browse?
Gruß,

Andreas
VIP der XUG Osnabrück
hschmidt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 164
Registriert: Mo, 09. Jan 2006 17:06
Wohnort: Paderborn
Hat sich bedankt: 2 Mal
Kontaktdaten:

Beitrag von hschmidt »

Hallo Jimmy,

ich habe nicht genau verstanden, ob Deine Frage mehr in Richtung Datenstruktur für die Abbildung des Hochregals zielt oder mehr in Richtung grafische Darstellung des Inhalts des Regals.

Wenn es um die grafische Darstellung geht, bräuchtest Du ja 3 Dimensionen, um den Inhalt darzustellen, das kannst Du weder mit einem Browse noch mit Buttons. (Wie hast Du Dir das mit den Buttons vorgestellt? Wenn ich das richtig verstehe, hast Du 8x13x4x3 = 1248 Plätze, willst Du für jeden Platz einen Button erzeugen?)
Meiner Ansicht nach kann man solche Daten am besten mit einem Treeview darstellen. Hast Du schon mal daran gedacht?

Hans
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

das mit den Ebenen habe ich auch noch nicht richtig verstanden,
aber komplexe grafische Auswahlbildschirme habe ich häufig als
Bitmap gesehen, d.h. ein XbpStatic mit Bitmap drinn.

Du müsstest beim Mouseklick nur aus der relativen Position die
passende Box berechnen. Ich weiß jetzt aber nicht ob Xbase++
die relative Mouseposition hergibt, aber man weiß ja die linke untere
Ecke des Fensters und von dort aus die des Controls.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

hi,

danke erstmal für eure Antworten
brandelh hat geschrieben: das mit den Ebenen habe ich auch noch nicht richtig verstanden,
aber komplexe grafische Auswahlbildschirme habe ich häufig als
Bitmap gesehen, d.h. ein XbpStatic mit Bitmap drinn.

Du müsstest beim Mouseklick nur aus der relativen Position die
passende Box berechnen.
Exact, das mache ich mit der XbpStatic Class wo dann 4x3 XpbStatic
mit einem jeweiligen Bitmap dargestellt werden sollen. Weder die
Positionen noch die Bitmaps machen Probleme aber die Geschwindigkeit.
hschmidt hat geschrieben:
Wenn es um die grafische Darstellung geht, bräuchtest Du ja 3 Dimensionen, um den Inhalt darzustellen, das kannst Du weder mit einem Browse noch mit Buttons. (Wie hast Du Dir das mit den Buttons vorgestellt? Wenn ich das richtig verstehe, hast Du 8x13x4x3 = 1248 Plätze, willst Du für jeden Platz einen Button erzeugen?)
Exact, es sind 1248 Plätze und der erste Versuch war ja mit XbpPush-
buttons aber das ist viel zu langsam beim aufbau.
hschmidt hat geschrieben:
mit einem Treeview darstellen. Hast Du schon mal daran gedacht?
hm ... nein noch nicht ... das muss ich mir mal überlegen ...
was mir einfällt was dagegen spricht : wie soll ich in einem Treeview
einen "gesamt überblick" von allen belegten Plätzen so darstellen das
ich "auf einen Blick" erkennen kann wo/was/wieviel frei ist ?
andreas hat geschrieben: wieso machst du es nicht mit einem Array fester Größe und dem Browse?
naja wegen den 3 Dimensionen (Hoch Regal). Ich habe es mit 4 Browse
gleichzeitig auch versucht, aber dafür bräuchte ich einen riesigen
Bildschirm um alle 4 Browse gleichzeitig darzustellen.

Ich hab jetzt schon alle möglichen "Futures" wieder ausgebaut (z.b.
Bitmap Icons) damit es schneller wird, aber der erste (!) Aufbau ist
immer noch viel zu langsam. Wenn der Dialog erstmal steht kann ich
schnell die Xbpstatic (mit dem Bitmap Icons) per :show()/:hide()
verändern und die Geschwindigkeit ist ok (Netzwerk).

Noch was zur FOR/NEXT (zumindest bei XbpPushbutton) : Ich hab auch
mit dem Formdesigner zu Test 100 Buttons gemacht. Der Aufbau von
100 "einzelnen" XbpPushbuttons geht wesentlich schneller als in einer
FOR/NEXT Schleife (??? warum ???)

gruss by OHR
Jimmy
p.s.
brandelh hat geschrieben: XbpStatic mit Bitmap drinn
hm ... ich denke gerade das Hubert vielleicht die 8x13 (eine Ebene) als
Bitmap meint während ich auf der einzel Position der 4x3 meine Bitmaps
habe ... vielleicht sollte ich auch die 8x13 als "riesiges" Bitmap mit den
Methoden der 4x3 Bitmaps ausstatten ...
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Jimmy,

genau, ich meinte EINE Bitmap die alles darstellt und intern dann den Clickevent umrechnet. Ob das bei dir und mit Xbase++ geht weiß ich aber nicht, war nur ein Gedanke ...

Die FOR / NEXT Schleifen sind bei Xbase extrem langsam im Vergleich zu anderen Sprachen. Daher ist ein dbeval() um ein vielfaches schneller als do while oder For Next Schleifen.

Im normal Fall merkt man es kaum, aber bei so vielen ...
Auf jeden Fall solltest du die dynamische Erzeugung zur Laufzeit durch eine dynamische Quellcodeerstellung zur Programmierzeit ersetzen ;-)
So sparst du dir das Tippen und dennoch dem Computer die lahme Auflösung. Wobei lahm sicher relativ ist. Dein Problem ist, dass ein Bild, das nicht unter einer Sekunde steht als lahm empfunden wird, aber die vielen Abfragen in einer Sekunde kaum zu machen sind.

Eventuell solltest du auch den Grundaufbau der XbpStatics() von der Zustandsermittlung und Anzeige (eigener Thread ?) trennen.
Wer zuerst ein leeres Regal sieht, sieht zuerst mal was ! Wenn sich das dann flackernd füllt weiß er da arbeitet jemand.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben: genau, ich meinte EINE Bitmap die alles darstellt und intern dann den Clickevent umrechnet. Ob das bei dir und mit Xbase++ geht weiß ich aber nicht, war nur ein Gedanke ...
nur kurze Rückmeldung : DAS bringt es !!!

klar stimmt die Positionierung jetzt nicht mehr ganz und ich muss es neu
anpassen aber die Idee war die richtige, DANKE !

gruss by OHR
Jimmy
Antworten