Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Multimedia

k23:k23.4:k23.4.7:start

23.4.7 Komponente ScrollArea (gb.qt4)

Wenn Sie in einem Gambas-Programm Bilder anzeigen wollen, dann werden Sie bestrebt sein, eine möglichst große Anzeigefläche zur Verfügung zu stellen. Ist das nicht möglich, dann kann der Einsatz der Komponente ScrollArea dieses Manko mildern, weil Sie sich dann das Bild in Ausschnitten ansehen können. Über die Methode Image.Stretch(..) integrieren Sie komfortabel eine Zoom-Funktion für das anzuzeigende Bild.

ScrollArea

Abbildung 23.4.7.1: Bildanzeige in einer ScrollArea mit Zoomfunktion

Sowohl für den horizontalen und als auch für den vertikalen Scroll-Balken einer ScrollArea existieren Kontextmenüs, die vor allem im Zusammenhang mit der Eigenschaft ScrollArea.Tablet interessant werden können:

11

Abbildung 23.4.7.2: Kontext-Menü für die Scroll-Balken einer ScrollArea

23.4.7.1 Eigenschaften, Methoden und Ereignisse der Komponente ScrollArea

Die Komponente ScrollArea (gb.qt4) ist eine DrawingArea mit Scroll-Balken. Um dieses Steuerelement zu verwenden, müssen Sie die Größe des Inhalts (Bild-Größe) mit der Methode .ResizeContents(..) definieren und im Draw-Event-Handler den Inhalt zeichnen.

Im nächsten Abschnitt werden nur ausgewählte Eigenschaften, Methoden und Ereignisse (Events) der Komponente vorgestellt und beschrieben.

EigenschaftTypeBeschreibung
.ScrollBarIntegerÜber die Konstanten None (0), Horizontal (1), Vertical (2) und Both (3) geben Sie an, ob keine, je eine oder je nach Bedarf eine oder zwei Scroll-Balken angezeigt werden sollen. Sie können die Anzahl und Art der angezeigten Scroll-Balken auch auslesen.
.TabletBooleanMit True wird festgelegt, dass Tablet-Events wie entsprechende Maus-Events behandelt werden (Ab Version 3.4.0) oder ermittelt, ob diese Einstellung aktuell gilt.
.ScrollXIntegerLiest die horizontale Scroll-Position aus oder setzt sie.
.ScrollYIntegerLiest die vertikale Scroll-Position aus oder setzt sie.

Tabelle 23.4.7.1.1: Ausgewählte Eigenschaften – ScrollArea

MethodeBeschreibung
Sub ResizeContents ( W As Integer, H As Integer )Definiert die Größe des Inhalts der ScrollArea
Sub Scroll ( X As Integer, Y As Integer )Scrollt den Inhalt an die gegebene Position

Tabelle 23.4.7.1.2: Ausgewählte Methoden – ScrollArea

EreignisseBeschreibung
Event Scroll ( )Das Ereignis wird ausgelöst, wenn ein Scroll-Balken der ScrollArea aktiviert wurde.
Event Draw ( )Das Ereignis wird ausgelöst, wenn etwas neu gezeichnet werden muss.

Tabelle 23.4.7.1.3: Ausgewählte Ereignisse – ScrollArea

23.4.7.2 Projekt

In Projekt werden die ausgewählten Eigenschaften, Methoden und Ereignisse eingesetzt und eine Zoom-Funktion integriert. Als Inhalt können nur Bilder geladen werden und angezeigt werden.

Der Quelltext wird vollständig angegeben:

[1] ' Gambas class file
[2] 
[3] Private imgUploaded As Image
[4] Private imgDisplay As Image
[5] Private fImageZoom As Float
[6] 
[7] Public Sub Form_Open()
[8] 
[9]   FMain.Center
[10]   FMain.Resizable = False
[11]   lblImageResolution.AutoResize = True
[12]   lblImageResolution.Expand = False
[13]   lblImageResolution.Visible = False 
[14]   pSpace.Expand = True ' variabler Zwischenraum  
[15]   imgUploaded = Image.Load("Images/fraktal.jpg") ' Lokales Startbild
[16]   imgDisplay = imgUploaded
[17]   ScrollArea1.ResizeContents(imgDisplay.W, imgDisplay.H)
[18]   ScrollArea1.Scroll(0, ScrollArea1.H + 8)
[19]   
[20]   fImageZoom = 1
[21]   
[22] End ' Form_Open()
[23] 
[24] Public Sub btnOpenImage_Click()
[25]   
[26]   Dialog.Title = "Wählen Sie ein Bild aus..."
[27]   Dialog.Filter = ["*.png;*.jpg;*.jpeg;*.gif;*.xpm", "Bild-Dateien: "]  
[28]   If Dialog.OpenFile() Then Return  
[29]   
[30]   Try imgUploaded = Image.Load(Dialog.Path) 
[31]   If Error Then
[32]      Message.Error("Fehler beim Öffnen der Bild-Datei!")
[33]      Return
[34]   Endif ' ERROR ?
[35]   ScrollArea1.Scroll(0, 0)
[36]   imgDisplay = imgUploaded
[37]   ScrollArea1.ResizeContents(imgDisplay.W, imgDisplay.H)
[38]   ScrollArea1.Refresh
[39]   Wait
[40]  
[41]   lblImageResolution.Visible = True
[42]   lblImageResolution.Text = "Bildgröße: " & imgUploaded.W & " x " & imgUploaded.H & " Pixel"
[43]     
[44] End ' btnOpenImage_Click()
[45] 
[46] Public Sub ScrollArea1_Draw()  
[47]   If imgDisplay Then   
[48]      Draw.Image(imgDisplay, - ScrollArea1.ScrollX, - ScrollArea1.ScrollY) 
[49]   Endif ' imgDisplay ?
[50] End ' ScrollArea1_Draw()
[51] 
[52] Public Sub btnZoomUp_Click()
[53]   If fImageZoom < 3.01 Then
[54]      fImageZoom = fImageZoom + 0.05
[55]   Endif ' fImageZoom < 3.01 ?
[56]   Display()
[57] End ' btnZoomUp_Click()
[58] 
[59] Public Sub btnZoomDown_Click()
[60]   If fImageZoom > 0.09 Then
[61]      fImageZoom = fImageZoom - 0.05 
[62]   Endif ' fImageZoom > 0.09 ?
[63]   Display()
[64] End ' btnZoomDown_Click()
[65] 
[66] Public Sub btnOriginal_Click()
[67]   fImageZoom = 1 
[68]   Display()
[69] End ' btnOriginal_Click()
[70] 
[71] Private Sub Display()
[72]   imgDisplay = imgUploaded.Stretch(Round(imgUploaded.W * fImageZoom, 0), Round(imgUploaded.H * fImageZoom, 0))
[73]   lblImageResolution.Text = "Bildgröße: " & Round(imgUploaded.W * fImageZoom, 0) & " x " & Round(imgUploaded.H * fImageZoom, 0) & " Pixel"
[74]   ScrollArea1.ResizeContents(imgDisplay.W, imgDisplay.H)
[75]   ScrollArea1.Refresh
[76]   Wait  
[77] End ' Display()

Hinweise:

  • Zeile 13 – Die Anzeige der Bildauflösung beim Startbild wird unterdrückt.
  • Die Größe des Inhalts der ScrollArea wird auf die Bildgröße des geladenen Bildes gesetzt.
  • In einem Datei-Öffnen-Dialog – Zeilen 24 bis 44 – kann ein Bild in vorgegebenen Formaten ausgewählt und geladen werden. Eine Fehlerbehandlung schließt sich an, wenn ein Fehler beim Laden des Bildes auftrat und abgefangen wurde.
  • Die Zoom-Faktoren werden in den Zeilen 53-55, 60-62 auf hinreichend praktikable Werte eingeschränkt und in der Zeile auf Originalgröße gesetzt.
  • Die Hauptlast trägt die Prozedur in den Zeilen von 46 bis 50. Es wird der gewählte Bildausschnitt stets neu gezeichnet, wenn ein Scroll-Balken bewegt wurde. Der Koordinatenursprung O(xo,yo) verschiebt sich nach links oben; dadurch sehen Sie im Bildausschnitt mehr vom rechten unteren Bild.
  • Die Prozedur Display() ab Zeile 71 verändert die Bildgröße mit dem aktuellen Zoom-Faktor, zeigt die Auflösung an und ändert die Größe des Inhalts der ScrollArea auf die gezoomte Bildgröße. Der Einsatz der Methode ScrollArea.Refresh erfordert das Wait-Kommando, wenn die Änderungen in der Ansicht sofort ausgeführt werden sollen.

Download

Wir verwenden Cookies, um unser Internetangebot optimal zu gestalten. Durch weitere Nutzung dieser Webseite stimmen Sie der Verwendung von Cookies zu. Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung
k23/k23.4/k23.4.7/start.txt · Zuletzt geändert: 20.06.2016 (Externe Bearbeitung)

Seiten-Werkzeuge