Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

disable Icon ? [erledigt]

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10520
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

disable Icon ? [erledigt]

Beitrag von AUGE_OHR » So, 01. Mär 2015 9:43

hi,

wie bekommt man ein graues "Disable" Icon hin ?
für Bitmap gibt es ja die Function von Günter Beyes aber für Icon finde ich nichts ...

btw : wie lege ich ein neues Icon an ? eine oIcon:Make() gibt es wohl auch nicht ?
Zuletzt geändert von AUGE_OHR am Do, 05. Mär 2015 23:58, insgesamt 1-mal geändert.
gruss by OHR
Jimmy

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10520
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: disable Icon ?

Beitrag von AUGE_OHR » Do, 05. Mär 2015 23:58

eine Lösung von Diego A. Kerejeta

Code: Alles auswählen

STATIC DLLFUNCTION CreateIcon( p1, p2, p3, p4, p5, p6, p7 ) ;
       USING STDCALL                                        ;
       FROM  USER32.DLL

**************************************
FUNCTION CreateDisabledIcon( oIconIn ) 
**************************************
LOCAL oBmpIn        := CreateDisabledBmp( oIconIn:getBitmap(), .T. )
LOCAL nBits         := oBmpIn:bits
LOCAL cBuffer       := oBmpIn:setBuffer()
LOCAL nBufferOffset := oBmpIn:bufferOffset
LOCAL nXSize        := oBmpIn:xSize
LOCAL nYSize        := oBmpIn:ySize
LOCAL nRowPadding   := nXSize * nBits % 4
LOCAL nLastPixel    := nBufferOffset + nXSize * nYSize * nBits + nRowPadding * ( nYSize - 1 )
LOCAL nRowLen       := nXSize * nBits / 8 + nRowPadding
LOCAL cXORbitmask   := ''
LOCAL nCont, hIcon, oIconOut

oBmpIn:destroy()

FOR nCont:= nBufferOffset + 1 TO nLastPixel STEP nRowLen
  cXORbitmask:= SubStr( cBuffer, nCont, nRowLen ) + cXORbitmask
NEXT

hIcon = CreateIcon( 0,             ; // application instance  
                    nXSize,        ; // icon width 
                    nYSize,        ; // icon height 
                    1,             ; // number of XOR planes 
                    nBits,         ; // number of bits per pixel 
                    nil,           ; // AND bitmask  
                    cXORbitmask )    // XOR bitmask 
              
oIconOut:= XbpIcon():new():create()

IF hIcon # 0
   oIconOut:handle:= hIcon
   oIconOut:getIconInfo()
ENDIF
RETURN oIconOut
p.s. die CreateDisabledBmp() Routine ist die von Günter Beyes.
Da diese zur XP Zeit entwickelt wurde scheinen 32PP Bitmaps damit nicht ganz korrekt zu funktionieren.
siehe auch Alaska Newsgroup
XbpBitmap
public.xbase++.support.en
8. Februar 2015
wer also mit 32PP Bitmaps arbeitet und eine "saubere" Lösung benötigt wende sich an Diego.
gruss by OHR
Jimmy

Antworten