Gambas: Gitter

Aus Wikibooks



Allgemeines[Bearbeiten]

Grid heißt auf Deutsch Gitter. Noch besser kann man ein Grid auch als Tabelle bezeichnen. Tabellen eignen sich sehr gut, um Datenbanken übersichtlich darzustellen.

Verwandt mit GridView ist der TableView, die Tabellenansicht, wie sie z.B. in dem mitgelieferten Beispielprogramm DataReportExample genutzt wird.

Bei einem Gitter kann man die Spaltenanzahl, die Reihenanzahl, die Breite und Höhe und vieles mehr definieren. Angesprochen werden die einzelnen Felder des Gitters mit einem Array, d.h. mit einem Wert für die Spalten- und die Reihenkoordinate.

Man kann die Gitterplätze mit Text, mit Zahlen, aber auch mit einem Bild füllen.

Beispielprogramm[Bearbeiten]

Um das Programm in Gang zu bringen, braucht man eine neue Form. Auf diese platziert man ein GridView (ein Gitter) aus der Werkzeugkiste. Im Programmverzeichnis sollte die Bilddatei x.png verhanden sein, sonst wird das Bild nicht dargestellt. Eine Fehlermeldung gibt es nicht.

STATIC PUBLIC SUB Main()
  hForm AS Fmain
  hForm = NEW Fmain
  hForm.show
END

PUBLIC SUB _new()
  GridView1.Columns.Count = 4
  GridView1.Rows.Count = 3
  GridView1.Columns.Width = 52
  GridView1.Rows[1].Height = 52
  GridView1[0,0].Text = "0,0"
  GridView1[0,0].Alignment = 4
  GridView1[1,1].Text = "1,1"
  GridView1[0,1].Text = "0,1"
  GridView1[1,0].Picture = Picture["x.png"]
END

Theorie des GridView[Bearbeiten]

Mit dem GridView wird ein Steuerelement bereitgestellt, welches Daten in einem Gitternetz anzeigt. Die Klasse kann man aus der Werkzeugkiste holen. Sie ist aber auch per Code erzeugbar.

g AS GridView 
PUBLIC SUB _new()
  g = NEW GridView(ME) AS "GridView1"
  g.show
  g.Columns.Count = 4
  g.Rows.Count = 3
  g.Columns.Width = 52
  g.Rows[1].Height = 52
END

Sie brauchen eine leere Form um obiges Programm in Gang zu bringen. Es erzeugt ein neues GridView.

Eigenschaften des GridView[Bearbeiten]

BackColor, Background, Border, ClientH, ClientHeight, ClientW, ClientWidth, Column, Columns, Current, Cursor, Design, Drop, Enabled, Expand, Font, ForeColor, Foreground, Grid, H, Handle, Height, Id, Left, Mouse, Parent, Row, Rows, ScreenX, ScreenY, ScrollBar, Tag, ToolTip, Top, Visible, W, Width, Window, X, Y

Methoden[Bearbeiten]

Clear, Delete, Drag, Grab, Hide, Lower, Move, Raise, Refresh, Resize, SetFocus, Show

Ereignisse[Bearbeiten]

Activate, Click, DblClick, Drag, DragMove, Drop, Enter, GotFocus, KeyPress, KeyRelease, Leave, LostFocus, Menu, MouseDown, MouseMove, MouseUp, MouseWheel, Scroll

GridView mit Werten füllen[Bearbeiten]

Sie haben eine Liste von Werten erstellt, diese wollen Sie in das Gitter übernehmen. Wie das geht zeigt das folgende Beispielprogramm:

Sie brauchen dazu eine neue Form mit folgenden Elementen:

  • 1 TextArea
  • 1 GridView
  • 2 Commandbuttons

Gitter mit Werten füllen

Der Code dazu:

PUBLIC SUB Button1_Click()
  TextArea1.Text = "114,3\n135,7\n104,8\n118,5\n125,7\n"
  TextArea1.Text = TextArea1.Text & "121,4\n122,4\n96,8\n118,9\n120\n"
  TextArea1.Text = TextArea1.Text & "112,2\n127,9\n122,8\n"128,9\n120,3"
END

PUBLIC SUB _new()
  GridView1.Columns.Count = 2
  GridView1.Rows.Count = 15
  GridView1.Columns.Width = 72
END

PUBLIC SUB Button2_Click()
  DIM text AS String
  DIM Liste AS String[]
  DIM Einzelwert AS String
  DIM x AS Integer

  x = 0
  text = TextArea1.Text
  Liste = Split(text,Chr(10))

  FOR EACH Einzelwert IN Liste
    GridView1[x,1].Text = Einzelwert
    GridView1[x,0].Text = x
    x = x + 1
  NEXT

  PRINT liste.Length
END

Wenn man auf den Button1 drückt wird die TextArea mit Werten gefüllt. Drückt man auf den Button2, dann werden diese Werte in das Gitter übernommen.

Wie kann man das Programm noch verbessern?

  1. Die Länge des Gitters ist mit einem Wert von 15 fest vorgegeben. Kann man die Länge so ändern, dass sie variabel wird und der Länge der Liste (Liste.Length) in der TextArea entspricht?

Hintergrundfarbe für eine beliebige Zelle setzten[Bearbeiten]

Manchmal möchte man, vielleicht um den Inhalt bestimmter Zellen hervor zu heben, die Hintergrundfarbe einer oder mehrerer Zellen auf eine beliebige Farbe ändern. Eigentlich geht das nicht, denn dieses ist nicht in den Eigenschaften des GridView vorgesehen. Aber es gibt einen kleinen „Workaround“, den ich im folgenden beschreibe.

  1. man braucht natürlich ein GridView. Nennen wir es z.B. GridViewTest.
  2. nun definiert sich eine Variable (z.B. bild) als Picture.
  3. dann erstellt sich eine TextBox (z.B. TextBoxTemp) in der Größe einer Zelle des GridViev.
  4. man setzt die Eigenschaft TextBoxTemp.Visible = False (TextBoxTemp ist unsichtbar).
  5. im nächsten Schritt legt die Hintergrundfarbe der TextBox fest.
  6. man kopiert den Inhalt der Zelle in die TextBox, dessen Hintergrundfarbe geändert werden soll.
  7. dann setzt die Eigenschaft von TextBoxTemp.Visible auf True (sichtbar machen).
  8. jetzt macht nun mit bild = TextBoxTemp.Grab() ein Bild,
  9. setzt TextBoxTemp.Visible auf False und
  10. kopiert das Bild in die GridView Zelle.

Sollte es nicht funktionieren, muss noch ein WAIT an die richtige Stelle gesetzt werden. Die wesentlichen Teile hier noch einmal als Programm-Code.

DIM bild AS Picture
bild = NEW Picture( <Breite der TextBox>, <Höhe der TextBox>, TRUE )
TextBoxTemp.Visible = TRUE
TextBoxTemp.Text = GridViewTest[ <Reihe>, <Spalte> ].Text
WAIT 
bild = TextBoxTemp.Grab() 
TextBoxTemp.Visible = FALSE
GridViewTest[ <Reihe>, <Spalte> ].Picture = bild

Wichtig ist, dass WAIT genau so, und vor der Grab-Zeile eingefügt wird. WAIT bild = TextBoxTemp.Grab() funktioniert NICHT.

Das ist vielleicht nicht ganz „sauber“ programmiert, aber eine andere Möglichkeit zur Lösung des Problems habe ich bislang noch nicht gefunden.