Seite 1 von 1
Formular-Größe
Verfasst: Mo 12. Mai 2014, 18:12
von asearle
Liebe Libres,
Ich steige zur Zeit von MS-Access auf LO um und mit Base komme ich recht gut voran (bin positiv überrascht!). Leider aber sind die Formulare bei mir immer nur "Vollbild" und ich würde gerne fragen wie ich Pop-ups und Modale Formulare anbringen kann? (Und die Größe dieser Formulare auch bestimmen) Zum Beispiel, ich würde gerne einen Filter setzen und das Filter-Formular als Pop-up einsetzen: Dabei bleibt das Hauptformular immer sichtbar im Hintergrund.
Hat jemand einen Vorschlag, oder ein Link, oder ein "HOWTO" für mich?
Recht vielen Dank,
Alan (in Köln)
Re: Formular-Größe
Verfasst: Mo 12. Mai 2014, 21:09
von RobertG
Hallo Alan,
das, was Du suchst, lässt sich nur über Makros erreichen. Du brauchst entweder ein einfaches Eingabefeld (inputbox) - allerdings verschwindet die nach der Eingabe. Oder Du brauchst Dialoge. Ich habe mir so einen Dialog bisher erst einmal geschrieben und entsprechend auch im Handbuch veröffentlicht. Der hatte es dann allerdings gleich in sich.
Vielleicht schaust Du zum Einstieg einmal hier:
http://www.starbasicfaq.de/Dialoge.html
Gruß
Robert
Re: Formular-Größe
Verfasst: Di 13. Mai 2014, 09:08
von asearle
Hallo Robert,
Ja, die Dialoge sehen gut aus und das wäre/ist die Perfekte Lösung. Aber kann ich dort (z.B. in einem Listbox) Daten aus einer Datenbanktabelle einbinden?
Mein Ansatz ist Folgendes: Für einen Filter möchte ich eine Liste der Kunden in dem Dialog anzeigen. Hier müsste ich von dem Dialog aus, auf die Kundendaten zugreifen.
Ich habe aber keine Lasche "Daten" bei den Eigenschaften des Listbox gesehen.
Oder müsste ich die Liste programmatisch befüllen? Das geht auch aber ist etwas umständlicher. Falls dies der Fall sein sollte, hätten Sie für mich ein Link zu einem Programmbeispiel?
Vielen Dank für die Hilfe,
Alan
Re: Formular-Größe
Verfasst: Di 13. Mai 2014, 11:11
von RobertG
Hallo Alan,
lade Dir einmal das Handbuch und dazu die Beispieldatenbanken herunter. Da steht genau so ein Zugriff für Listenfelder drin. Dort wird mit Hilfe von Dialogen der Inhalt von Tabellen bearbeitet. Nur ist das dadurch, dass wirklich alle Eventualitäten abgefragt werden, ziemlich komplex.
Die Anwendung dafür ist in der Datenbank Medien_mit_Makros.odb enthalten.
Gruß
Robert
Re: Formular-Größe
Verfasst: Di 13. Mai 2014, 17:52
von gogo
asearle hat geschrieben:Ich habe aber keine Lasche "Daten" bei den Eigenschaften des Listbox gesehen.
Ich leider auch noch nicht
asearle hat geschrieben:Oder müsste ich die Liste programmatisch befüllen? Das geht auch aber ist etwas umständlicher. Falls dies der Fall sein sollte, hätten Sie für mich ein Link zu einem Programmbeispiel?
Das eigentliche Problem bei den Listenfeldern ist nicht die Darstellung, sondern es sind die "nicht verbundenen Daten" - d.h. man kann nicht auf "die ID in Spalte 2" zurückgreifen, wie es bei gebundenen Listenfeldern in normalen Formularen möglich ist, sondern immer nur auf die Zeilennummer der Liste, bzw. den Text der dort steht.
Das einfache Füllen der Listbox "MeineListbox" erfolgt im Dialog "Mein_Dialog" so:
Code: Alles auswählen
oLB = gO_Mein_Dialog.GetControl("MeineListbox")
oLB.addItems(Array("Mueller","Maier"),0)
Rueckgabewerte: "Mueller" oder "Maier" (oder beide)
Sollte man Werte einer Tabelle anzeigen wollen, und im Dialog die ID des dazugehörigen Satzes ermitteln wollen, so ist dies mit einem Resultset möglich, das man so lange "vorrätig" hält so lange der Dialog läuft - dann liest man die selektierte(n) Position(en) aus und sucht die dazugehörigen IDs... (Im angegebenen Beispiel ist die ID in Spalte 2)
Code: Alles auswählen
gO_Mein_Dialog = CreateUnoDialog(Dialoglibraries.Standard.Mein_Dialog)
' Ein Resultset generieren, das die Daten beinhaltet die in die Listbox sollen
oStatement = ThisDatabaseDocument.CurrentController.ActiveConnection.createStatement
oStatement.ResultSetType = com.sun.star.sdbc.ResultSetType.SCROLL_INSENSITIVE
oRes = oStatement.executeQuery("Select Kundenname, KundenID from Kunden;")
'Listbox suchen, das Array "Itemliste" mit der Anzahl der anzuzeigenden Datensaetze definieren und dann befuellen
oLB = gO_Mein_Dialog.GetControl("MeineListbox")
oRes.last
dim Itemliste(cint(oRes.row)-1)
oRes.beforefirst
do while oRes.next
Itemliste(oRes.row-1)=oRes.getstring(1)
loop
'dann die Listbox befuellen:
oLB.addItems(Itemliste(),0)
' ... und den Dialog ausfuehren:
DialogWert = gO_Mein_Dialog.execute()
if DialogWert = 1 then ' ueberprueft ob ueberhaupt etwas ausgewaehlt wurde
if ubound(oLB.getSelectedItemsPos) = -1 then DialogWert = 0
end if
' Folgende Properties von oLB waeren sinnvoll: ...ItemS bei Mehrfachselektion!
'SelectedItem string "Herr Mueller"
'SelectedItemPos integer 2
'SelectedItems ARRAY of Strings
'SelectedItemsPos ARRAY of Integers (Auch wenn nur EINE Zeile ausgewaehlt wurde!)
' Zeiger auf den Datensatz stellen, der in der Listbox ausgewaehlt wurde
' (+ 1) da oLB.SelectedItemPos bei 0 beginnt, das waere aber der Datensatz .beforefirst - den gibt's ja nicht
oRes.absolute(oLB.SelectedItemPos + 1)
msgbox "Ausgewaehlt wurde '" & oLB.SelectedItem & "'. Die Spalte 2 des Resultsets enthaelt den Wert: " & oRes.getstring(2)
... wie Robert schon sagte: komplex
Re: Formular-Größe
Verfasst: Di 20. Mai 2014, 10:19
von asearle
Vielen Dank für die ausführlichen Informationen. Das ist eine große Hilfe.
Ja, es scheint komplex zu sein aber ich werde probieren.
Melde mich dann mit etwas Feedback.
Vielen Dank,
Alan