AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Panel.Left > 32,767 ?

Ein Thema von Benmik · begonnen am 9. Mai 2015 · letzter Beitrag vom 10. Mai 2015
Antwort Antwort
Benmik

Registriert seit: 11. Apr 2009
570 Beiträge
 
Delphi 12 Athens
 
#1

Panel.Left > 32,767 ?

  Alt 9. Mai 2015, 18:38
Ich zeige in einer Anwendung Vorschaubilder auf TPanels in einer Scrollbox an, die in einem Streifen am oberen Bildschirmand positioniert ist.
Die Panels werden zur Laufzeit erzeugt. Alles funktioniert wunderbar, nur ist die Zahl der anzeigbaren Panels auf ca. 190 beschränkt. Rechts davon bleibt die Scrollbox leer.

Endlich hat mir dieser Artikel die (eigentlich simple, aber kaum glaubliche) Antwort geliefert: Für die Angabe "Links" stehen nur 15 Bit zur Verfügung, daher ist bei ~32.000 Schluss. Die einfachste Lösung wäre wohl ein TPanel, das von TControl abgeleitet ist. Hat jemand eine Idee / eine Lösung?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.222 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Panel.Left > 32,767 ?

  Alt 9. Mai 2015, 18:56
ich würde es (auch aus Ressourcengründen) entkoppeln. Du hast 2 Scrollbars die um deiner Zeichenfläche/Panel liegen. Je nach Position dieser Scrollbar lädt du dann die aktuell benötigten Vorschaubilder an die berechnete Position. Alles was außerhalb des sichtbaren bereich ist ignorierst du vollkommen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
570 Beiträge
 
Delphi 12 Athens
 
#3

AW: Panel.Left > 32,767 ?

  Alt 9. Mai 2015, 19:02
Ähnliche Überlegungen habe ich auch schon gehabt, aber verworfen. Was ich vergaß, meine Lösung ist volle Kanne vom FastStone Image Viewer abgekupfert. Dort wie beim mir kann man mit der ScrollBar durch alle geladenen Bilder zischen, die sich am Streifen bewegen. Das möchte ich weiter haben.
Angehängte Grafiken
Dateityp: jpg Beispiel.jpg (219,2 KB, 40x aufgerufen)

Geändert von Benmik ( 9. Mai 2015 um 19:13 Uhr) Grund: Bild hinzugefügt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.372 Beiträge
 
Delphi 12 Athens
 
#4

AW: Panel.Left > 32,767 ?

  Alt 9. Mai 2015, 19:27
  • ein TPanel mit TScrollBar
  • auf dem Panel werden soviele Bilderkomponenten platzert, wie auf den Bildschirm passen (vielleicht +1, für halbe Bilder an den Seiten)
  • anhand der Position der Scrollbar (die übrigens nur von +/- 32.000 zählt > SmallInt) errechnest du welche Bilder sichtbar sind und lädst sie in die Bildkomponenten
  • die Bildkomponenten kann man auch noch bissl verschieben
  • ...
  • alternativ kann man zwat auch soviele Bildkomponenten erstellen, wie es Bilder gibt, aber zeigt dennoch nur die benötigten an und positioniert sie, wenn sie im sichtbaren Bereich liegen
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
570 Beiträge
 
Delphi 12 Athens
 
#5

AW: Panel.Left > 32,767 ?

  Alt 9. Mai 2015, 20:21
Vielen Dank. Die ScrollBar ist nicht das Problem, da ich sie über "Position" setze, was von 0 - 100 geht.
Wenn ich irgendetwas mit Nachladen mache, dann würde man vermutlich nicht so fix durch die Bilder rollen können, wie jetzt, wenn man an der ScrollBar zieht.
Am liebsten wäre mir die Lösung mit einer Komponente, die von TControl abgeleitet ist, da sie ja (hoffentlich!) das Problem nicht hätte.
Sie muss auch nicht viel können. Sie muss einem TImage als Parent dienen können, Farbe haben und einen abgesetzten 3D-Rand. Etwas tun (Klicks etc.) müsste sie nicht. Visible müsste natürlich auch umschaltbar sein.
Gibt es sowas, ist es schwer, eine eigene Klasse zu implementieren?
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: Panel.Left > 32,767 ?

  Alt 9. Mai 2015, 22:20
Ich hab auf die Schnelle ein Beispiel erstellt (siehe Anhang). Statt ScrollBox habe ich alles in ObjectList gepackt und virtuell mithilfe einer ScrollLeiste auf einer Image ausgegeben.

Statt Bilder habe ich farbige Ersatz-Bitmaps erstellen. Also nicht wundern. Das sind nicht farbige Rechtecke, sondern richtige Bitmaps.

Den Rest kannst du beiarbeiten, evtl. alles in eine Klasse packen oder eine Komponente erstellen. Ich hab jetzt nicht getestet wie weit es geht, aber ich hab testweise 300 Bilder a 200 Pixel erstellt, also 60.000 Pixel breit zusammen. Das Ganze kann man noch optimieren. Ist etwas auf die Schnelle.

Edit:

Weitere Version mit flüssigen Scroll angefügt.
Angehängte Dateien
Dateityp: zip ImageLeisteV2.zip (2,5 KB, 4x aufgerufen)
Dateityp: zip ImageLeiste.zip (2,5 KB, 5x aufgerufen)

Geändert von Popov (10. Mai 2015 um 16:59 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: Panel.Left > 32,767 ?

  Alt 9. Mai 2015, 19:00
Ich weiß nicht ob ich dein Programm richtig verstanden habe, aber ich verstehe es so, dass du eine Art Filmstreifen hast. Jedes neue Bild wird auf einem Panel gezeigt das rechts vom letzten Panel platziert wird. Dabei machst du dir das Leben einfach und positionierst es in einer ScrollBox horizontal immer an einer Position. Den Rest übernimmt dann die ScrollBox. Ist das so?

Wie wäre es wenn du das Ganze virtuell steuerst? Im Prinzip wie ListBox oder ListView eine Liste auch virtuell darstellen können. Die Bilder wäre in einer Liste, jede hätte einen Index und man würde immer nur die Panels mit Bildern zeigen, die man auch sehen kann.

Das Ganze müsste man programmieren, dürfte aber nicht so schwer sein.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz