VB : MassageBox- Position

  • #1
A

Alexander16

Bekanntes Mitglied
Themenersteller
Dabei seit
26.08.2002
Beiträge
473
Reaktionspunkte
0
Wie kann ich bei einer MassageBox die Anzeigeposition ändern?

z.B. damit die MassageBox rechts oben in der Ecke erscheint.

Vielen Dank 8)
 
  • #2
Achtung!
Bei Verwendung von MassageBoxen erlischt die Allgemeine Betriebserlaubnis des Computers.
Der PC wird zum medizinisch-technischen Gerät und unterliegt somit der Medizin-Geräteverordnung (MedGV). Eine jährliche sicherheitstechnische Überprüfung durch den TÜV ist somit vorgeschrieben. Die Position der MassageBox ist dabei unerheblich. Eine Anwendung am Patienten ist nur von entsprechend Physiotherapeutisch ausgebildetem Personal durchzuführen. ;) ;) ;)

Mal im Ernst. Hab von VB leider keine Ahnung. Aber als Masseur hat es mich irgendwie gereizt. ;D
Ciao
Jürgen
 
  • #3
Ich wüsste nicht, dass man die Messagebox (Du meinst ja den msgbox-Befehl, oder?) positionieren kann. Aber ich lass mich gern eines Besseren belehren... :)
 
  • #4
gehen tut das natuerlich, allerdings mal wieder nur ueber die API =)
also ich hab das mal in der kuerze der zeit zusammengebastelt.

den folgenden code kopierst du in ein code-modul, welches du deinem projet hinzufuegst. dadurch hast du die funktion immer greifbar und kannst sie in anderen programmen auch noch verwenden. das code modul hab ich nicht kommentiert, da das wahrscheinlich fuer dich als anfaenger zu hoch ist...kannst ja mal drueberschauen, ob dus verstehst =)

Code:
Option Explicit

'API deklarationen
Public Declare Function SetWindowPos Lib user32 _
  (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
  ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
  ByVal cy As Long, ByVal wFlags As Long) As Long

Public Declare Function SetWindowsHookEx Lib user32 Alias _
  SetWindowsHookExA (ByVal idHook As Long, ByVal lpfn As Long, _
  ByVal hmod As Long, ByVal dwThreadId As Long) As Long

Public Declare Function UnhookWindowsHookEx Lib user32 _
  (ByVal hHook As Long) As Long

Public Declare Function GetCurrentThreadId Lib kernel32 () As Long

'deklaration der constanten
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOZORDER = &H4
Public Const SWP_NOACTIVATE = &H10
Public Const HCBT_ACTIVATE = 5
Public Const WH_CBT = 5

'deklaration der variablen
Public hHook As Long
Public posX As Long
Public posY As Long

'funktion zur positionierung
Public Function WinProc(ByVal lMsg As Long, ByVal wParam As Long, _
  ByVal lParam As Long) As Long
 If lMsg = HCBT_ACTIVATE Then
   SetWindowPos wParam, 0, posX, posY, 0, 0, SWP_NOSIZE Or _
    SWP_NOZORDER Or SWP_NOACTIVATE
   UnhookWindowsHookEx hHook
 End If
 WinProc = False
End Function

'hauptfunktion
Public Function MyMsgBox(ByVal message As String, Optional msgBtn _
 As VbMsgBoxStyle = vbOKOnly, Optional msgTitle As Variant = , _
 Optional msgHelp As Variant = 0, Optional msgContext As Variant _
 = 0, Optional ByVal txtPosX As Variant = , Optional ByVal _
 txtPosY As Variant = ) As VbMsgBoxResult
  
  If txtPosX <>  And txtPosY <>  Then
    Dim hInst As Long, Thread As Long
    Dim msg As String
    hInst = App.hInstance
    Thread = GetCurrentThreadId()
    hHook = SetWindowsHookEx(WH_CBT, AddressOf WinProc, _
      hInst, Thread)
    posX = CLng(txtPosX)
    posY = CLng(txtPosY)
  End If
  msg$ = message
  MyMsgBox = MsgBox(msg$, msgBtn, msgTitle, msgHelp, msgContext)
End Function

den folgen den code wie gewohnt in deinen formularen etc. verwenden. hab mal fuer die demonstration 2 buttons angelegt, damit du siehst, wie das aufgerufen wird im prinzip ganz einfach und gar net so viel neu =)

Code:
Option Explicit

' Die Funktion MyMsgBox verhaelt sich an sich genauso, wie die normale MsgBox-Funktion
' Es werden lediglich 2 weitere Parameter uebergeben, die natuerlich optional sind
' Also es gilt weiterhin die Reihenfolge beim aufruf der argumente: message, msgboxstyle,
' title, helpfile, context dazu kommen jetz nur noch ,posX, posY
' diese beiden parameter geben die position des msgbox-fensters in pixeln vom linken
' oberen bildschirmrand an. laesst man die beiden parameter weg, so wird das msgbox-
' fenster wie gewohnt auf dem bildschirm zentriert.

Private Sub Command1_Click()
  'wie gewohnt auf der bildschirmmitte
  MyMsgBox so, das is jetz mal ne nachricht, vbOKOnly, testbox
End Sub

Private Sub Command2_Click()
  ' poitioniert auf x=200 und y=400 absolut vom oberen linken bildschirmrand
  MyMsgBox so, das is jetz mal ne nachricht, vbOKOnly, testbox, , , 200, 400
End Sub

so, denn mal los...viel spass damit =)
 
  • #5
Vielen Dank PCDBeBo für deine große Mühe. ;D
 
  • #6
Klar geht das über 'ne API, aber dazu war ich echt zu faul...

/hug PCDBeBo :p
 
  • #7
Mahlzeit,
ich hab vorhin versucht Windows (7 Home Premium 64 Bit) neu aufzusetzen. Hab die Festplatte formatiert und wieder partitioniert. Danach hat Windows die Dateien entpackt "Extracting Windowsfiles o.Ä. 100%" und danach gings nicht mehr weiter. Also hab ich den PC ausgemacht und wollte starten. Logischerweise kann er nicht, da in Installation unvollständig ist.
Wenn ich versuche ins Boot Menu zu gelangen, passiert nichts. Er reagiert auf keine Eingaben.
Hier mal ein Video, das zeigt, wie weit er kommt...
 
  • #8
1. win 7 komplett neu installieren.
Bein starten erst mal entf taste drücken sooft bis du ins bios kommst.
Dort suchen <<<<<Bootreihenfolge<<<<<<<<<
Dort als erstes nur Boot von CD
Alle anderen Bootfolgen disablen!!!!
Dann auf safe changes
Jetzt sollte der PC direkt starten und von CD aus Booten und Windows neu installieren.
Bitte im Bios nichts anderes ändern!!!!!
Grüsse Jürgen
 
Thema:

VB : MassageBox- Position

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben