Seite 1 von 1

Formulargröße per Makro festlegen

Verfasst: Sa, 11.07.2009 13:03
von eBayer
Hallo zusammen,
ich möchte gerne die Größe der Base-Formulare per Makro beienflussen können!
Hintergrund: wenn ein Bericht aufgerufen wird, der bei PreView gezoomt wird, merkt sich ooBase offensichtlich den Zoomfaktor und öffnet dann alle folgenden Formulare in veränderter Größe. Ich würde gerne erreichen wollen, daß die Base-Formulare immer in der designeten Größe geöffnet werden.
Hat jemand dazu eine Idee? Ich habe zwar schon Hinweise auf Size und Position gefunden, komme damit aber nicht klar. Ich hätte mir vorgestellt, daß meine Dokumente eine Eigenschaft "Size" haben, finde aber den Einstieg, um selber zu forschen, leider nicht.
Danke für möglichst zahlreiche Tipps!
eBayer

Re: Formulargröße per Makro festlegen

Verfasst: So, 12.07.2009 11:27
von komma4
MIt den Eigenschaften POS und SIZE gab es irgendwie Probleme (2.4.x), ich habe dann .setPosSize genutzt:

Code: Alles auswählen

   With oFormular.getCurrentController().getFrame().getContainerWindow()
   	.setPosSize( .PosSize.x, .PosSize.y , 800, 600 , com.sun.star.awt.PosSize.SIZE )
   End With
Hilft Dir das weiter?

Re: Formulargröße per Makro festlegen

Verfasst: So, 12.07.2009 12:26
von eBayer
Danke Winfried,
bin grad vor 1 Stunde fündig geworden... gerinfügig anders Coding, aber es funktioniert gut.
Jetzt fehlt mir noch eine Möglichkeit, die Bildschirmauflösung in Pixel abzufragen. Dann kann ich die Formulare nach Änderung der Größe auch noch zentrieren.
Kannst Du vielleicht nochmal in Deiner Schatzkiste wühlen? Ich habe noch nichts verwertbares gefunden.
Besten Gruß und einen schönen Sonntag
eBayer

Re: Formulargröße per Makro festlegen

Verfasst: So, 12.07.2009 12:42
von komma4
Kap. 10.6 in meiner Ausgabe von Andrews Makrodokument


Code: Alles auswählen

Sub CenterDialogOnScreen
  Dim CurPosSize As New com.sun.star.awt.Rectangle
  Dim oFrame
  oFrame =  ThisComponent.getCurrentController().Frame
  FramePosSize = oFrame.getComponentWindow.PosSize
  xWindowPeer = oDialog.getPeer()
  CurPosSize = oDialog.getPosSize()
  WindowHeight = FramePosSize.Height
  WindowWidth = FramePosSize.Width
  DialogWidth = CurPosSize.Width
  DialogHeight = CurPosSize.Height
  iXPos = ((WindowWidth/2) - (DialogWidth/2))
  iYPos = ((WindowHeight/2) - (DialogHeight/2))
  oDialog.setPosSize(iXPos, iYPos, DialogWidth, _
                       DialogHeight, com.sun.star.awt.PosSize.POS)
  oDialog.execute()
End Sub
für Dialoge - ich bin mir aber sicher, dass Du das für forms anpassen kannst :-)

Re: Formulargröße per Makro festlegen

Verfasst: So, 12.07.2009 14:15
von eBayer
Danke, ich halte Dich auf dem Laufenden!

Re: Formulargröße per Makro festlegen

Verfasst: Mi, 23.09.2009 17:20
von gigabert
Hallo,

sorry, wenn ich diesen Thread nochmal aufwärme. In dem Beispiel wird der Dialog zum Fenster der Anwendung zentriert. Das klappt so ja auch. Aber wie zentriere ich den Dialog im Verhältnis zur Bildschirmauflösung? Ich hab schon gesucht, aber bisher nicht herausgefunden, wie ich die aktuelle Bildschirmauflösung abfragen kann. Die müssten ja vom System erfragt werden können. Wenn ich die hätte, wäre es ja auch kein Problem, den Dialog zentriert auf dem Bildschirm anzuzeigen. Hat jemand einen Tipp für mich?

Gruss
Bert

Re: Formulargröße per Makro festlegen

Verfasst: Mi, 23.09.2009 19:55
von eBayer
Hallo Bert,
ich habe lange gesucht, bin aber leider nicht fündig geworden.
Ich habe mein Problem dann so gelöst, daß ich die jweilige Bildschirmauflösung in einer INI-Datei hinterlege. Dann kann ich beliebig damit experimentieren und rechnen.
Gruß eBayer

Re: Formulargröße per Makro festlegen

Verfasst: Do, 24.09.2009 11:04
von gigabert
eBayer hat geschrieben:Ich habe mein Problem dann so gelöst, daß ich die jweilige Bildschirmauflösung in einer INI-Datei hinterlege. Dann kann ich beliebig damit experimentieren und rechnen.
Hallo eBayer,

ganz schön tricky. Da muss man erst mal darauf kommen. Ist zwar nicht gerade das Gelbe vom Ei, aber ziemlich praktisch. Vielleicht mache ich das erstmal auch so. Es müsste doch aber auch möglich sein, die Bildschirmauflösung per Basic abzufragen. So etwas kann normalerweise jede Programmiersprache. Ich hab das mal OOoForum.org gefragt, mal schauen, ob mir da jemand weiterhelfen kann. Mit "Environ()" kann ich jedenfalls die Umgebungsvariablen des Systems abfragen. Da ist aber die Bildschirmauflösung nicht dabei, oder?

Gruss
Bert

Re: Formulargröße per Makro festlegen

Verfasst: Do, 24.09.2009 11:26
von komma4
gigabert hat geschrieben:So etwas kann normalerweise jede Programmiersprache
Das könnte auch OOo StarBasic ... wenn die entsprechenden Schnittstellen programmiert wären.
Der Zugriff auf die Werte der Bildschirmauflösung ist jedoch betriebssystemabhängig, also müsste für jede Plattform eine spezifische Routine entwickelt werden.
Du weisst um die Knappheit der Entwickler und Geldmittel beim Projekt ...

gigabert hat geschrieben:... Umgebungsvariablen des Systems abfragen. Da ist aber die Bildschirmauflösung nicht dabei, oder?
Umgebungsvariablen werden variabel gesetzt.
Schreibe Dir eine (Windows?-)Routine, die beim Starten des Rechners eine Variable setzt ... und dann kannst Du sie auch abfragen.

Re: Formulargröße per Makro festlegen

Verfasst: Do, 24.09.2009 11:35
von gigabert
komma4 hat geschrieben:
gigabert hat geschrieben:So etwas kann normalerweise jede Programmiersprache
Das könnte auch OOo StarBasic ... wenn die entsprechenden Schnittstellen programmiert wären.
Der Zugriff auf die Werte der Bildschirmauflösung ist jedoch betriebssystemabhängig, also müsste für jede Plattform eine spezifische Routine entwickelt werden.
Du weisst um die Knappheit der Entwickler und Geldmittel beim Projekt ...
Nee, weiss ich nicht, kann ich mir aber so in etwa vorstellen. Na ja, dann warte ich eben, bis dies irgendwann mal implementiert ist...

komma4 hat geschrieben:Schreibe Dir eine (Windows?-)Routine, die beim Starten des Rechners eine Variable setzt ... und dann kannst Du sie auch abfragen.
Hmm, keine Ahnung ob ich das kann. Hört sich aber in meinen Ohren so ähnlich an, wie die Daten in eine INI-Datei reinzuschreiben und dann auszulesen.

Gruss
Bert

Re: Formulargröße per Makro festlegen

Verfasst: Fr, 25.09.2009 15:59
von gigabert
eBayer hat geschrieben:Hallo Bert,
ich habe lange gesucht, bin aber leider nicht fündig geworden.
Ich habe mein Problem dann so gelöst, daß ich die jweilige Bildschirmauflösung in einer INI-Datei hinterlege. Dann kann ich beliebig damit experimentieren und rechnen.
Gruß eBayer
Hallo eBayer,

hab gerade dies aus dem www.oooforum.org erhalten:

Code: Alles auswählen

oDisplayAccess = CreateUnoService("com.sun.star.awt.DisplayAccess")
oDisplay = oDisplayAccess.getByIndex(0)
aRect = oDisplay.WorkArea
msgbox aRect.Width & ", " & aRect.Height 
Das ergibt die aktuelle Bildschirmauflösung. Vielleicht kannst du damit ja was anfangen...

Gruss
Bert

Re: Formulargröße per Makro festlegen

Verfasst: Sa, 26.09.2009 12:35
von eBayer
Hallo Bert,
gemeinsam sind wir stark :D
Danke für Deine Info.... ich werde es heute mal testen.
Gruß eBayer

Re: Formulargröße per Makro festlegen

Verfasst: So, 27.09.2009 10:57
von gigabert
Hallo eBayer,

freut mich, wenn ich dir auch mal weiterhelfen kann. Bei mir hat das eigentlich ganz gut geklappt. Es hat aber bei jedem Wert einen Pixel abgezogen, also eine Auflösung von 1679x1049 Pixel ergeben. Na ja, kann ich gerade so mit leben. Was mich bei der Lösung ein wenig stutzig macht, ich hab mal in der Doku zur API gesucht, aber dort kein com.sun.star.awt.DisplayAccess gefunden. Hab ich an der falsche Stelle gesucht? War ich mal wieder blind? Hat mich jedenfalls etwas gewundert...

Gruss
Bert