Deutsch
Forum

Bitmap / Icon-DLL mit XProfan erzeugen?? ändern??

 

KHR
Hallo miteinander,

.

momentan hab ich da einige Programme in der Mache, die bitmaps oder Icons aus ner DLL verwenden. Das klappt dank Eurer Hilfe ja ganz gut.

Jetzt komme ich aber langsam in den Bereich, wo ich die Inhalte dieser DLLs nicht nur mit einem Ressourcen-Tool sondern auch von einem XProfan-Programm aus ändern oder gar anlegen können sollte.

Hab ich da nen einfachen Weg übersehen?

Oder meint Ihr: Laß die Finger weg - is zu komplex?

Wer kann mir Tips geben?
 
Gruß
Karl-Heinz
WIN XP home/Pro / XPROFAN 11 / P2CPP
ATMEL + BASCOM Fan
23.02.2009  
 




Andreas
Miethe


Ich würde sagen weitermachen ! Ist nicht so schwer.
KompilierenMarkierenSeparieren
#############################################
Bitmaps als Resource in eine Dll einbinden
#############################################
nur für NT-basierende Windows-Versionen
#############################################
XPROFAN 11.1
#############################################
 $H Windows.ph
cls ~GetsysColor(~COLOR_BTNFACE)
Print Ich bin ein Test
Bitmap zu Testzwecken anlegen
Var Testname$ = Test.bmp
Var Testpic& = Create(hPic,0,&SCRBMP)
SavePic Testname$,Testpic&
Var hUpdate& = ~BeginUpdateResource(Leer32.dll,0)
Parameter 1 = Pfad zur Dll ( anpassen )
Parameter 2 = BOOL fuer alle Resourcen loeschen (1 oder Null)
Declare FileData#,Size&
Dim FileData#,FileSize(Testname$)
Assign #1,Testname$
OpenRW #1
Size& = @BlockRead(#1,FileData#,0,FileSize(Testname$))
CloseRW #1
~UpdateResource(hUpdate&,~RT_BITMAP,11,~GetSystemDefaultLangID(),FileData#,Size&)
UpdateResource für alle Resourcen ausführen die eingefügt werden sollen
sind die beiden letzten Parameter = NULL wirddie Resource gelöscht
Dispose FileData#
~EndUpdateResource(hUpdate&,0)
EndUpdateResource fügt alle Resourcen in die Dll ein und schliesst die Operation ab
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
23.02.2009  
 



So einfach(?)
 
23.02.2009  
 




Andreas
Miethe


iF
So einfach(?)


Ja klar, aber nur wenn man weiss wie es geht
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
23.02.2009  
 



Gehör ich jetzt mit zu!
 
23.02.2009  
 




Uwe
''Pascal''
Niemeier
Hi Andreas!



Würde das auch mit Interpreter / Runtime (ungelinkt) klappen (über %HInstance oder anstelle der dll geladen)? Z.B. um die Größe der enthaltenen Icons zu ändern bzw. selbige zu ersetzen?

SeeYou
Pascal
 
23.02.2009  
 




KHR
Hallo Andreas,

.

sicher kann ich jetzt nicht sagen, daß ich dazugehöre
Ich kanns zwar anwenden, aber was ich da dann mache weiß ich nicht so recht.

Zum anderen geh es bei mir einfach noch nicht. Muß noch ein bißchen probieren. Wenn es dann nicht klappt komm ich wieder zum rumheulen her.

.

Den code mit dem auslesen der Bitmap-Namen hab ich ja auch lange nicht kapiert. Und das umstricken hat nur geklappt, weil ich nach jeder Code-Änderung ausprobiert habe obs noch läuft. Wenn ja - ein Schritt weiter, wenn nicht - 1 Schritt zurück. Und jede Zwischenversion abgespeichert.
 
Gruß
Karl-Heinz
WIN XP home/Pro / XPROFAN 11 / P2CPP
ATMEL + BASCOM Fan
23.02.2009  
 




Andreas
Miethe


Uwe Pascal Niemeier
Hi Andreas!



Würde das auch mit Interpreter / Runtime (ungelinkt) klappen (über %HInstance oder anstelle der dll geladen)? Z.B. um die Größe der enthaltenen Icons zu ändern bzw. selbige zu ersetzen?

SeeYou
Pascal


Du musst dazu Schreibrechte haben. Das heisst die Datei darf zu dem Zeitpunkt nicht ausgeführt werden. Es wird auch kein Handle sondern ein Filename$ als Parameter erwartet.
Direkt zur Laufzeit geht es also nicht.
Ein Programm zu schreiben, dass die Resourcen vor dem Linken ändert ist möglich, danach kann der Linker ja per Hand aufgerufen werden.
Bei Icons wird es allerding schon schwieriger ( stichwort MultiIcons ).

Ich habe hier noch einen alten Code rumliegen. Mal sehen ob ich es schaffe den nach XProfan zu portieren.
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
23.02.2009  
 




Andreas
Miethe


Ich habe den alten Code umgefummelt.
Ist vielleicht eine gute Idee den einfach als Include einzubinden.
Hoffe es haben sich keine Fehler eingeschlichen.
KompilierenMarkierenSeparieren
 $H Windows.ph
###########

Proc ClearAll

    Parameters Filename$
    Declare hUpdate&
    hUpdate& = ~BeginUpdateResource(ADDR(FileName$),1)alle Resourcen loeschen
    ~EndUpdateResource(hUpdate&,0)

EndProc

###########

Proc AddBmp

    Parameters FileName$,ResFile$
    Declare FileData#,Size&,IsBMP$
    ResFile$ = Upper$(Resfile$)
    Dim FileData#,FileSize(ResFile$)
    Assign #1,ResFile$
    OpenRW #1
    Size& = @BlockRead(#1,FileData#,0,FileSize(ResFile$))
    IsBMP$ = Chr$(Byte(Filedata#,0))+ Chr$(Byte(Filedata#,1))

    If IsBMP$ = BM

        ~UpdateResource(hUpdate&,~RT_BITMAP,ADDR(ResFile$),~GetSystemDefaultLangID(),ADDR(FileData#)+14,SizeOf(FileData#)-14)
        CloseRW #1
        Dispose FileData#

    Endif

EndProc

###########

Proc DelBmp

    Parameters FileName$,ResFile$
    Declare Mod&
    ResFile$ = Upper$(Resfile$)
    Mod& = UseDll(Filename$)

    If ~FindResource(Mod&,Addr(Resfile$),~RT_BITMAP)

        FreeDll Mod&
        ~UpdateResource(hUpdate&,~RT_BITMAP,ADDR(ResFile$),~GetSystemDefaultLangID(),0,0)

    Endif

EndProc

###########

Proc AddUSER

    Parameters FileName$,ResFile$,My$
    Declare FileData#,Size&
    ResFile$ = Upper$(Resfile$)
    Dim FileData#,FileSize(ResFile$)
    Assign #1,ResFile$
    OpenRW #1
    Size& = @BlockRead(#1,FileData#,0,FileSize(ResFile$))
    ~UpdateResource(hUpdate&,Addr(My$),ADDR(ResFile$),~GetSystemDefaultLangID(),ADDR(FileData#),SizeOf(FileData#))
    CloseRW #1
    Dispose FileData#

Endproc

###########

Proc DelUSER

    Parameters FileName$,ResFile$,My$
    Declare Mod&
    ResFile$ = Upper$(Resfile$)
    Mod& = UseDll(Filename$)

    If ~FindResource(Mod&,Addr(Resfile$),Addr(My$))

        FreeDll Mod&
        ~UpdateResource(hUpdate&,Addr(My$),ADDR(ResFile$),~GetSystemDefaultLangID(),0,0)

    EndProc

    ###########

    Proc AddCursor

        Parameters Filename$,Resfile$
        Declare FileData#,size&
        ResFile$ = Upper$(Resfile$)
        Dim FileData#,FileSize(ResFile$)
        Assign #1,ResFile$
        OpenRW #1
        Size& = @BlockRead(#1,FileData#,0,FileSize(ResFile$))
        CloseRW #1
        ~UpdateResource(hUpdate&,~RT_CURSOR,ADDR(ResFile$),~GetSystemDefaultLangID(),ADDR(FileData#)+18,Size&-18)
        Dispose FileData#

    EndProc

    ###########

    Proc DelCursor

        Parameters FileName$,ResFile$
        Declare Mod&
        ResFile$ = Upper$(Resfile$)
        Mod& = UseDll(Filename$)

        If ~FindResource(Mod&,Addr(Resfile$),~RT_CURSOR)

            FreeDll Mod&
            ~UpdateResource(hUpdate&,~RT_CURSOR,ADDR(ResFile$),~GetSystemDefaultLangID(),0,0)

        Endif

    EndProc

    ###########

    Proc AddIcon

        Parameters Filename$,Resfile$
        MultiIcons

        Proc GetLastIconNum

            Parameters hModul&
            set(FastMode,1)
            ~EnumResourceNames(hModul&,3,ProcAddr(ResNames,4),0)

            Proc ResNames

                Parameters hModul&,lpszType&,lpszName&,lParam&

                If lpszName& & $FFFF0000

                    AddString(l&,String$(lpszName&,0))

                else

                    AddString(l&,Str$(lpszName&))

                Endif

                Return 1

            EndProc

            set(FastMode,0)

        EndProc

        Proc GetIconZahl

            Declare Ret&,Size#
            Parameters file$
            Dim Size#,2
            FileMode 0
            Assign #1,file$
            OpenRW #1
            Seek #1,4
            wieviele Icons sind im File ?
            BlockRead(#1,Size#,0,2)
            Ret& = @Word(Size#,0)
            close #1
            Dispose size#
            Return Ret&

        EndProc

        Proc GetIconDimensions

            Declare Icons&,x%,Size#
            Parameters file$
            Dim Size#,16
            FileMode 0
            Let x% = 0
            Assign #1,file$
            OpenRW #1

            whilenot x% = anzahl%

                zum Einstiegspunkt der einzelnen Icons
                Seek #1,6+(x%*16)
                BlockRead(#1,Size#,0,16)
                Breite%[x%]   = @Byte(size#,0)
                hoehe%[x%]    = @Byte(size#,1)
                farben%[x%]    = @Byte(size#,2)
                reserved%[x%] = @Byte(size#,3)
                colplanes%[x%] = @word(size#,4)
                bitspixel%[x%] =  @word(size#,6)
                bytesinres%[x%] =  @long(size#,8)
                offset%[x%] =  @word(size#,12)
                Inc x%

            EndWhile

            CloseRW #1
            FileMode 2
            Dispose Size#

        EndProc

        Proc DrawSingleIcon

            Parameters Ico$,x%
            Declare FileHeader#,Dummy#
            Dim Fileheader#,22
            Fileheader fuer Icon anlegen
            word fileheader#,0 = 0
            word fileheader#,2 = 1Icon
            word fileheader#,4 = 1How many Images
            byte fileheader#,6 = Breite%[x%]width
            byte fileheader#,7 = Hoehe%[x%]height
            byte fileheader#,8 = farben%[x%]colorcount
            byte fileheader#,9 = reserved%[x%]reserved
            word fileheader#,10 = colplanes%[x%]colorplanes
            word fileheader#,12 = bitspixel%[x%]bitcount
            long fileheader#,14 = bytesinres%[x%]BytesInRes
            long fileheader#,18 = 22ImageOffset
            Daten EinzelIcon auslesen
            Dim Dummy#,bytesinres%[x%]
            assign #1,ico$
            OpenRW #1
            Seek #1,offset%[x%]
            BlockRead(#1,dummy#,0,bytesinres%[x%])
            close #1
            ~UpdateResource(hUpdate&,~RT_ICON,x%+LastIcon&+1,~GetSystemDefaultLangID(),dummy#,bytesinres%[x%])
            Dispose FileHeader#

        endproc

        Proc DrawMultiIcon

            Parameters Ico$,anzahl%
            Declare FileHeader#,xxxx%,x%
            Dim Fileheader#,(20*anzahl%)
            xxxx% = 0
            word fileheader#,0 = 0
            word fileheader#,2 = 1Icon
            word fileheader#,4 = anzahl%How many Images

            Whilenot x% = anzahl%

                byte fileheader#,6+xxxx% = Breite%[x%]width
                byte fileheader#,7+xxxx% = Hoehe%[x%]height
                byte fileheader#,8+xxxx% = farben%[x%]colorcount
                byte fileheader#,9+xxxx% = reserved%[x%]reserved
                word fileheader#,10+xxxx% = colplanes%[x%]colorplanes
                word fileheader#,12+xxxx% = bitspixel%[x%]bitcount
                long fileheader#,14+xxxx% = bytesinres%[x%]BytesInRes
                word fileheader#,18+xxxx% = x%+Lasticon&+1ID
                xxxx% = xxxx% + 14
                Inc x%

            endwhile

            ~UpdateResource(hUpdate&,~RT_GROUP_ICON,Addr(ico$),~GetSystemDefaultLangID(),FileHeader#,sizeOf(Fileheader#))
            Dispose FileHeader#

        EndProc

        ResFile$ = Upper$(Resfile$)
        Declare d&,l&
        d& = UseDll(Filename$)
        l& = Create(SortedListBox,%hwnd,,0,0,0,0)
        GetLastIconNum(d&)
        Var LastIcon& = val(GetString$(l&,GetCount(l&)-1))
        Freedll d&
        Destroywindow(l&)
        Declare anzahl%
        anzahl% = GetIconZahl(ResFile$)  Anzahl der enthaltenen Icons holen
        Arrays deklarieren
        Declare breite%[anzahl%]
        Declare hoehe%[anzahl%]
        Declare farben%[anzahl%]
        Declare colplanes%[anzahl%]
        Declare reserved%[anzahl%]
        Declare bitspixel%[anzahl%]
        Declare bytesinres%[anzahl%]
        Declare offset%[anzahl%]
        Declare Ico&[anzahl%]
        Werte der einezelnen Icons in die Arrays bringen
        GetIconDimensions(ResFile$)
        Declare xxx%

        Whilenot xxx% = anzahl%

            DrawSingleIcon(resfile$,xxx%)
            inc xxx%

        wend

        DrawMultiIcon(resfile$,anzahl%)

    EndProc

    ############

    Proc DelICON

        Parameters FileName$,ResFile$
        Declare Mod&
        Declare hFind&,hGlobal&,hLock&,Icons&,X%,xxxx%,Index$
        ResFile$ = Upper$(Resfile$)
        Mod& = UseDll(Filename$)
        hFind& = ~FindResource(Mod&,Addr(Resfile$),~RT_GROUP_ICON)

        If hFind&

            hGlobal& = ~LoadResource(Mod&,hFind&)
            hLock& = ~LockResource(hGlobal&)
            Icons& = word(hLock&,4)
            Declare IconIndex&[icons&]

            Whilenot x% = Icons&

                IconIndex&[x%] = Word(hLock&,18+xxxx%)
                xxxx% = xxxx% + 14
                Inc x%

            endwhile

            X% = 0

            Whilenot x% = Icons&

                ~UpdateResource(hUpdate&,~RT_ICON,IconIndex&[x%],~GetSystemDefaultLangID(),0,0)
                Inc x%

            Endwhile

            ~UpdateResource(hUpdate&,~RT_GROUP_ICON,ADDR(ResFile$),~GetSystemDefaultLangID(),0,0)

        Endif

        FreeDll Mod&

    EndProc

    BEISPIEL
    cls
    ClearAll(Leer32.dll)
    Var hUpdate& = ~BeginUpdateResource(Leer32.dll,0)
    AddIcon(Leer32.dll,Ram.ico)Icons
    AddBmp(Leer32.dll,Test.bmp)Bitmaps
    AddCursor(Leer32.dll,3dgmove.cur)Cursor
    AddUser(Leer32.dll,Test.bmp,Mein Bild)Userresource, Name frei wählbar
    ~EndUpdateResource(hUpdate&,0)
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
23.02.2009  
 




Uwe
''Pascal''
Niemeier
Hi Andreas!

Das wird sich sicher noch als Nützlich erweisen!

SeeYou
Pascal
 
23.02.2009  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

6.175 Betrachtungen

Unbenanntvor 0 min.
Jürgen Strahl25.04.2022
Walter14.09.2018
E.T.06.03.2018
Uwe Lang16.09.2013
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie