Avatar billede nakalay Nybegynder
09. april 2002 - 17:07 Der er 70 kommentarer og
1 løsning

ActiveX Control?!

Jeg har lavet et indsat et "ActiveMovieControl" Objekt...hvordan får jeg den til at virke og kunne afspille en videoklip?
Avatar billede soepro Nybegynder
10. april 2002 - 09:47 #1
Hvilken compiler bruger du ? Når du siger indsat, hvad mener du så ? Under C++ Builder skal man importere ActiveX controllen først og dernæst "droppe" den dannede ActiveX control på sin form. Herefter kan du se alle properties og events direkte i Object Inspectoren.

På en alm. Media-player control er der normalt en FileName property, som du udfylder med navnet på videoklippet, og dernæst "fyrer" du blot MediaPlayer1->Play(); for at få afspillet video'en:

void __fastcall Form1::Button1Click(TObject *Sender)
{
  String MediaFile = "C:\\windows\Media\\start.wav";
  if (Sender == Button1 && FileExists(MediaFile))
  {
    MediaPlayer1->FileName = MediaFile;
    try
    {
      MediaPlayer1->Play();
    }
    catch (Exception &e)
    {
      Application->MessageBox(("Fejl " + e.Message.TrimRight() + " under afspilning af " + MediaFile + ". Ret fejlen og prøv igen.").c_str(),
        "Fejl under afspilning af mediefil", ICON_ERROR | MB_OK);
  }
}
Avatar billede nakalay Nybegynder
10. april 2002 - 11:07 #2
Jeg bruger VC++ 6.0 ... og hvad jeg mener med indsat er at jeg har højreklikket i en dialogbox og trykket: "Insert ActiveX Control"...
Avatar billede nakalay Nybegynder
10. april 2002 - 11:21 #3
Skal jeg måske gå i Classwizard og så lave en klasse under "ActiveX Events" og så derefter nogle events?!
Avatar billede nakalay Nybegynder
10. april 2002 - 11:25 #4
og forresten jeg vil egentlig også gerne vide hvad objekt der er bedst til at afspille videoklip:
                          "ActiveMovieControl"
                                  eller
                          "Windows Media Player"
                                    ???
Avatar billede jpk Nybegynder
10. april 2002 - 13:09 #5
Hvis du fx har ind en Media Player, har du sikkert også fået genereret en wrapper class, CMediaPlayer2, ikke?
Du kan så gøre følgende:

CMediaPlayer2* pMovie = (CMediaPlayer2*)GetDlgItem(IDC_MEDIAPLAYER);
pMovie->Open("D:\\Movie.mpeg");

Hvor IDC_MEDIAPLAYER skal erstattes med det ID du har givet din kontrol og filnavnet selvfølgelig også skal tilrettes...
Avatar billede nakalay Nybegynder
10. april 2002 - 13:17 #6
wrapper class?
Avatar billede jpk Nybegynder
10. april 2002 - 13:26 #7
Okay, gå istedet op i Project->Add to Project->Components and Controls.
Vælg registered ActiveX Controls, klik på "ActiveMovieControl Object" og vælg "Insert".
Klik "OK" når du bliver spurgt om du vil indsætte komponenten og "OK" igen for at acceptere klassenavnet.
Du får nu indsat en klasse (fx "CActiveMovie3"), som du kan bruge til at håndtere kontrollen.
Avatar billede nakalay Nybegynder
10. april 2002 - 13:33 #8
hva skal jeg gøre med koden du har skrevet?
Avatar billede jpk Nybegynder
10. april 2002 - 13:36 #9
Det var blot et eksempel...
Hvad hedder den klasse du har fået genereret?
Avatar billede nakalay Nybegynder
10. april 2002 - 13:37 #10
CMediaPlayer2
Avatar billede jpk Nybegynder
10. april 2002 - 13:44 #11
Okay, jamen så indsætter du bare de to linier kode der hvor du vil afspille noget..!
Avatar billede nakalay Nybegynder
10. april 2002 - 13:46 #12
Hva mener du med det ? :) ... i hvaffor en fil og hvaffor et sted f. eks. ??
Avatar billede jpk Nybegynder
10. april 2002 - 13:51 #13
Du vil gerne afspille en fil, ikke?
Altså skal du gøre hvad er helt naturligt, tilføje en handler for en button eller hvad du nu vil have brugeren skal gøre for at afspille filmen!
I din handler indsætter du de to linier kode...

Fx:

void CMyApp::OnButton()
{
  CMediaPlayer2* pMovie = (CMediaPlayer2*)GetDlgItem(IDC_MEDIAPLAYER);
  pMovie->Open("D:\\Movie.mpeg");
}
Avatar billede nakalay Nybegynder
10. april 2002 - 13:58 #14
Der er jo en "start-knap" i selve mediaplayeren...der er den der skal bruges men hvordan giver jeg den en handler?
Avatar billede jpk Nybegynder
10. april 2002 - 14:07 #15
Det behøver du jo ikke, når der er loadet en film, kan du bare trykke på play-knappen...
Avatar billede nakalay Nybegynder
10. april 2002 - 14:10 #16
hmm ? så det er for at åbne ikke spille filmen?!
Den skal jo bare loade af sig selv...så koden skal bare i sammen med koden der åbner dialog-vinduet? eller hva?
Avatar billede jpk Nybegynder
10. april 2002 - 14:12 #17
Hvis du vil have det til at ske uden bruger-input, kan du fx lægge det i OnInitDialog
Avatar billede nakalay Nybegynder
10. april 2002 - 14:18 #18
hvor ligger det?
Avatar billede jpk Nybegynder
10. april 2002 - 14:21 #19
Du skal override OnInitDialog og lægge koden der!
(hvis det altså er på en dialog naturligvis...)
Avatar billede jpk Nybegynder
10. april 2002 - 14:23 #20
Højre-klik på din dialog, vælg "ClassWizard" og markér WM_INITDIALOG i list-boxen med messages.
Klik "Add Function" og dernæst "Edit Code"
Avatar billede nakalay Nybegynder
10. april 2002 - 14:23 #21
ja ok men hvor finder jeg OnInitDialog ?
Avatar billede nakalay Nybegynder
10. april 2002 - 14:24 #22
ok
Avatar billede nakalay Nybegynder
10. april 2002 - 14:31 #23
hehe jeg tror det virker men dialogen kommer ikke!? :)
Avatar billede jpk Nybegynder
10. april 2002 - 14:36 #24
Har du ændret stien til filen + ID'et på kontrollen (IDC_MEDIAPLAYER)?
Avatar billede nakalay Nybegynder
10. april 2002 - 14:37 #25
jeg kan ikke finde nogen fejl ;) satans
Avatar billede nakalay Nybegynder
10. april 2002 - 14:38 #26
det er ikke mediaplayeren der gør det...den kunne heller ikke åbne det vindue før jeg havde lavet alt det der media-noget..
Avatar billede jpk Nybegynder
10. april 2002 - 14:39 #27
Så skulle du nok have startet med at kigge på det...
Avatar billede nakalay Nybegynder
10. april 2002 - 14:41 #28
jeg troede det var fordi der var en "tom" mediaplayer control i boxen
Avatar billede nakalay Nybegynder
10. april 2002 - 14:43 #29
hvad tror du der er galt?
Avatar billede jpk Nybegynder
10. april 2002 - 14:49 #30
Med de oplysninger du har givet (ingen) er det lidt svært at gætte...
Desuden tror jeg du har fået fuld valuta for dine 25 point.
Avatar billede nakalay Nybegynder
10. april 2002 - 14:49 #31
:D
Avatar billede nakalay Nybegynder
10. april 2002 - 14:52 #32
:D !!! hmm jeg ved jo ikke hvad der eventuelt kunne være galt...der kommer intet vindue ... men der kommer der ingen fejl i programmet så der kan da ikke være skreven noget forkert! højest glemt noget eller noget :)
Avatar billede nakalay Nybegynder
10. april 2002 - 15:14 #33
hmm okay så får du din vilje...
Avatar billede soepro Nybegynder
11. april 2002 - 08:35 #34
Tja, man må jo blot endnu en gang konstatere, at C++ Builder er meget mere logisk og intuitiv at bruge.
Avatar billede jpk Nybegynder
11. april 2002 - 08:46 #35
Kunne vi ikke respektere hinandens valg af "religion" uden at skulle komme med kommentarer der ikke tjener andet end irriatation og blot udmunder i endeløse, forudindtagede diskutioner om hvad der er bedst?

Jeg har intet imod konstruktiv kritik, men nedladende kommentarer hører ikke i den gruppe!

Jeg håber du er enig soepro...
Avatar billede soepro Nybegynder
11. april 2002 - 08:51 #36
Det er jeg - men jeg har også lov til at mene at C++ Builder's løsning på problemet er noget mere ligetil, f.eks. har jeg ikke behov for at kende Windows interne konstanter WM_INITDIALOG, IDC_MEDIAPLAYER og lignende for at lave en simpel (trods alt) afspilling af lyd eller videoklip.
Avatar billede jpk Nybegynder
11. april 2002 - 09:22 #37
Nej selvfølgelig, men det er også det jeg mener med at en kommentar som den du skrev er nyttesløs, du har nemlig misforstået det.

Når du indsætter en kontrol på en dialog giver du den et ID som du kan identificere den ved. I mit eksempel har jeg valgt at kalde den IDC_MEDIAPLAYER. Man kunne også bare lave en membervariabel for kontrollen, med et museklik og et par tastetryk. Du kunne så glemme alt om IDC_MEDIAPLAYER...

WM_INITDIALOG er den message der bliver sendt umiddelbart før dialogen vises. At han skal bruge den skyldes kun, at han vil have at noget skal ske uden brugerinput, når dialogen vises. At kende den er selvfølgelig en nødvendighed i det her tilfælde, men det vil jo ikke være anderledes i Builderen, vel? (Du skal stadig vide hvilken funktion der kaldes ved visning af en dialog). Kodestuppen for funktionen (OnInitDialog), genereres ligeledes med et par enkelte klik med musen.

Altså, det er faktisk ufatteligt simpelt og ligetil.
Jeg er sikker på det er lige så let i Builderen og også at der er fordele og ulemper i begge miljøer.
Det er meget svært at foretage en objektiv vurdering, når man kender det ene program bedre end det andet, derfor afholder jeg mig også derfra.
Avatar billede nakalay Nybegynder
11. april 2002 - 12:21 #38
jpk det virkede ikke det der du fortalte mig..er du sikker på du ikke har glemt noget?
Avatar billede nakalay Nybegynder
11. april 2002 - 12:23 #39
der er ikke noget galt med dialogboxen indtil jeg isætter media playeren...
Avatar billede nakalay Nybegynder
11. april 2002 - 12:23 #40
så gider den ikke at "poppe" dialogen op mere
Avatar billede jpk Nybegynder
11. april 2002 - 12:41 #41
Kan du ikke prøve at sende mig dit projekt, så skal jeg kigge på det..!
jacpost@post6.tele.dk
Avatar billede nakalay Nybegynder
11. april 2002 - 13:00 #42
joda :)
Avatar billede nakalay Nybegynder
11. april 2002 - 13:48 #43
jeg har sendt det! (jeg sendte et "falsk" projekt da jeg ikke vil vise mit rigtige :) ...men det er samme problem!)

jeg kunne ikke få .ncb-filen med gør det noget?
Avatar billede nakalay Nybegynder
11. april 2002 - 14:27 #44
kan du finde fejl ?
Avatar billede jpk Nybegynder
11. april 2002 - 14:33 #45
Kald AfxEnableControlContainer(); som det første i din app's InitInstance funktion.
Avatar billede nakalay Nybegynder
11. april 2002 - 14:44 #46
skal jeg bare skrive:

AfxEnableControlContainer();

?
Avatar billede jpk Nybegynder
11. april 2002 - 14:50 #47
Nemlig:

BOOL CInspectorApp::InitInstance()
{
  AfxEnableControlContainer();
  ...
}
Avatar billede nakalay Nybegynder
11. april 2002 - 14:55 #48
hvorhenne skal jeg skrive det?
Avatar billede jpk Nybegynder
11. april 2002 - 14:57 #49
I din tilsvarende CWinApp-nedarvede klasse!
Hvis du er i tvivl hvor den er, kan du jo bare søge efter "InitInstance"
Avatar billede nakalay Nybegynder
11. april 2002 - 15:24 #50
jeg har prøvet at skrive den i (i myword.cpp):

BOOL CMyWordApp::InitInstance()
{
  AfxEnableControlContainer();
  ...
}

Og jeg har prøvet at lave den for sig selv (også i myword.cpp):

BOOL CInspectorApp::InitInstance()
{
  AfxEnableControlContainer();
}

de 2 ting virker ihvert tilfælde ikke :) jeg formoder jeg måske skal skrive dem et sted i myword.h ?
Avatar billede nakalay Nybegynder
11. april 2002 - 17:06 #51
?
Avatar billede jpk Nybegynder
11. april 2002 - 17:34 #52
Det skal naturligvis være i din egen App-klasse!

BOOL CMyWordApp::InitInstance()
{
  AfxEnableControlContainer();
  ..
}

Det virker tilsyneladende hos mig..!
Avatar billede nakalay Nybegynder
12. april 2002 - 06:46 #53
Det her får jeg da vist aldrig til at virke... :)

Det er sku da underligt hehe..!

Jeg tror jeg er forbandet!
Avatar billede nakalay Nybegynder
12. april 2002 - 07:21 #54
er du sikker på du ikke gjorde andet?
Avatar billede jpk Nybegynder
12. april 2002 - 08:35 #55
Det ENESTE jeg gør er at indsætte linien:

AfxEnableControlContainer();

som det første i CMyWordApp::InitInstance()...
Avatar billede nakalay Nybegynder
12. april 2002 - 12:40 #56
det samme gør jeg ;) men virker ikke ved mig
Avatar billede jpk Nybegynder
12. april 2002 - 12:44 #57
Prøv Build->Rebuild All
Avatar billede nakalay Nybegynder
12. april 2002 - 15:15 #58
k prøver lige
Avatar billede nakalay Nybegynder
12. april 2002 - 15:18 #59
haha den duer nuuuuuu! :D men den gider vist ikke afspille noget :)
Avatar billede nakalay Nybegynder
12. april 2002 - 15:31 #60
den siger: "Cannot play back the file.  The format is not supported."

og det er altså bare en normal .mpeg-fil ?!

hva er der nu galt?
Avatar billede jpk Nybegynder
12. april 2002 - 15:41 #61
Kan du afspille den i din Windows Media Player?
Avatar billede nakalay Nybegynder
12. april 2002 - 15:57 #62
ja sagtens
Avatar billede jpk Nybegynder
12. april 2002 - 15:58 #63
Det tyder på, at denne komponent ikke kan, altså at du skal bruge en anden...
Avatar billede nakalay Nybegynder
12. april 2002 - 16:04 #64
jeg har prøvet med andre .mpeg-filer også men den gider ikke
Avatar billede jpk Nybegynder
12. april 2002 - 16:12 #65
Det må have noget at gøre med formatet..?
Jeg kan sagtens loade en .mpeg-fil.
Avatar billede nakalay Nybegynder
12. april 2002 - 16:12 #66
haha det er kun når jeg bruger .mpeg-filer det ik dur...jeg prøvede lige med en .wmv-fil og den virkede fint :) (underligt at .mpeg-filerne ik dur?)...
Avatar billede nakalay Nybegynder
12. april 2002 - 16:13 #67
kan jeg ik gøre noget for at få den til at spille .mpeg-filer?
Avatar billede jpk Nybegynder
12. april 2002 - 16:19 #68
Jeg vil tro du skal anvende en anden komponent, eller nogle .mpeg med et andet codec...
Avatar billede nakalay Nybegynder
12. april 2002 - 17:04 #69
codec?
Avatar billede jpk Nybegynder
12. april 2002 - 17:08 #70
Jeg er ikke sikker på hvor meget et codec dækker over, men jeg vil tro det er fx komprimeringsmetode.
Avatar billede nakalay Nybegynder
12. april 2002 - 17:29 #71
hmm k :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester