MediaPlayer & TrackBar



  • Hallo

    wenn du mit komponentendateien die .h und .cpp die ich eben gepostet hab meinst, ja die habe ich mit hand erstellt. geht denn das auch anders? 😃

    aufjedenfall hat's jetzt ohne fehlermeldung kompiliert. bin schon ganz happy

    jetzt bleibt mir bloß noch die frage wie ich die komponente in mein projekt einbinden kann?

    vielen dank



  • Hallo

    wenn du mit komponentendateien die .h und .cpp die ich eben gepostet hab meinst, ja die habe ich mit hand erstellt. geht denn das auch anders?

    Ja, mit dem Menü Komponente/Neue Komponente

    jetzt bleibt mir bloß noch die frage wie ich die komponente in mein projekt einbinden kann?

    Das habe ich dir bereits geschrieben, 2 Posts vorher.

    bis bald
    akari



  • jetzt funktioniert alles. jupi

    1000 dank für die hilfe und die gedult

    👍 👍 👍 👍 👍 👍 👍

    Gruß Christoph



  • hallo

    soweit funktioniert ja echt alles super, bloß lässt sich der Slide-Button der TrackBar keinen Millimeter verschieben.

    Ich hab das mal mit dem Debugger überprüft und an der markierten Stelle in der CPP-Datei bleibt der immer hängen.

    Header-Datei:

    #ifndef TrackBar6H
    #define TrackBar6H
    //---------------------------------------------------------------------------
    #include <SysUtils.hpp>
    #include <Classes.hpp>
    #include <ComCtrls.hpp>
    #include <Controls.hpp>
    //---------------------------------------------------------------------------
    class PACKAGE TTrackBar6 : public TTrackBar
    {
    private:
    protected:
    void __fastcall MYWMLBUTTONDOWN(TMessage &Message);
    
    BEGIN_MESSAGE_MAP
       MESSAGE_HANDLER(WM_LBUTTONDOWN,TMessage,MYWMLBUTTONDOWN);
    END_MESSAGE_MAP(TTrackBar)
    public:
            __fastcall TTrackBar6(TComponent* Owner);
    __published:
    };
    //---------------------------------------------------------------------------
    #endif
    

    CPP-Datei:

    #include <vcl.h>
    
    #pragma hdrstop
    
    #include "TrackBar6.h"
    #pragma package(smart_init)
    //---------------------------------------------------------------------------
    // Mit ValidCtrCheck wird sichergestellt, daß die erzeugten Komponenten
    // keine rein virtuellen Funktionen besitzen.
    //
    
    static inline void ValidCtrCheck(TTrackBar6 *)
    {
            new TTrackBar6(NULL);
    }
    //---------------------------------------------------------------------------
    __fastcall TTrackBar6::TTrackBar6(TComponent* Owner)
            : TTrackBar(Owner)
    {
    }
    //---------------------------------------------------------------------------
    namespace Trackbar6
    {
            void __fastcall PACKAGE Register()
            {
                     TComponentClass classes[1] = {__classid(TTrackBar6)};
                     RegisterComponents("Datensteuerung", classes, 0);
            }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TTrackBar6::MYWMLBUTTONDOWN(TMessage &Message)
    {
      if(Message.Msg == WM_LBUTTONDOWN)
        {
            maus_gedrueckt=true;
        }
    
        else
        {
            TWinControl::WndProc(Message) ;        // Hier bleibt er hängen
        }
    }
    

    aber auch wenn ich überhaupt nichts zwischen if und else schreibe kann man den slide button nicht bewegen.

    Vielen Dank



  • Hallo

    soll das nicht

    TTrackBar::WndProc(Message) ;
    

    heißen? Du must die Funktion der nächst untergeordneten Klasse aufrufen.

    bis bald
    akari



  • hi

    funktioniert aber leider trotzdem nicht. ich habe mal den code in der funktion
    auskommentiert..

    void __fastcall TTrackBar6::MYWMLBUTTONDOWN(TMessage &Message)
    {
    /*
      if(Message.Msg == WM_LBUTTONDOWN)
        {
            maus_gedrueckt=true;
        }
    
        else
        {
            TWinControl::WndProc(Message) ;        // Hier bleibt er hängen
        }
    */
    }
    

    ..
    und das problem tritt trotzdem noch auf, darum denke ich das irgendwas in der header-datei nicht stimmt

    protected:
    void __fastcall MYWMLBUTTONDOWN(TMessage &Message);
    
    BEGIN_MESSAGE_MAP
       MESSAGE_HANDLER(WM_LBUTTONDOWN,TMessage,MYWMLBUTTONDOWN);  //->vielleicht hier?
    END_MESSAGE_MAP(TTrackBar)
    

    danke



  • Hallo

    Du hast ja auch die Bedingung falsch übernommen. Ich hatte vor einigen Posts geschrieben :

    if (Message.WParam &= MK_LBUTTON)
    

    bis bald
    akari



  • hallo

    ja hast recht, aber auch wenn nichts in der funktion drin steht wird sie permanent aufgerufen. ich habe zum test mal ein haltepunkt gesetzt zwischen der if - else anweisung und das ereignis wird auch beim mausklick in die richtige if-abzweigung geleitet, bloß es wird unendlich oft widerholt. ich denke mal darum kann man den slide-button nicht bewegen da permanent die gleiche funktion aufegerufen wird, und das programm gar nicht mehr reagieren kann. aber wie kann ich das unterbinden

    danke



  • hi

    hier nochmal eine zusammenfassung was ich bisher gemacht habe.

    ich möchte das meine abgeleitete trackbar die variable "maus_gedrueckt" auf true setzt wenn ich die linke maustaste über den slide-button der trackbar drücke. aber leider funktioniert das noch nicht, da sich der slide button nicht bewegt.
    das programm scheint in einer endlosschleife (in der if-anweisung) zu stecken wenn ich die linke maustaste über den slidebutton drücke.
    hier die .h datei:

    #ifndef TrackBarH
    #define TrackBarH
    //---------------------------------------------------------------------------
    #include <SysUtils.hpp>
    #include <Classes.hpp>
    #include <ComCtrls.hpp>
    #include <Controls.hpp>
    //---------------------------------------------------------------------------
    class PACKAGE TTrackBar1 : public TTrackBar
    {
    private:
    protected:
    
    void __fastcall MYWMLBUTTONDOWN(TMessage &Message); 
    
    BEGIN_MESSAGE_MAP 
       MESSAGE_HANDLER(WM_LBUTTONDOWN,TMessage,MYWMLBUTTONDOWN); 
    END_MESSAGE_MAP(TTrackBar) 
    
    public:
            __fastcall TTrackBar1(TComponent* Owner);
    __published:
    };
    //---------------------------------------------------------------------------
    #endif
    

    hier die *.cpp datei:

    #include <vcl.h>
    
    #pragma hdrstop
    
    #include "TrackBar.h"
    #pragma package(smart_init)
    //---------------------------------------------------------------------------
    
    static inline void ValidCtrCheck(TTrackBar1 *)
    {
            new TTrackBar1(NULL);
    }
    //---------------------------------------------------------------------------
    __fastcall TTrackBar1::TTrackBar1(TComponent* Owner)
            : TTrackBar(Owner)
    {
    }
    //---------------------------------------------------------------------------
    namespace Trackbar
    {
            void __fastcall PACKAGE Register()
            {
                     TComponentClass classes[1] = {__classid(TTrackBar1)};
                     RegisterComponents("Zusätzlich", classes, 0);
            }
    }
    //---------------------------------------------------------------------------
      bool maus_gedrueckt = false;
     void __fastcall TTrackBar1::MYWMLBUTTONDOWN(TMessage &Message)
    { 
      if (Message.WParam &= MK_LBUTTON) 
        { 
            maus_gedrueckt=true; //Hier scheint er wie in einer endlosschleife   
                                 //stecken zu bleiben
        }
        else 
        { 
           TTrackBar::WndProc(Message) ;       
        } 
    }
    

    ich weiß nicht weiter? kann mir jemand helfen?

    vielen dank



  • das muss doch zu lösen sein..



  • Hallo,

    Was heißt "scheint in einer Endlosschleife zu sein". Hast du das mit dem Debugger überprüft? Ist das der ganze Code? Ich kann hier nämlich keine Schleife erkennen.
    Mach bitte auch mal maus_gedrueckt zum Member deiner Form.

    Ciao



  • hallo

    ja richtig schleife ist es keine vorhanden, aber wenn man einen haltepunkt an die markierte stelle setzt dann bleibt er auch dort egal wie oft man auf weiter drückt. sprich die funktion wird immer wieder aufgerufen nachdem man auf den slide-button gedrückt hat und dadurch glaub ich kann man den den slide-button nicht bewegen.

    vielen dank



  • Schreib doch mal

    Dispatch(&Message);
    

    ans Ende deiner Funktion.



  • hallo

    leider funktioniert das auch nicht. die funktion wird wieder so oft aufgerufen bis es zum stacküberlauf kommt. irgendwie vermute ich das der fehler hier zu finden ist:

    void __fastcall MYWMLBUTTONDOWN(TMessage &Message); 
    
    BEGIN_MESSAGE_MAP
       MESSAGE_HANDLER(WM_LBUTTONDOWN,TMessage,MYWMLBUTTONDOWN);
    END_MESSAGE_MAP(TTrackBar)
    

    vielleicht muss ein anderes Message-Objekt übergeben werden als TMessage?

    danke



  • hallo

    ich hab es erst mal soweit geschaft das die methode nur einmal aufgerufen wird. aber der slide-button lässt sich trotzdem noch nicht bewegen. irgendwie wird die mausbotschaft nicht richtig weiterverarbeitet und an das programm weitergegeben. hier noch mal der code.

    also nochmal zusammengefasst:

    -ich habe eine eigene trackbar erstellt abgeleitet von TTrackBar
    -und ich möchte das die variable maus_gedrueckt auf true gesetzt wird wenn ich mit der linken maustaste auf den slide-button drücke.
    -dabei muss sich natürlich der slide-button bei gedrückter maustaste bewegen lassen

    *.h datei:

    #ifndef TrackBarH
    #define TrackBarH
    //---------------------------------------------------------------------------
    #include <SysUtils.hpp>
    #include <Classes.hpp>
    #include <ComCtrls.hpp>
    #include <Controls.hpp>
    //---------------------------------------------------------------------------
    class PACKAGE TTrackBar1 : public TTrackBar
    {
    private:
    protected:
    
    void __fastcall MYWMLBUTTONDOWN(TWMMouse &Message); //TMessage hab  
                                                //ich durch TWMMouse ersetzt
    
    BEGIN_MESSAGE_MAP 
       MESSAGE_HANDLER(WM_LBUTTONDOWN,TWMMouse,MYWMLBUTTONDOWN); //TMessage hab  
                                                //ich durch TWMMouse ersetzt
    END_MESSAGE_MAP(TTrackBar) 
    
    public:
            __fastcall TTrackBar1(TComponent* Owner);
    __published:
    };
    //---------------------------------------------------------------------------
    #endif
    

    *.cpp datei:

    #include <vcl.h>
    
    #pragma hdrstop
    
    #include "TrackBar.h"
    #pragma package(smart_init)
    //---------------------------------------------------------------------------
    // Mit ValidCtrCheck wird sichergestellt, daß die erzeugten Komponenten
    // keine rein virtuellen Funktionen besitzen.
    //
    
    static inline void ValidCtrCheck(TTrackBar1 *)
    {
            new TTrackBar1(NULL);
    }
    //---------------------------------------------------------------------------
    __fastcall TTrackBar1::TTrackBar1(TComponent* Owner)
            : TTrackBar(Owner)
    {
    }
    //---------------------------------------------------------------------------
    namespace Trackbar
    {
            void __fastcall PACKAGE Register()
            {
                     TComponentClass classes[1] = {__classid(TTrackBar1)};
                     RegisterComponents("Zusätzlich", classes, 0);
            }
    }
    //---------------------------------------------------------------------------
      bool maus_gedrueckt = false;
     void __fastcall TTrackBar1::MYWMLBUTTONDOWN(TWMMouse &Message)  //TMessage hab  
    {                                            //ich durch TWMMouse ersetzt
      if (Message.Msg &= MK_LBUTTON) 
        { 
            maus_gedrueckt=true;
        }
         Dispatch(&Message);
    }
    

    DANKE



  • wenn einer eine lösung zu dem problem hat, gibts freibier für alle.. 😉



  • hallo

    ich hab es erst mal soweit geschaft das die methode nur einmal aufgerufen wird. aber der slide-button lässt sich trotzdem noch nicht bewegen. irgendwie wird die mausbotschaft nicht richtig weiterverarbeitet und an das programm weitergegeben. hier noch mal der code.

    also nochmal zusammengefasst:

    -ich habe eine eigene trackbar erstellt abgeleitet von TTrackBar
    -und ich möchte das die variable maus_gedrueckt auf true gesetzt wird wenn ich mit der linken maustaste auf den slide-button drücke.
    -dabei muss sich natürlich der slide-button bei gedrückter maustaste bewegen lassen

    *.h datei:

    #ifndef TrackBarH
    #define TrackBarH
    //---------------------------------------------------------------------------
    #include <SysUtils.hpp>
    #include <Classes.hpp>
    #include <ComCtrls.hpp>
    #include <Controls.hpp>
    //---------------------------------------------------------------------------
    class PACKAGE TTrackBar1 : public TTrackBar
    {
    private:
    protected:
    
    void __fastcall MYWMLBUTTONDOWN(TWMMouse &Message); //TMessage hab  
                                                //ich durch TWMMouse ersetzt
    
    BEGIN_MESSAGE_MAP 
       MESSAGE_HANDLER(WM_LBUTTONDOWN,TWMMouse,MYWMLBUTTONDOWN); //TMessage hab  
                                                //ich durch TWMMouse ersetzt
    END_MESSAGE_MAP(TTrackBar) 
    
    public:
            __fastcall TTrackBar1(TComponent* Owner);
    __published:
    };
    //---------------------------------------------------------------------------
    #endif
    

    *.cpp datei:

    #include <vcl.h>
    
    #pragma hdrstop
    
    #include "TrackBar.h"
    #pragma package(smart_init)
    //---------------------------------------------------------------------------
    
    static inline void ValidCtrCheck(TTrackBar1 *)
    {
            new TTrackBar1(NULL);
    }
    //---------------------------------------------------------------------------
    __fastcall TTrackBar1::TTrackBar1(TComponent* Owner)
            : TTrackBar(Owner)
    {
    }
    //---------------------------------------------------------------------------
    namespace Trackbar
    {
            void __fastcall PACKAGE Register()
            {
                     TComponentClass classes[1] = {__classid(TTrackBar1)};
                     RegisterComponents("Zusätzlich", classes, 0);
            }
    }
    //---------------------------------------------------------------------------
      bool maus_gedrueckt = false;
     void __fastcall TTrackBar1::MYWMLBUTTONDOWN(TWMMouse &Message)  //TMessage hab  
    {                                            //ich durch TWMMouse ersetzt
      if (Message.Msg &= MK_LBUTTON) 
        { 
            maus_gedrueckt=true;
        }
         Dispatch(&Message);
    }
    

    DANKE


Anmelden zum Antworten