Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

WinAPI-Programm Problem (langsam...)

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 10.05.2008, 11:16    Titel: WinAPI-Programm Problem (langsam...) Antworten mit Zitat

Ich habe dieses Programm mit Hilfe von EasyCode erstellt. Für die mciSendString-Funktion "play MyAlias from" habe ich Code aus einem funktionierenden Programm genommen; allerdings funktioniert diese Funktion da nicht...
Ausserdem, seit ich sie implementiert habe reagiert das Programm langsam, braucht immer seine Zei wenn ein Setuerelement angeklickt wurde (aber nicht sofort zu Beginn sondern erst wenn ich den TrackBar für die Position angeklickt habe!).
Weiss da jemand woran das liegen kann?

Code:

Include   comdlg32.inc
IncludeLib   Comdlg32.lib

Include   shell32.inc
IncludeLib   shell32.lib

Include   \masm32\include\winmm.inc
includelib \masm32\lib\winmm.lib

includelib \masm32\lib\shlwapi.lib
include \masm32\include\shlwapi.inc

.Const

.Data?
szFileName DB 255 Dup(?), 0
szFehler DB 100 Dup(?), 0
winhWnd DD ?

spos DB 255 Dup (?), 0
zahlpos DD ?
zahl DD ?
laenge DD ?
sBuffer DB 255 Dup(?), 0

volstr DB 4 Dup(?), 0
pos DB 255 Dup (?), 0

sforward DB 255 Dup(?), 0
.Data

inull DD 0
status DB "status MyAlias length", 0
cpos DB "status MyAlias position ",0
fehler DB "Fehler bein Öffnen der Datei/keine kompatible Mediendatei oder von dieser Windows-Version nicht unterstützt", 0
sformat DB "%i", 0
mcivolstr DB "setaudio MyAlias volume to ", 0
infoTitel DB "geöffnete Datei", 0

tensec DD 10000
forward DB " play MyAlias from ", 0

ofn                  OPENFILENAME   <0>

open1 DB "open ", 1024 Dup(?), 0
open2 DB " type MPEGVideo alias MyAlias",0       
play DB "play MyAlias",0
stop DB "stop MyAlias",0
filename DB 1024 dup(?)
close DB "close MyAlias", 0
mci3 DB 0

.Code

Window1Procedure Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM
   .If uMsg == WM_CREATE
 Mov Eax, hWnd
 Mov winhWnd, Eax
 Invoke DragAcceptFiles, Eax, 255
      Return TRUE

      .ElseIf uMsg == WM_VSCROLL

Call setvolume




.ElseIf uMsg == WM_TIMER
 .If wParam == 1
    Call curpos
    Invoke GetWindowItem, winhWnd, IDC_WINDOW1_SLIDER2
    Invoke SendMessage, Eax, TBM_SETPOS, zahlpos, zahlpos



.EndIf


.ElseIf uMsg == WM_DROPFILES
   Mov szFileName, 0
        Invoke DragQueryFile, wParam, 0, Addr szFileName, SizeOf szFileName
      invoke mciSendString, ADDR stop, ADDR mci3,0,0
    Invoke mciSendString, Addr close, Addr mci3, 0, 0


        Jmp abspielen


   .ElseIf uMsg == WM_CLOSE
      Invoke mciSendString, Addr stop, Addr mci3, 0, 0
        Invoke mciSendString, Addr close, Addr mci3, 0, 0
      Invoke IsModal, hWnd
      .If Eax
         Invoke EndModal, hWnd, IDCANCEL
         Return TRUE
      .EndIf

      .ElseIf uMsg == WM_COMMAND
         Mov Eax, wParam
         .If Ax == IDC_WINDOW1_BUTTON1
            Shr Eax, 16

            .If Ax == BN_CLICKED

Mov ofn.lStructSize, SizeOf OPENFILENAME
    ;Push hParent
     ;Pop ofn.hWndOwner
    ;Push hInstance
    ;Pop ofn.hInstance
    ;Push lpFilter
    ;Pop ofn.lpstrFilter
    Push Offset szFileName
    Pop ofn.lpstrFile
    Mov ofn.nMaxFile, SizeOf szFileName
   ; Push lpTitle
   ; Pop ofn.lpstrTitle
    Mov ofn.Flags,              OFN_EXPLORER or OFN_FILEMUSTEXIST or \
                                OFN_LONGNAMES


        Invoke GetOpenFileName, Addr ofn
        Invoke mciSendString, Addr stop, Addr mci3, 0, 0
        Invoke mciSendString, Addr close, Addr mci3, 0, 0
abspielen: Mov open1[5], 0       ;open ,0 und nicht weiter, string leeren
Invoke GetShortPathName, Addr szFileName, Addr filename, 255
Lea Esi, open1
 FindLastByte:
  lodsb
  Or al, al
  jnz FindLastByte
 
  dec esi
  mov edi, esi
  lea esi, filename
  CatStrings:
  lodsb
  Or al, al
  jz Done
  stosb
  jmp CatStrings
 
 Done:
  mov al, 0
  stosb


                 ;Start:   
  lea esi, open1
 FindLastByte2:
  lodsb
  Or al, al
  jnz FindLastByte2
 
  dec esi
  mov edi, esi
  lea esi, open2
  CatStrings2:
  lodsb
  Or al, al
  jz Done2
  stosb
  jmp CatStrings2
 
 Done2:
  mov al, 0
  stosb

            lea eax, open1
                   
            invoke mciSendString, eax, ADDR mci3,0,0
                                   
           
                lea ebx, mci3
                lea eax, play
                Invoke mciSendString, Eax, Ebx, 0, 0
                Cmp Eax, 0
                Je ok
                Invoke mciGetErrorString, Eax, Addr szFehler, 100
                Invoke MessageBox, winhWnd, Addr szFehler, Addr fehler, MB_OK Or MB_ICONERROR

ok:  Call setvolume
     Call getlength
     
     Invoke GetWindowItem, winhWnd, IDC_WINDOW1_SLIDER2

     Invoke SendMessage, Eax, TBM_SETRANGEMAX, NULL, laenge
;Invoke SetScrollRange, Eax, TBHSCROLL, inull, laenge, FALSE ;ebenfalls falsch


.EndIf
.EndIf

.If Ax == IDC_WINDOW1_BUTTON2
            Shr Eax, 16

            .If Ax == BN_CLICKED

              Invoke mciSendString, Addr stop, Addr mci3, 0, 0
              Invoke mciSendString, Addr close, Addr mci3, 0, 0
            .EndIf
            .EndIf

            


.If Ax == IDC_WINDOW1_BUTTON3
            Shr Eax, 16

            .If Ax == BN_CLICKED

              Invoke mciSendString, Addr stop, Addr mci3, 0, 0

            .EndIf
            .EndIf

            .If Ax == IDC_WINDOW1_BUTTON4
            Shr Eax, 16

            .If Ax == BN_CLICKED

              lea ebx, mci3
                Lea Eax, play
                Invoke mciSendString, Eax, Ebx, 0, 0
                Call setvolume
            .EndIf
            .EndIf

            .If Ax == IDC_WINDOW1_BUTTON5
               Shr Eax, 16
               .If Ax == BN_CLICKED
                  Invoke mciSendString, Addr stop, Addr mci3, 0, 0
        Invoke mciSendString, Addr close, Addr mci3, 0, 0
                     Jmp abspielen
                  .EndIf
                  .EndIf

                  .If Ax == IDC_WINDOW1_BUTTON6
               Shr Eax, 16
               .If Ax == BN_CLICKED
                  Invoke MessageBox, 0, Addr szFileName, Addr infoTitel, MB_ICONINFORMATION
                  .EndIf
                  .EndIf

                  .If Ax == IDC_WINDOW1_BUTTON7
            Shr Eax, 16

            .If Ax == BN_CLICKED

              Call goback
            .EndIf
            .EndIf

            .If Ax == IDC_WINDOW1_BUTTON8
            Shr Eax, 16

            .If Ax == BN_CLICKED

             
            .EndIf
            .EndIf

     


   .EndIf
   Return FALSE
Window1Procedure EndP
setvolume Proc
   Mov mcivolstr[28], 0
   Mov volstr, 0000
Invoke GetWindowItem, winhWnd, IDC_WINDOW1_SLIDER1
Invoke SendMessage, Eax, TBM_GETPOS, TRUE, NULL
Invoke wsprintf, Addr volstr, Addr sformat, Eax

Lea Esi, mcivolstr
FindLastByte3:
  lodsb
  Or al, al
  Jnz FindLastByte3
 
  dec esi
  mov edi, esi
  Lea Esi, volstr
CatStrings1:
  lodsb
  Or al, al
  Jz Done1
  stosb
  Jmp CatStrings1
 
Done1:
  mov al, 0
  stosb


                 ;Start:   
  lea esi, open1
 FindLastByte2:
  lodsb
  Or al, al
  jnz FindLastByte2
 
  dec esi
  mov edi, esi
  lea esi, open2
CatStrings3:
  lodsb
  Or al, al
  Jz Done3
  stosb
  Jmp CatStrings3
 
Done3:
  mov al, 0
  stosb
Lea Eax, mcivolstr

Invoke mciSendString, Eax, 0, 0, 0
Ret
setvolume EndP
getlength Proc

invoke mciSendString, addr status, addr sBuffer,255, 0

invoke StrToInt, addr sBuffer

 
mov laenge, eax
ret
getlength endp

curpos Proc

invoke mciSendString, addr cpos, addr spos, 255, 0
invoke StrToInt, addr spos
mov zahlpos, eax
ret
curpos EndP
setpos Proc
Invoke GetWindowItem, winhWnd, IDC_WINDOW1_SLIDER2
Invoke SendMessage, Eax, TBM_GETPOS, TRUE, NULL

Invoke wsprintf, Addr pos, Addr sformat, Eax
Invoke mciSendString, Addr forward, Addr pos, 0, 0
;Invoke MessageBox, 0, Addr forward, Addr pos, 0
ret
setpos EndP

goback Proc

Mov Eax, zahlpos
sub eax, tensec
invoke wsprintf, addr sforward, addr sformat, eax
Invoke mciSendString, Addr forward, Addr sforward, 0, 0
Invoke MessageBox, 0, Addr forward, Addr sforward, 0
ret
goback endp

Window1Button1 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM
   Return FALSE
Window1Button1 EndP


Window1Button2 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM

   Return FALSE
Window1Button2 EndP

Window1Slider1 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM
   Return FALSE
Window1Slider1 EndP

Window1Static1 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM
   Return FALSE
Window1Static1 EndP

Window1Button3 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM
   Return FALSE
Window1Button3 EndP

Window1Button4 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM
   Return FALSE
Window1Button4 EndP


Window1Static2 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM
   Return FALSE
Window1Static2 EndP

Window1Static3 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM
   Return FALSE
Window1Static3 EndP

Window1Slider2 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM

.If uMsg == WM_LBUTTONUP



         Call setpos



      .EndIf

   Return FALSE
Window1Slider2 EndP

Window1Button5 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM
   Return FALSE
Window1Button5 EndP

Window1Button6 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM
   Return FALSE
Window1Button6 EndP

Window1Button7 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM
   Return FALSE
Window1Button7 EndP

Window1Button8 Proc Private hWnd:HWND, uMsg:ULONG, wParam:WPARAM, lParam:LPARAM
   Return FALSE
Window1Button8 EndP

_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz