JPG nach BMP



  • Sieh dir mal diesen FAQ-Beitrag an, das Assign funktioniert auch in die andere Richtung.



  • 24 Bit-Format: (Graphics::TBitmap)::PixelFormat



  • Hi,

    mit aktiv ActiveDesktop geht *.jpg, *.gif,....

    #define NO_WIN32_LEAN_AND_MEAN
    #include <vcl.h>
    
    bool __fastcall TForm1::SetWallpaper(AnsiString APictureFileName)
    {
     WCHAR FileName[MAX_PATH];
     MultiByteToWideChar(CP_ACP, 0, APictureFileName.c_str(),
                         APictureFileName.Length() + 1,
                         FileName, sizeof(FileName));
    
     CoInitialize(NULL);
     IActiveDesktop *pActiveDesktop;
    
     HRESULT hr = CoCreateInstance(Shlobj::CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
                                   IID_IActiveDesktop, (void**)&pActiveDesktop);
     if (hr != S_OK)
      return false;
     if (pActiveDesktop->SetWallpaper((LPCWSTR)FileName, 0) != S_OK)
      return false;
     pActiveDesktop->ApplyChanges(AD_APPLY_ALL);
     pActiveDesktop->Release();
     CoUninitialize();
     return true;
    }
    


  • _fastcall TForm1::SetWallpaper(AnsiString)' is not a member of 'TForm1'

    Was muss ich noch machen?

    Und wie führe ich es dann aus?
    z.B. dann bei einem Buttonklick

    SetWallpaer(?...?);

    Entschuldigt die für euch dummen Fragen 🙄



  • Du musst die Funktion auch in der Header-Datei deklarieren.



  • OK, habe das nun so unter private definiert

    bool __fastcall SetWallpaper(AnsiString APictureFileName);

    nun kommen aber 7 Fehler

    [C++ Error] Unit1.cpp(27): E2268 Call to undefined function 'CoInitialize'
    [C++ Error] Unit1.cpp(28): E2451 Undefined symbol 'IActiveDesktop'
    [C++ Error] Unit1.cpp(28): E2451 Undefined symbol 'pActiveDesktop'
    [C++ Error] Unit1.cpp(30): E2268 Call to undefined function 'CoCreateInstance'
    [C++ Error] Unit1.cpp(31): E2451 Undefined symbol 'IID_IActiveDesktop'
    [C++ Error] Unit1.cpp(36): E2451 Undefined symbol 'AD_APPLY_ALL'
    [C++ Error] Unit1.cpp(38): E2268 Call to undefined function 'CoUninitialize'
    

    seit ihr euch sicher, dass der Code richtig ist und für den BCB?

    #include "Unit1.h"
    und dann folgendes ist drinnen
    #define NO_WIN32_LEAN_AND_MEAN
    #include <vcl.h>

    obwohl diese includes für den BCB doch überflüssig wären



  • OK, mal langsam:
    du schreibest den Code von oben in die *.cpp-Datei und in der *.h Datei ergänst du nur ganz oben:

    #define NO_WIN32_LEAN_AND_MEAN
    

    und unter private:

    bool __fastcall TForm1::SetWallpaper(AnsiString APictureFileName);
    

    Dann erstellst du auf Form1 einen Button und rufst die Funktion in OnClick auf:

    SetWallpaper("Z:\\Wallaper\\1.jpg");
    

    Dann müsste es eigentlich funktionieren!

    ALexander Sulfrian



  • Danke Alexander Sulfrian, sptzenmäßif erklär!, aber es funktionier immernoch nicht. Wenigstens weiß ich jetzt wie diese bool Funktion geht, echt super. Und die deklarationen in den *.h

    Dafür Danke ich dir!

    Aber, ich glaube so deppert kann ich gar nicht sein, dass ich es jetzt immernoch nicht auf die Reihe gekrigt habe.
    Wenn das jemand mit den Informationen hinbekommt, dann bitte melden.
    Wenns jemand anders schafft, bitte auch melden 🙂



  • Hallo Leute

    Ich weiss, dass dieser Post uralt ist, ich habe aber das gleiche Problem:

    Kann den Code nicht ausführen. Welche Header müssen dafür eingebunden werden? Laut MSDN muss shlobj.h genutzt werden. Es funktioniert aber nicht...

    Danke im Voraus





  • "Funktioniert nicht" ist keine Fehlerbeschreibung.



  • Danke, aber das Problem besteht weiterhin

    habe folgende Includes
    registry.hpp
    shlobj.h
    ComObj.hpp

    aber BCB6 Enterpr gibt folgendes aus

    Build
    [C++ Error] shobjidl.h(2193): E2238 Multiple declaration for 'FOLDERSETTINGS'
    [C++ Error] shobjidl.h(8095): E2238 Multiple declaration for 'DESKBANDINFO'
    [C++ Error] shlobj.h(1422): E2238 Multiple declaration for 'FVSHOWINFO'
    [C++ Error] shlobj.h(3457): E2238 Multiple declaration for 'SHELLFLAGSTATE'

    binde ich irgendetwas zuviel ( Multiple declaration) oder zuwenig ein???

    Bitte helft mir



  • Unter Projekt->Optionen->Verzeichisse/Bedingungen dort unter Bedingungen NO_WIN32_LEAN_AND_MEAN eintragen



  • Vielen, vielen Dank. Es funktioniert endlich



  • Siehe FAQ und auch weiter oben in diesem thread.
    Augen auf beim Eierkauf!


Anmelden zum Antworten