Zum Inhalt springen

Loki876

Mitglieder
  • Gesamte Inhalte

    65
  • Benutzer seit

  • Letzter Besuch

Beiträge von Loki876

  1. Hi...

    Ich moechte/muss in einem Dialog der Klasse CDialog auf Daten die in der Klasse ApplicationDoc gespeichert sind.

    Habe es mit untem dem code probiert aber da kommt beim compilieren die Fehlermeldung, dass er die Befehle(z.B. GetDocumet) nicht kennt.

    CApplicationDoc* pDoc = static_cast<CApplicationDoc*>(GetDocument());
    
    

    Also meine Frage: Wie kann ich auf Variablen von ApplicationDoc in der Klasse CDialog zugreifen?

    Gruss!

  2. Hi.

    Ich moechte in meinem Programm von meiner ApplicationDoc-Klasse aus ein Listenfeld in einem anderen DialogFenster(CBatchList mit Basisklasse CFormView) loeschen um es danach wieder von ApplicationDoc aus zu fuellen. Der Liste selbst habe ich als Control Membervariable m_ctrlBatchList zu gewiesen.

    Dazu habe ich:

    POSITION pos=GetFirstViewPosition(); 
    
    CBatchList* pBatchList = reinterpret_cast<CBatchList*>(GetNextView(pos)); 
    
    
    pBatcgList->m_ctrlBatchList.DeleteAllItems();
    
    Code:
    
    POSITION pos=GetFirstViewPosition(); 
    
    CBatchList* pBatchList = reinterpret_cast<CBatchList*>(GetNextView(pos)); 
    
    
    pBatchList->m_ctrlBatchList.DeleteAllItems();

    Aber es tut sich nichts, sprich die liste wird nicht geleert. Beim Debuggen sehe ich, dass der Wert 0 zurueck gegeben wird, d.h. die operarion war nicht erfolgreich.

    muss ich vielleicht den pointer anders zu weisen?

    danke fuer jede hilfe.

    gruss thomas

  3. sorry, ich bin kein programmierer fuer mich ist das alles andere als banal. das ganze ist teil meiner dipl.arbeit.

    die timeline muss nicht viel koennen.

    ich muss ihr EditUnits(kleinse Schnitteinheit, z.B. ein Frame) zuweisen koennen.

    die zeitlachse sollte im Timeoce format skaliert sein.

    ich muss ihr clips(mit einer bestimmten dauer) zuweisen koennen. am besten waere es wenn ich die clips noch jeweils anklicken koennte um mir metadaten(Dauer, codec, framerate, etc.) der clips anzeigen lassen zu koennen.

  4. Also so wie ich es mir vorstelle funktioniert es doch mit DirectShow leider nicht, daher bin ich immer noch auf der suche nach einer loesung. bei codeproject und codeguru bin ich leider nur auf viele leute getroffen, die das selbe problem haben aber keine loesungen.

    ich versuche eine art EDL(eine Schnittliste, d.h. eine beschreibung wie ein film geschnitten wurde) in einer timeline(mit audio und videotracks) zu visualisieren.

    Ich habe die information vereinfacht gesagt in der form:

    Videoclip1 von sekunde 0 bis 10

    Videoclilp2 von sekunde 10 bis 15

    usw. ...

    Hat jemand ne idee wie ich sowas mit VC++ realisieren kann?

  5. ich probiere es jetzt mit directShow hinzubekommen

    (http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c/directx/htm/constructingatimeline.asp)

    und habe den quellcode nun in meine Klasse Timeline eingefuegt. bekomme aber beim compilieren 8 unaufgeloeste externe symbole angezeigt.

    z.B. Timeline.obj : error LNK2001: Nichtaufgeloestes externes Symbol _IID_IAMTimelineTrack

    #include "dshow.h"
    
    #include "qedit.h"
    
    
    ...
    
    
    
    // Preview a timeline.
    
    void PreviewTL(IAMTimeline *pTL, IRenderEngine *pRender) 
    
    {
    
        IGraphBuilder   *pGraph = NULL;
    
        IMediaControl   *pControl = NULL;
    
        IMediaEvent     *pEvent = NULL;
    
    
        // Build the graph.
    
        pRender->SetTimelineObject(pTL);
    
        pRender->ConnectFrontEnd( );
    
        pRender->RenderOutputPins( );
    
    
        // Run the graph.
    
        pRender->GetFilterGraph(&pGraph);
    
        pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
    
        pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
    
        pControl->Run();
    
    
        long evCode;
    
        pEvent->WaitForCompletion(INFINITE, &evCode);
    
        pControl->Stop();
    
    
        // Clean up.
    
        pEvent->Release();
    
        pControl->Release();
    
        pGraph->Release();
    
    }
    
    
    void CTimeline::OnInitialUpdate()
    
    {
    
        CFormView::OnInitialUpdate():
    
    
        // Start by making an empty timeline.
    
    
        IAMTimeline    *pTL = NULL;
    
        CoInitialize(NULL);
    
        CoCreateInstance(CLSID_AMTimeline, NULL, CLSCTX_INPROC_SERVER, 
    
            IID_IAMTimeline, (void**)&pTL);
    
    
        // GROUP: Add a video group to the timeline. 
    
    
        IAMTimelineGroup    *pGroup = NULL;
    
        IAMTimelineObj      *pGroupObj = NULL;
    
        pTL->CreateEmptyNode(&pGroupObj, TIMELINE_MAJOR_TYPE_GROUP);
    
        pGroupObj->QueryInterface(IID_IAMTimelineGroup, (void **)&pGroup);
    
    
        // Set the group media type. This example sets the type to "video" and
    
        // lets DES pick the default settings. For a more detailed example,
    
        // see "Setting the Group Media Type."
    
        AM_MEDIA_TYPE mtGroup;  
    
        ZeroMemory(&mtGroup, sizeof(AM_MEDIA_TYPE));
    
        mtGroup.majortype = MEDIATYPE_Video;
    
        pGroup->SetMediaType(&mtGroup);
    
        pTL->AddGroup(pGroupObj);
    
        pGroupObj->Release();
    
    
        // TRACK: Add a track to the group. 
    
    
        IAMTimelineObj      *pTrackObj;
    
        IAMTimelineTrack    *pTrack;
    
        IAMTimelineComp     *pComp = NULL;
    
    
        pTL->CreateEmptyNode(&pTrackObj, TIMELINE_MAJOR_TYPE_TRACK);
    
        pGroup->QueryInterface(IID_IAMTimelineComp, (void **)&pComp);
    
        pComp->VTrackInsBefore(pTrackObj, 0);
    
        pTrackObj->QueryInterface(IID_IAMTimelineTrack, (void **)&pTrack);
    
    
        pTrackObj->Release();
    
        pComp->Release();    
    
        pGroup->Release();
    
    
        // SOURCE: Add a source to the track.
    
    
        IAMTimelineSrc *pSource = NULL;
    
        IAMTimelineObj *pSourceObj;
    
        pTL->CreateEmptyNode(&pSourceObj, TIMELINE_MAJOR_TYPE_SOURCE);
    
        pSourceObj->QueryInterface(IID_IAMTimelineSrc, (void **)&pSource);
    
    
        // Set the times and the file name.
    
        pSourceObj->SetStartStop(0, 50000000);
    
        BSTR bstrFile = SysAllocString(OLESTR("C:\\example.avi"));
    
        pSource->SetMediaName(bstrFile); 
    
        SysFreeString(bstrFile);
    
        pSource->SetMediaTimes(40000000, 140000000);
    
        pTrack->SrcAdd(pSourceObj);
    
    
        pSourceObj->Release();
    
        pSource->Release();
    
        pTrack->Release();
    
    
        // Preview the timeline.
    
        IRenderEngine *pRenderEngine = NULL;
    
        CoCreateInstance(CLSID_RenderEngine, NULL, CLSCTX_INPROC_SERVER,
    
            IID_IRenderEngine, (void**) &pRenderEngine);
    
        PreviewTL(pTL, pRenderEngine);
    
    
        // Clean up.
    
        pRenderEngine->ScrapIt();
    
        pRenderEngine->Release();
    
        pTL->Release();
    
        CoUninitialize();
    
    }
    
    

  6. hab den fehler gefunden. danke nochmal an alle.

    Ja würde ich auch sagen. Aber wenn du nur ein paar Informationen aus der Datei brauchst und dich der Rest erstmal nicht interessiert würde ich die Datei der Reihe nach durchlesen und sobald du was findest was du brauchst das dann in einer Variablen merken.

    Ist denke ich besser als ne 200MB Datei (oder wie groß die auch immer ist) komplett in den RAM zu laden...

    brauch schon ein paar mehr informationen. und diese sind objektorientiert gespeichert werden und recht verschaltet, habe ich mich deswegen bis jetzt zur den verwendung von arrays entschieden. Dazu kommt, dass nicht jede AAF datei gleich aufgebaut ist und die gleiche anzahl an Objecten(Mobs genannt) vorhanden sind.

  7. zuviel für c++ gibts nicht, höchstens für deinen speicher ;)

    Um dir einen Tipp zu geben wie du es evtl besser machen könntest solltest du erstmal genauer beschreiben was du machen willst.

    Wo kommen die Daten her die du analysieren willst und was willst du genau damit machen?

    EDIT: hmm mal wieder zu langsam

    versuche es mal so knapp und som einfach wie moeglich su erklaeren.

    ich schreibe einen analyzer fuer AAF(advanced authoring format), in der SDK gibt es einen WIN32 basierendes modul, dass die information eines AAF files als textdump ausgibt. dieser dump gilt es nun zu analysieren.

    diese dump habe ich nun in einen textarray geschrieben der nach schluesselworten durchsucht wird und bestimmt attribute(bei AAF properties genannt) schreibe ich heraus, z.B. suche ich nach Videodescriptoren und schreibe FrameRate,Resolution, Codec, etc... in ein passendes Textarray. Auf diese Textarrays, und die properties die dort drin stehen, muss ich spaeter zu greifen, um z.B. spaeter die Information in einer timeline darzustellen(mit allen Video und Audioclips, Effekten, und Transitions).

    Aber da in diesen AAF file sehr viel information und sehr komplexes beschreiben wird brauche ich viele dieser Textarrays.

    Die Fehlermeldung ist:

    Die Anweisung "0x5f477076" verweist auf Speicher in "0x33bc454c". Der Vorgang "read" konnte nicht auf dem Speicher durchgefuehrt werden.

  8. Hi,

    ich schreibe ein Programm dass einen Textdump nach bestimmten schluesselwoertern durchsucht und information die in diesem dump stehen herausliest um diese dann spaeter zu interpretieren.

    Dazu schreibe ich die informationen in Textarrays um spaeter wieder auf die informationen zugreifenzukoennen.

    Nun mein problem ist, dass ich sehr viele (und recht grosse) Textarrays dafuer brauche. Und anscheinend zu viel fuer c++. Jedenfalls bekomme ich beim ausfuehren meines programs seitdem ich ein weiteres array hinzugefuegt habe eine fehlermeldung.

    Gibt es eine moeglichkeit wie ich in C++ mehr speicher fuer meine variablen zuweisen kann oder waere es ratsamer das alles mit einer Datenbank zu realisieren?

    gruss Thomas

  9. Guten Morgen,

    ich habe einen Fenster(CFormView) mit einer Baumansicht in mein Hauptfenster eingefuegt, und diese Baumsicht auch unter CTreeForm::OnInitialUpdate() mit eintraegen gefuellt. Nun muss/will ich aber in einer Funktion die in CAnwendungDoc aufgerufen wird, eintraege hinzufuegen und konnte bis jetzt noch nicht herausfinden wie die das am geschicktesten bewerkstellige.

    Kann mir da jemand einen tipp geben?

    Gruss thomas

  10. Hi.

    Ich habe in meinem Programm das Hauptfenster in mehrere Teilfenster unterteilt, u.a. eine Baumansicht und ein Statusfenster(beides CFormView).

    ich moechte nun wenn die auswahl in dem Baum wechselt den namen der neuen auswahl in dem statusfenster schreiben.

    dazu ermittle ich zu naechst den namen der auswahl lege in ApplicationDoc ab(wo er dann von dem Statusfenster rausgelesen wird).

    void CTreeForm::OnSelchangedTree(...)

    {

    ...

    HTREEITEM selection;

    CString item;

    selection = m_ctrlTree.GetSelectedItem();

    item = m_ctrlTree.GetItemText(selection);

    CApplicationDoc* pDoc = static_cast<CApplicationDoc*>(GetDocument());

    ASSERT(Doc);

    pDoc->m_sCurrentSelection = item;

    An dieser Stelle muss ich jetzt das OnUpdate des Statusfenster aufrufen.

    Muesste aber dazu ja einen Pointer auf das Fenster setzen. (Korregiert kich falls ich falsch liege).

    Nun meine Frage:

    mit welchem befehl setzte in einen Pointer auf ein bestimmtes Fenster?

    gruss thomas

  11. Hab es grad hinbekommen.

    Hab in CApplicationDoc::OnOpenFile den Dateinamen an die Membervaribale m_sFile uebergeben,

    Und in die Funktion OnUpdate(...) folgendes eingefuegt:

    CApllicationDoc* pDoc = static_cast <CApplicationDoc*>(GetDocument);

    ASSERT(pDoc);

    m_sFileName = pDoc->m_sFile;

    Danke nochmals fuer alle beitraege.

    Gruss

  12. Hm...brechstangen methoden...

    
    CEdit *theEditField = (CEdit *)(GetDlgItem(IDC_FILENAME));
    
    if (theEditField) {
    
      theEditFiled->SetWindowText(m_sFileName);
    
      theEditFileld->UpdateData(false);
    
      theEditField->UpdateWindow();
    
    }
    
    

    Aber wie immer: Alles ohne Gewähr! :rolleyes:

    hab es mal eingetipt.

    Bei GetDlgItem verlangt er nen 2 parameter. Unter msdn.microsoft.com steht:

    HWND GetDlgItem(

    HWND hDlg,

    int nIDDlgItem

    );

    was sollte ich fuer hDlg annehmen?

  13. Einfach die Parameter nehmen, die du bekommst. Also: pSender, lHint und pHint. Ist sozusagen "nur" noch das weiterreichen an die Basisklasse!

    hab ich gemacht. passiert trotzdem nix.

    Oha! Gefährliche Mischung! :floet: :e@sy

    Ich weiss :D

    Is aber nicht wie wenn ich es nicht vorher selbst versuche rauszubekommen und meine programmiertechnischen probleme zu loesen. Aber bei der sache hier, steh ich vor einem raetsel.

  14. Nein, noch nicht. welche Parameter schreibe ich dann fort rein? die selben die auch schon bei CDlg::OnUpdate(...) deklarierrt(oder definiert wie auch immer) werden?

    Sorry wenn meine fragen etwas diletantisch wirken, bin kein programmierer. Muss es aber fuer meine Diplom Arbeit.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...