Announcement

Collapse
No announcement yet.

AVI als Ressource einbinden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • AVI als Ressource einbinden

    Hallo,<br>
    (Delphi6.2)<br>
    ich versuche, eine kleine AVI-Datei einem TAnimate aus einer
    Ressourcedatei zuzuweisen.<br>
    Die Dartei TEST.RC Datei sieht so aus:<br>
    <pre>
    VIDEO1 RCDATA update.avi
    </pre>
    Die .RC Datei wird mit brc32 -r TEST.RC compiliert bzw.
    direkt in das Projekt aufgenommen. <br>
    In dem Testformular wird das AVI aufgerufen:<br>
    <pre>
    .....
    {$R *.dfm} {$R test.res}

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Animate1.ResName := 'VIDEO1'; // HIER KOMMT SCHON DIE FEHLERMELDUNG
    Animate1.Active := TRUE;
    end;
    </pre>
    Wird während der Laufzeit <i>ResName</i> der TAnimate Komponente gesetzt, bekommt man die Fehlermeldung:<br>
    <b>AVI kann nicht geöffnet werden.</b><br>
    Woran könnte das liegen ?<br>
    Wenn ich das (gleiche) AVI direkt über die Eigenschaft <i>FileName</i> anspreche, funktioniert es.<br>
    Viele Grüsse<br>
    Hermann

  • #2
    Hallo,

    in meinem Buch <i>Delphi Win32-Lösungen</i> stelle ich auf den Seiten 135 bis 146 mehrere Beispielprojekte (natives API-Programm ohne VCL, AVI im TForm <b>ohne</b> Komponente abspielen, eigene Komponente TAniComp) vor, die AVIs aus den eigenen Ressourcen abspielen. Diese Programme entstanden, als TAnimate in der VCL nocht nicht vorhanden war.

    In TAnimate muss ResName und ResHandle synchron gesetzt werden.

    Was passiert, wenn das ANIMATE-Control von Win32 zur Laufzeit dynamisch im TForm erzeugt wird? Im folgenden Beispiel verwendet ich eine TPaintBox-Instanz als "Platzhalter" für die Festlegung der Position vom ANIMATE-Control:
    <pre>
    {$R *.DFM}
    {$R VCLANIX.RES} // AVI-Clips als RES-Datei

    uses Commctrl;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    // neue Windows95-Controls initialisieren
    InitCommonControls;
    // Animation_Control-Fenster erzeugen
    hAniWnd := CreateWindow(ANIMATE_CLASS, '',
    WS_Child or WS_Visible or ACS_AutoPlay
    or ACS_Transparent,
    PaintBoxAVI.Left + 3, PaintBoxAVI.Top + 3,
    PaintBoxAVI.Width - 3, PaintBoxAVI.Height - 3,
    Form1.Handle, 0, hInstance, nil);
    // Fensterinstanz vorhanden ? -> AVI einsetzen
    if hAniWnd <> 0 then
    SendMessage(hAniWnd, ACM_OPEN, 0, LongInt(PChar('AVIFILECOPY')));
    end;
    </pre&gt

    Comment


    • #3
      Hallo,<br>
      vielen Dank. Das Problem war nicht das Zuweisen der Ressource sondern
      das Ressourcefile selbst. Der Ressourcetyp ist nicht RCDATA sondern AVI. Die Zeile im Ressourcefile muss also lauten:<br>
      <pre>
      VIDEO1 AVI update.avi
      </pre>
      Der <i>synchrone</i> Aufruf sieht dann so aus:
      <pre>
      Animate1.ResName := 'VIDEO1';
      Animate1.ResHandle:= hinstance;
      Animate1.Active := TRUE;
      </pre>
      Damit klappt es.
      Viele Grüsse<br>
      Herman

      Comment


      • #4
        Hallo,<BR>
        da ich ein Neuling in Sachen Delphi bin muss ich dieses Thema nochmal aufgreifen...<BR>
        Wenn ich also ein AVI mit dem Programm mitkompilieren möchte muss ich was tun?<BR>
        Aus dem AVI ein RES machen??<BR>
        Und dann {$R test.res} ???<BR>
        ???? HILF

        Comment


        • #5
          Hi Jens,<br>
          probiere es mal so:<ul>
          <li>Schreibe eine Test.rc, wie sie Hermann in seinem zweiten Posting beschrieben hat.
          <li>Füge sie deinem Projekt hinzu (über Menüpunkt "Projekt -> Dem Projekt hinzufügen").
          Im Projektquelltext (*.dpr) sollte danach eine Zeile der Form <tt>{$R 'Test.res' 'Test.rc'}</tt>
          auftauchen.
          <li>Jetzt wird die *.res-Datei beim Compilieren automatisch von Delphi erzeugt und zur *.exe dazugelinkt.
          <li>Den Rest mache wieder wie Hermann - ResName setzen und so.
          </ul>
          So, hoffentlich funktioniert das jetzt auch - getestet habe ich es nicht. :-)
          <p>Ciao, Uli

          Comment


          • #6
            Hey, das ist ja ganz einfach, wenn man einmal weiß wie ).<BR>Mit anderen Worten: es funktioniert!<BR>Vielen Dank

            Comment


            • #7
              Bitteschön :-)
              <br>Schön, dass es funktioniert

              Comment


              • #8
                Soweit so gut.<BR>Aber geht das auch mit WAV-Dateien? Ich habe schon ein Test.rc geschrieben und eingebunden (wird auch mitcompiliert): <BR><PRE> TON1 WAV cs.wav</PRE>in Test.rc. Dann erscheint <PRE> {$R 'Test.res' 'Test.rc'}</PRE>Nur wie spiele ich das jetzt ab?<BR>Mit dem Mediaplayer hab ich's nicht hingekriegt und mit<PRE> sndPlaySound('TON1',0);</PRE>spielt der mir nur das standart "Ding" von Windows ab und bleibt, solange der Ton gespielt wird, in dieser Routine stecken.<BR>Was mache ich falsch

                Comment

                Working...
                X