PDA

Vollständige Version anzeigen : Api-Funktion


Gast
24.10.2003, 09:55
Hallo Leute,

Auf meine Frage, daß ich eine Api-Funktion brauche die mir die Möglichkeit giebt die Innenmasse des Applikationsfensters von Access einzustellen bzw. abzufragen.

erhielt ich freuntlicher Weise von Karlheinz diese deklaration:

Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type


Public Declare Function GetWindowRect Lib "user32.dll" (ByVal hwnd As Long, lpRect As RECT) As Long

Leider habe ich es nicht geschaft die Innenmasse der Applikationsfensters zu erfragen bzw. einzustellen. Ich habe es so versucht aber es hatt nicht geklapt!

GetWindowRect(Application.hWndAccessApp, ....)

und so

GetWindowRect(...., ....)

und andere ähnliche Sachen ausprobiert.

Kann mir jemand genauer sagen wie man das macht (die Innenmase der Applikationsfensters einstellen bzw. abzufragen)?

Gruß
fomo

Karlheinz
24.10.2003, 10:32
Hallo Gast,

hier ein Beispiel:

Option Compare Database
Option Explicit

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long

Public Function frmShow_max(FormObject As Form) As Boolean

Dim hwndParent As Long
Dim rectParent As RECT
Dim rectFrm As RECT
' Koordinaten des Formulars ermitteln
GetWindowRect FormObject.hwnd, rectFrm
Debug.Print "Frm Links: " & rectFrm.Left
Debug.Print "Frm rechts: " & rectFrm.Right
Debug.Print "Frm oben: " & rectFrm.Top
Debug.Print "Frm unten: " & rectFrm.Bottom

' Koordinaten des Parent-Fensters ermitteln
hwndParent = GetParent(FormObject.hwnd)
GetWindowRect hwndParent, rectParent
Debug.Print "AC Links: " & rectParent.Left
Debug.Print "AC rechts: " & rectParent.Right
Debug.Print "AC oben: " & rectParent.Top
Debug.Print "AC unten: " & rectParent.Bottom

End Function

Aufruf im Formular z. Bsp. Beim Laden
frmShow_max Me

Gruß Karlheinz

Gast
24.10.2003, 15:31
Vielen Dank Karlheinz klappt hervoragend!!

kannst Du mir vieleicht sagen ob es so eine Funktion auch für sie aussenmasse des Applikationsfensters geibt oder muss man sich das berechnen in dem man den Balken oben und die Symbolleiste dazu addiert?

kannst Du mir sagen wie das geht?

fomo

Sascha Trowitzsch
24.10.2003, 17:23
Also GetWindowRect gibt die Außenmaße (...übrigens auch nach neuer Rechtschreibung mit ß geschrieben... ;) ) eines Fensters zurück.

Vielleicht ist der Code von Karlheinz etwas verwirrend.
Er gibt als erstes die Maße des Formulars aus, und dann... hängt vom Formular ab:
- Falls ein Popup-Formular, so gibt er weiter die Außenmaße von Access aus.
- Falls nicht Popup-Formular, so gibt er stattdessen die Maße des Client-Bereichs von Access aus. (Also die graue Arbeitsfläche).

Einfacher ist es deshalb, GetwindowRect das Access-Fensterhandle zu übergeben:

GetWindowRect (RECT, Application.hWndAccessApp)

Ciao, Sascha

Gast
27.10.2003, 14:44
Hallo,

mit dem code von Karlheinz kann ich wunderbar die Innenmaße des Applikationsfensters berächnen, in dem ich

rectParent.Right - rectParent.Left

und

rectParent.Bottom - rectParent.Top

rächne.

Nun muß ich aber die Innenmaße des Applikationsfensters einstellen und mit der API-Funktion:

MoveWindow(Application.hWndAccessApp, XWert, YWert, Width, Height, True)

kann ich aber nur die Außenmaße einstellen!

Giebt es da eine andere Funktion für die Innenmaße?

Gruß
fomo

Karlheinz
27.10.2003, 15:00
Hallo Gast,

im Anhang ein Beipiel das ich vor ca. 3 Jahren mal benutzt habe.

Das Beispiel liest die Fensterdaten in eine Tabelle ein und holt die Fensterdaten beim Aufruf des Formulars wieder aus der Tabelle.
Anschliessend wird das Formular verschoben.

Und nun viel Spass beim Ausprobieren
Beachte die Rückgabewert der API Funktionen sind in Pixel
Access verwendet aber die Einheit Twips
1 Pixel umgerechnet sind 15 Twips.

Gruß Karlheinz

Sascha Trowitzsch
27.10.2003, 15:44
@Gast: Was verstehst du unter "Innenmaße" von Access?
Was für ein Bereich soll das genau sein?

Wenn du den MDIClient-Bereich meinst, so musst du halt erst beides berechnen:
- Die Außenmasse
- Den Client-Bereich

und dann Höhe und Breite der beiden voneinander abziehen. Dann hast du die "Rahmenbreiten".
Wenn du jetzt den Clientbereich einstellen willst, so schlägst du auf die Werte die berechneten Rahmenbreiten drauf und stellst mit MoveWindow die Außenmaße von Access ein.

Ciao, Sascha