Formular: Größe der eingeblendeten Tabelle beeinflussen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Formular: Größe der eingeblendeten Tabelle beeinflussen

Beitrag von RobertG »

Hallo *,

ich versuche gerade, in einem Datenbankformular die Datenquelle als Tabelle gleich beim Formularstart anzeigen zu lassen und auf die gewünschte Größe einzustellen. Die Anzeige habe ich über den Makrorecorder mit ".uno:ViewFormAsGrid" erledigt bekommen. Nur komme ich nicht an die Größe ran. Ich habe schon alle möglichen Wege durch, angefangen bei dem Objekt, von dem aus ich die Einblendung vorgenommen habe. Ich finde einfach über xray nicht den Größenzugang, in der Hauptsache die Höhe der Tabelle.

Die angehängte Datenbank hat ein Formular mit einem Button "Test2", der das entsprechende Makro startet. Ich habe den Button mit der Prozedur "Open_Table" verbunden.

Gruß

Robert
Dateianhänge
Beispiel_Sport.odb
Einblendung Datenquelle als Tabelle
(46.39 KiB) 144-mal heruntergeladen
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Formular: Größe der eingeblendeten Tabelle beeinflussen

Beitrag von Toxitom »

Hallo Robert,
RobertG hat geschrieben: So, 26.02.2017 16:22 Nur komme ich nicht an die Größe ran.
Hmm, das ist etwas "verzwickt";)

Also: zunächst das Dokument als Objekt ( Achtung: Ist das Base-Dokument!)

Code: Alles auswählen

oDoc = thisComponent
Von dem aus nun auf Dein Formulardokument und dort auf die Draw-Page gehen:

Code: Alles auswählen

oDrawPage = oDoc.FormDocuments.getByIndex(0).Component.DrawPage
Hast ja nur ein Formular - deswegen der Indexzugriff - geht auch über den Namen.

Tia, nun hast Du deine 9 Elemente der Drawpage im Zugriff - wahrscheinlich musst Du nun eine Enumeration erzeugen und Element für Element abklappern, bis Du dein gewünschtes gefunden hast (hab es nicht ausprobiert):

Jedes Element jedenfalls hat eine Size und eine Position Eigenschaft - und die kannst Du auch setzen.

Hoffe, Dir ein paar Denkanstöße gegeben zu haben.

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Formular: Größe der eingeblendeten Tabelle beeinflussen

Beitrag von RobertG »

Hallo Thomas,

da habe ich auch schon gesucht gehabt. Ich bin nicht darauf gekommen, die einzelnen Elemente anzusteuern (mit GetByIndex). Aber nachdem ich dort die Runde gedreht habe sehe ich das Folgende:

Code: Alles auswählen

Width0: 10834
Height0: 4665
Width1: 7509
Height1: 1046
Width2: 7509
Height2: 1048
Width3: 1998
Height3: 1046
Width4: 2999
Height4: 1046
Width5: 4001
Height5: 667
Width6: 4001
Height6: 667
Width7: 4001
Height7: 667
Width8: 1834
Height8: 667
Nun, mein Bildschirm hat 1680 * 1050 Pixel. Die eingeblendete Tabelle hat ungefähr 1/6 der Höhe des LO-Bildschirms, also eine Höhe von ca. 170 Pixeln. Von den Angabe der Weite der einzelnen Elemente der Drawpage hat für mich der Begriff "virtuelle Realität" eine ganz neue Bedeutung erhalten.

Wenn ich jetzt noch die x/y-Position dazu schreibe gerät das Ganze völlig aus den Fugen. Dann beginnt z.B. z.B. Element 0 im Keller, nicht hier in meinem Arbeitszimmer, und zwar bei x = 1000 und y = 6332 (was eben 6 Bildschirme nach meiner Rechnung tiefer liegen muss, da mein Bildschirm bei 1050 Schluss macht).

Irgendetwas an Information fehlt mir hier.

Gruß

Robert
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Formular: Größe der eingeblendeten Tabelle beeinflussen

Beitrag von Toxitom »

Hey Robert,
RobertG hat geschrieben: Mo, 27.02.2017 16:34 Irgendetwas an Information fehlt mir hier.
Leider nein. Die Werte sind keine Pixel... es sollten eigentlich Twips sein, aber die Umrechnung funktioniert auch bei mir eigentlich nie. HIer ist einfach "Raten" und "ausprobieren" angesagt.

Schau mal auf meiner Homepage, dort steht noch der Artikel über das Table-Grid Element in Dialogen. Und wie ich dort vorgehen;)

Table Grid Element

Schwacher Trost - aber anders wirst Du nicht rankommen;)

Im Übrigen würde ich dem "Ding" (Also deiner Tabelle) einen Namen geben (im Kontrollfeld) - dann findest Du ihn deutlich schneller - Schleife über die Enumeration und Vergleich mit dem Namen ;)

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Formular: Größe der eingeblendeten Tabelle beeinflussen

Beitrag von RobertG »

Hallo Thomas,

das mit den Twips werde ich einmal durch Probieren studieren.

Bei der Tabelle handelt es sich um die Tabellenansicht, die bei einem Formular oben eingeblendet werden kann. Wie soll ich da einen Namen vergeben? So etwas muss ähnlich dem sein, wenn ich die Sidebar ein- und ausblende.

Ich möchte die Tabellenansicht als Alternative zur normalen Tabelleneingabe anbieten können: Vorteil der Ansicht ist nämlich, dass hier alle Filter vorhanden sind und außerdem die Listenfelder aus dem Hauptformular grundsätzlich mit eingebaut werden. Ist also eine Tabelle mit Listenfeldern - nicht aber ein Tabellenkontrollfeld.

--- Nachtrag ---

Ich habe das jetzt mit weiter getestet: Die Höhenangaben verändern sich nicht, auch wenn ich an der Tabellenansicht Größenveränderungen vornehme. Was auch immer da über die Drawpage ausgegeben wird ...
Für 96 Punkte pro Zoll muss ich lt. Wikipedia übrigens lediglich das Ergebnis aus Width und Height durch 15 dividieren. Es handelt sich um 1/20 eines Inch-Punktes. Und als Standard wird da wohl von 72 Punkten pro Zoll ausgegangen.

Gruß

Robert
Zuletzt geändert von RobertG am Mo, 27.02.2017 17:47, insgesamt 1-mal geändert.
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Formular: Größe der eingeblendeten Tabelle beeinflussen

Beitrag von mikeleb »

Hallo,

zum Thema Twips: Es gibt da auch noch die Funktionen TwipsPerPixelX() und TwipsPerPixelY(), die systemabhängig die Umrechnung von Pixeln in Twips liefern (sollen). Bei mir (Linux Ubuntu12.04) liefern beide den Wert 15. Damit sollte mein Bildschirm bei 1680x1050 Pixeln 25200x15750 Twips haben.
Gruß,
mikeleb
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Formular: Größe der eingeblendeten Tabelle beeinflussen

Beitrag von F3K Total »

Hallo Robert,
auch ich habe mich gestern versucht, bin auch leider zu keiner Lösung gekommen. Ich denke nicht, das die Tabellenansicht auf der Drawpage zu finden ist, sondern eher im CurrentController.Frame.ComponentWindow.AccessibleContext.
HANYA, der Autor von MRI, hat hier damit gearbeitet. Ich denke über den AccessibleContext kommt man an alle Teile der Bildschirmanzeige heran, es ist kompliziert und interativ. Vielleicht stellst Du die Frage dort noch einmal?
Gruß R
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Formular: Größe der eingeblendeten Tabelle beeinflussen

Beitrag von RobertG »

Hallo *,

mein Problem scheint wohl zu sein, dass das Element ja gar nicht auf der Drawpage existiert. Damit komme ich ja an die Formularfelder, nicht aber an die darüber eingeblendete Tabelle. Deswegen eben auch keine Größenveränderung auf diesem Weg.

Gruß

Robert
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Formular: Größe der eingeblendeten Tabelle beeinflussen

Beitrag von Toxitom »

Hey Robert, all,

sorry, komplettes Missverständnis. Du meinst die Datentabelle des Datenbank-Explorers (Dein Button "Test") - ich war von der vorhandenen Tabelle (Table-Grid) ausgegangen.

Also vergiss den "schei.." den ich geschrieben habe;) An das Ding kommst Du mit der Drawpage nicht ran.

Dies ist ja ein seperater Teil des Fensters - so wie die Symbolleisten etc. Ehrlich - keine Ahnung wie und ob überhaupt Du da mit Basic rankommst.

Wahrscheinlich geht es - erinnere mich dupf, mal etwas gebaut zu haben, das den Textbereich des Dokuments deutlich kleiner hat darstellen lassen. Aber wie das ging.... bin ich im Moment überfragt.

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Formular: Größe der eingeblendeten Tabelle beeinflussen

Beitrag von RobertG »

Hallo *,

ich bin jetzt ein Stück weiter:

Code: Alles auswählen

oAccCtx = ThisComponent.getCurrentController().getFrame().getComponentWindow().getAccessibleContext()
liefert mir die Teile des Bildschirms, die ich gerade beeinflussen will.

Code: Alles auswählen

oAccCtx.getAccessibleChild(1).Size.Height
liefert mir die Höhe der Tabellenansicht (in Punkten). Child(0) scheint das Startelement zu sein, vor dem durch den Button eben die Tabellenansicht vorgelagert ist.

Was mir bisher nicht gelungen ist: Die Größe von Child(1) zu ändern. Vielleicht, weil damit auch die Größe von Child(0) verändert wird.
So etwas wie

Code: Alles auswählen

oAccCtx.getAccessibleChild(1).setPosSize(0,0,1680,800,15)
wie ich das von Fenstern kenne, läuft zwar durch, bewirkt aber nichts. Angeblich kann Size.Height auch direkt gesetzt werden - funktioniert aber auch nicht.

Gruß

Robert
Antworten