Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Frame
BildScreenshot zu Frame Frame-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ScrollBar
BildScreenshot zu ScrollBar ScrollBar-Seite mit Beispielarbeitsmappe aufrufen

Zoom Frame mit WMP in Userform Flackern

Betrifft: Zoom Frame mit WMP in Userform Flackern von: Andrea
Geschrieben am: 21.10.2020 07:06:59

Hallo Gemeinde, wieder mal nächtelang rauf und runter gesucht. Deshalb meine Frage.


Habe eine Windowsmediaplayer auf einer Userform2 in Frame1. Frame1 befindet sich in Frame2, da ich ab und zu den Bildausschnitt des Frames1 verändern/verschieben/vergrößern/verkleinern möchte.

Mit Scrollbar1 verändere ich den Zoomfaktor des Frames1 und somit die Größe des WMP-Standbilds. Funktioniert auch soweit gut. Nun ist meine Frage: Wie kann ich beim Zoomen des Frames1 das aktuelle WMP-Standbild (WMP wird vorher per Pause angehalten) im Frame1 für die Zeit des Zoomens (Millisec. mit ständigem Aktualisieren) einfrieren? Jeder kleine Zoomschritt wird ja sichtbar neu berechnet und mit störendem Flackern angezeigt.


Ich hab's jetzt probiert mit folgenden Varianten:

- .Frame1.visible = false/ nach zoom true... (flackert zwar auch noch aber nicht mehr so doll, sieht trotzdem nicht so schön aus).

- .Frame2.visible = false... (flackert ebenfalls ein bisschen /grauer Hintergrund des Userforms wird bei beiden Varianten kurz sichtbar)

- Application.ScreenUpdating = False.... vor Zoomberechnung bringt nichts - WMP-Bild im Frame1 wird trotzdem beim Zoomen gezeigt und sehr unruhig verändert.

- 2. Userform mit identischen WMP-Player (aus Hintergrund für Zeit des Zoomens per Show nach vorne holen, funktioniert zwar, Scrollbar gerät aber ins Stocken (vielleicht zu viel Rechnerei, denn die 2. Userform muss ja danach auch angepasst werden und der Vorgang müsste sich ja ständig wiederholen)

- Screenshort.Bild erstellen und im Frame1/oder Frame2.Picture für die Zeit des Zoomens permanent aktualisieren/löschen ...Hm?
Stecke also da jetzt aktuell fest - bräuchte dafür also Hilfe - aber kann mir vorstellen, dass das auch letztendlich Kapazitäten verbraucht und die Scrollbar, bzw. das Scroll-Event mit dem permanenten Austausch (StandBild.Picture, WMP, Standbild.Picture. WMP .... usw.) ins Stocken gerät?


Es sind viele Überlegungen und vielleicht befinde ich mich mit meinen bescheidenen Kenntnissen auf dem absoluten Holzweg und es gibt eine viel simplere Lösung. Also bitte nicht schimpfen. Der Code ist schon etwas durcheinandergeraten. Es funktioniert ja bisher gut, aber könnte doch etwas schöner aussehen beim WMP-Zoom-Scrollen.

Ich danke Euch für die freundliche Hilfe.


Viele Grüße Andrea

Betrifft: AW: Zoom Frame mit WMP in Userform Flackern
von: Nepumuk
Geschrieben am: 21.10.2020 10:05:22

Hallo Andrea,

teste mal folgendes im Modul deines UserForms:

Option Explicit

Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function LockWindowUpdate Lib "user32.dll" ( _
    ByVal hwndLock As LongPtr) As Long

Private Const GC_CLASSNAMEUSERFORM As String = "ThunderDFrame"

Public Sub Test()
    
    Dim lngptrHwnd As LongPtr
    
    lngptrHwnd = FindWindowA(GC_CLASSNAMEUSERFORM, Caption)
    
    Call LockWindowUpdate(lngptrHwnd)
    
    'hier dein Zoom
    
    Call LockWindowUpdate(0)
    
End Sub

Gruß
Nepumuk

Betrifft: AW: Zoom Frame mit WMP in Userform Flackern
von: Andrea
Geschrieben am: 21.10.2020 17:41:22

Hallo Nepumuk, vielen Dank zunächst, dass Du Dich reingedacht und sogar noch dabei an meine _ 64er Bit Version gedacht hast. Ich hab jetzt alles probiert. Meinen Code nochmal auseinander genommen und nur das Wichtigste gekoppelt mit Deiner Idee in das Scrollevent der Scrollbar eingefügt. Das klang vielversprechend. Aber es blitzen und blinken immer noch Geisterbilder im WMP kurz, wenn ich Frame1.visible auf true belasse und die Zoomzeile passiere. Hab mal den Code der Scrollbar hier reingehängt. Im Frame1 ist der WMP. Alles; Scrollbar, Frames und WMP befinden sich im selben Userforms. Vielleicht hast Du noch eine Idee. Ich kann mit dem Frame1.visible=false/true auch leben. Schöner wäre es flüssig. (Deinen Codeblock hier über
Public Sub Test habe ich ganz oben im Userforms eingefügt.) Vielleicht hab ich ja einen Fehler  _
gemacht. 

Danke und viele Grüße
Andrea

Public Sub ScrollBarVertiWMP_Scroll()

Dim lngptrHwnd As LongPtr

    Application.ScreenUpdating = False
    
    TabelleWMP.Range("B14").Value2 = ScrollBarVertiWMP.Value ' Zoom Prozenterhöhung
    
        With Frame1
            .Top = TabelleWMP.Range("B20")
            .Left = TabelleWMP.Range("C20")
            .Height = TabelleWMP.Range("B18")
            .Width = TabelleWMP.Range("C18")
            .Visible = False
            
            lngptrHwnd = FindWindowA(GC_CLASSNAMEUSERFORM, Caption)
            Call LockWindowUpdate(lngptrHwnd)
            .Zoom = 100 + TabelleWMP.Range("B17").Value2
            Call LockWindowUpdate(0)
            
            .Visible = True
        End With
        
    Application.ScreenUpdating = True
        
End Sub


Betrifft: AW: Zoom Frame mit WMP in Userform Flackern
von: Nepumuk
Geschrieben am: 21.10.2020 17:54:30

Hallo Andrea,

kannst du die Mappe mit dem UserForm mal hochladen? Dann kann ich selbst testen.

Gruß
Nepumuk

Betrifft: AW: Zoom Frame mit WMP in Userform Flackern
von: Andrea
Geschrieben am: 22.10.2020 02:31:25

Hallo Nepumuk, ja werde ich machen. Wird etwas dauern, da ich das ganze Probier-Gewurstel im Hintergrund herausschmeißen muss. So wäre es eine Zumutung;-). Danke, bis dann.
Viele Grüße
Andrea

Beiträge aus dem Excel-Forum zum Thema "Zoom Frame mit WMP in Userform Flackern"