Seite 1 von 1

MCIClass Library 0.5

Verfasst: 15.11.2005 07:28
von ts-soft
Ich hab mich gestern zum ersten mal etwas intensiver mit OOP in
PureBasic befaßt, und dabei dann diese Lib entwickelt.
Der Code basiert auf MCICommands.pbi von GPI, jedoch in eine Classe
gepackt. Die Nutzung ist auch für Leute, die noch nie mit OOP zu tun
hatten Kinderleicht.

Das Interface (befindet sich in der Resident-Datei):

Code: Alles auswählen

Interface MCIClass
  Load(File.s)
  Play()
  PlayStart()
  PlayPart(startPos.l, endPos.l)
  Pause()
  Resume()
  Stop()
  Free()
  SetVolume(Volume.l)
  GetVolume()
  SetSpeed(Tempo.l)
  GetSpeed()
  GetLength()
  GetPosition()
  Seek(Pos.l)
  Version.s()
EndInterface
Ein kleines Beispielprogramm:

Code: Alles auswählen

; Objekte erstellten
snd.MCIClass = New_objMCI()
avi.MCIClass = New_objMCI()

MessageRequester("Versionsinformation", snd\Version())

; Sound und Avi laden
snd\Load("C:\WINDOWS\Media\Windows XP-Startvorgang.wav") ; Pfade bitte anpassen
avi\Load("C:\WINDOWS\clock.avi")

snd\Play() ; abspielen
avi\Play()

Delay(12000)

snd\Free() ;Objekt freigeben
avi\Free()
Die einzige Funktion der Lib, die zum Erzeugen des Objekts:
New_objMCI()
Feedback erwünscht. Wenn die Lib fertig ist, gibts dann auch den Source
dazu.

MCIClass 4,5 kb

Verfasst: 15.11.2005 07:39
von DarkDragon
Klasse! War grad aufm Klo, konnte deshalb nicht schneller Antworten. :lol: Aber es sind ja nicht ganze Klassen, es sind nur Interfaces. In PureBasic schreibt man Klassennamen dann für gewöhnlich mit einem I davor. Also bei dir IMCI

Verfasst: 15.11.2005 07:46
von ts-soft
Seit wann gibt es in PureBasic regeln für OOP :D , werde es vielleicht in der nächsten Version ändern, mal sehen was die anderen sagen. Haste denn schon mal getestet?

Re: MCIClass Library 0.5

Verfasst: 15.11.2005 10:05
von Kiffi
Hallo Thomas,

> Feedback erwünscht.

ich habe mich zuvor noch nicht mit den MCI-Sachen beschäftigt. Mir stellt
sich nun die Frage, ob es möglich ist, den aktuellen Zustandsstatus zu
ermitteln. Dann könnte man ja folgendes Konstukt bauen:

Code: Alles auswählen

avi\Play()

Repeat
 if avi\Finished() : Break : EndIf
 ; DOEVENTS() ; Oder vergleichbares
ForEver

snd\Free()

Ansonsten funktioniert Deine Lib auf meinem Rechner tadellos. :allright:
Leider habe ich noch keinen Verwendungszweck dafür. :oops:

Danke & Grüße ... Kiffi

P.S.: Ich sehe gerade, dass die Resident-Datei ''MCIClass..res" heisst.
Ist da nicht ein Punkt zuviel?

Re: MCIClass Library 0.5

Verfasst: 15.11.2005 10:52
von ts-soft
Hallo Peter
Kiffi hat geschrieben:Hallo Thomas,

> Feedback erwünscht.

ich habe mich zuvor noch nicht mit den MCI-Sachen beschäftigt. Mir stellt
sich nun die Frage, ob es möglich ist, den aktuellen Zustandsstatus zu
ermitteln. Dann könnte man ja folgendes Konstukt bauen:

Code: Alles auswählen

avi\Play()

Repeat
 if avi\Finished() : Break : EndIf
 ; DOEVENTS() ; Oder vergleichbares
ForEver

snd\Free()

Code: Alles auswählen

avi.MCIClass = New_objMCI()

avi\Load("C:\WINDOWS\clock.avi")

avi\Play()

Repeat
  If avi\GetLength() <= avi\GetPosition() : Break :EndIf
  Delay(100)
ForEver
  
avi\Free()
Ist immer vorher zu testen, funzt nicht mit jeder Datei, bzw., Ungenauigkeiten müssen berücksichtigt werden.
Kiffi hat geschrieben: Ansonsten funktioniert Deine Lib auf meinem Rechner tadellos. :allright:
Leider habe ich noch keinen Verwendungszweck dafür. :oops:

Danke & Grüße ... Kiffi

P.S.: Ich sehe gerade, dass die Resident-Datei ''MCIClass..res" heisst.
Ist da nicht ein Punkt zuviel?
Ist mir garnicht aufgefallen, der Source heißt MCIClass.pbi, also sollte ja MCIClass.res entstehen :D
Und, ist OOP so schwer?

Freut mich, wenns gefällt!

//Edit:
Das mit den 2 Punkten scheint ne Macke von Tailbite zu sein, macht er wohl nur, wenn nur ein Interface in der Resident ist. Werde ich mal weiter beobachten und dann El_Choni melden.

Re: MCIClass Library 0.5

Verfasst: 15.11.2005 11:09
von Kiffi
> Und, ist OOP so schwer?

für mich sowieso nicht. 8)

Da ist es schon schwieriger mit PB zu arbeiten ;-)

Grüße ... Kiffi

Verfasst: 15.11.2005 11:14
von ts-soft
Hab ja extra eine Lib draus gemacht, ansonsten ist ja keine echte Kapselung
vorhanden. Ob Vererbung auch geht, werde ich dann auch noch mal
austüfteln. Aber erstmal hab ich klein angefangen :D

Verfasst: 15.07.2006 14:07
von Delle
Ist das eigentlich mittlerweile fertig als Lib oder Klasse?

Verfasst: 15.07.2006 17:54
von ts-soft
Delle hat geschrieben:Ist das eigentlich mittlerweile fertig als Lib oder Klasse?
Nein, eingestellt!

Verfasst: 15.07.2006 18:08
von remi_meier
Jetzt wo ichs grad seh, für eine "Finished" Funktion könnte folgender
Code funktionieren (natürlich anpassen):

Code: Alles auswählen

Procedure.l SNDHasStopped(id.s)
  Protected Buffer.s
  Buffer = Space(255)
  mciSendString_("status " + id + " mode", Buffer, 255, 0)
  If Buffer = "stopped"
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure