Gelöst! aktives Formular per Makro finden

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Gelöst! aktives Formular per Makro finden

Beitrag von eBayer »

Hallo, vielleicht hat ja einer eine Idee..... leider habe ich per Google nicht das passende gefunden.
Ich suche eine Möglichkeit, in einer Base-Anwendung einem bereits geöffneten Formular aus mehreren geöffneten per Makro den Focus zu geben. Irgendetwas wie: getActiveForm()
Hintergrund ist, daß meine Anwender Formulare iconisieren und dann versuchen, das gleiche nochmals zu öffenen. Das führt unter Umständen zu fehlerhaften Resultaten, insbesondere, wenn Filterbedingungen im Spiel sind.
Nun möchte ich per Makro herausfinden, ob ein entsprechendes Formular bereits aktiv ist, damit ich ihm dann nur noch den Fokus geben brauche..
Danke für möglichst zahlreiche Antworten.
Gruß eBayer
Zuletzt geändert von eBayer am Do, 28.05.2009 14:57, insgesamt 1-mal geändert.
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: aktives Formular per Makro finden

Beitrag von turtle47 »

Hallo eBayer,

hilft Dir folgender Code weiter:

Code: Alles auswählen

sub FensterWechseln
   GlobalScope.BasicLibraries.LoadLibrary("Tools")
   Dim oDesktop As Object, oDocs As Object
   Dim oDoc As Object, oComponents As Object
   oComponents = StarDesktop.getComponents()
   oDocs = oComponents.createEnumeration()
   DO WHILE oDocs.hasMoreElements()
   ON ERROR resume next
   oDoc = oDocs.nextElement()
   datei= odoc.geturl()
   FileN = FileNameoutofPath(datei)
   'xray oDoc
    if FileN = "private:object" and oDoc.title = "Deine_Datei.odb : Deine_Tabelle (schreibgeschützt)" then
    oDoc.CurrentController.Frame.getContainerWindow().setFocus
       EXIT DO
    end if
  LOOP
end sub
?

Viel Erfolg.

Jürgen

Edit: Wer lesen kann ist klar im Vorteil.
Mit dem Code wird ja nur der Focus auf das Formular gesetzt und nicht maximiert. :?
Vielleicht kann den Code ja trotzdem jemand brauchen.
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: aktives Formular per Makro finden

Beitrag von turtle47 »

Hi,

hier der vervollständigte Code mit Hilfe diese Threads: :wink:

Code: Alles auswählen

sub FensterWechseln
   GlobalScope.BasicLibraries.LoadLibrary("Tools")
   Dim oDesktop As Object, oDocs As Object
   Dim oDoc As Object, oComponents As Object
   oComponents = StarDesktop.getComponents()
   oDocs = oComponents.createEnumeration()
   DO WHILE oDocs.hasMoreElements()
   ON ERROR resume next
   oDoc = oDocs.nextElement()
   datei= odoc.geturl()
   FileN = FileNameoutofPath(datei)
   'xray oDoc
    if FileN = "private:object" and oDoc.title = "Deine_Datei.odb : Dein_Formular (schreibgeschützt)" then
    oDoc.CurrentController.Frame.getContainerWindow().setFocus
    
    dim vFrame as Object
	dim vWindow as Object
	dim vRect as Object
	dim intHeight as Integer
	dim intWidth  as Integer
	dim intXPos as Integer
	dim intYPos as Integer
   
	vFrame = StarDesktop.getCurrentFrame()
	vWindow = vFrame.getContainerWindow()
	vRect = vWindow.getPosSize()
	intXPos=vRect.X
	intYPos=vRect.Y
	intHeight=700
	intWidth=1024    
	oDoc.CurrentController.Frame.getContainerWindow().setPosSize(intXPos, intYPos, intWidth, intHeight, 15)
       EXIT DO
    end if
  LOOP   
end sub
Gut's Nächtle.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Gelöst! Re: aktives Formular per Makro finden

Beitrag von eBayer »

Danke Jürgen,
das war die Lösung..... ich habe einfach nicht den richtigen Ansatz gefunden.
Klasse!
Gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Antworten