| |
|
|
Georg Teles | SetMenuItemBitmap-Unit
Transparentes Bitmap sur MenuItem mettons, Stil beibehalten
Bitmap avec einem Alpha-canal aus einer Instance transparent sur un beliebiges MenuItem eines bereits existierenden Menüs mets, sans den Stil des Menüs trop changement
funktioniert aussi sur TrackMenu, allerdings muss es bereits geladen worden son (s. externes Menu comme TrackMenu [...] )
Herunterladen
enthaltene main.bmp ist avec einem Alpha-canal versehen, muss naturellement dans PROFANE.EXE zum Testen eingebunden volonté
Win XP Win Vue Win 7 Win 8 Win 10 |
|
|
| |
|
|
|
Georg Teles | Win 7, 8, 10 allez, chez XP pas, menno
|
|
|
| |
|
|
|
ByteAttack | Georg Teles (16.02.2016)
Win 7, 8, 10 allez, chez XP pas, menno
Altes Problem avec XP - Alphakanäle dans PNG volonté aussi seulement ab Vue soutenu... |
|
|
| |
|
|
|
Georg Teles | ByteAttack (16.02.2016)
Altes Problem avec XP - Alphakanäle dans PNG volonté aussi seulement ab Vue soutenu...
hm, mais c'est une Bitmap - comment regelt car XP qui Transparenz, était là pas quelque chose comme comment une belegte la couleur (s. pink alors RGB(255,0,255) qui comme Alpha canal interpretiert wird dans XP ? |
|
|
| |
|
|
|
| cela quoi Du meinst scheint sich mir plutôt sur BitBlit-Operationen [...] trop beziehen - là peux on im Prinzip 1 la couleur comme transparent (bzw. pas trop überzeichnen) définir. Ist meist la couleur 0.
So zeichnet Roland ensuite aussi z.B. chez Loadbmp ...; -1
cela hat avec Transluzenz bzw. Alpha-canal ensuite mais rien trop 1faire.
comment était cela car seulement... zeichnet Windows chez cette menu-Bildchen pas sowieso irgend une bestimmte la couleur transparent?! mir était so...
je schätze, dass Roland cela besser sais. |
|
|
| |
|
|
|
RGH | j'ai cela Ganze la fois zum Anlass pris, im kommenden XProfan X3 aussi chez normalen Menüs Icônes trop erlauben. qui Syntax ist qui gleiche comment chez den Customdraw-Menüs, seulement dass cela Icon-Handle comme negativer Wert angegeben wird.
là Windows pas direct Icônes, mais une Bitmap chez normalen Menüs erwartet, habe je en supplément une Routine geschrieben, qui un Icon dans un Bitmap umwandelt.
Zur Transparenz: chez den Customdraw-Menüs fais je oui eh' alles selbst, cela est, je zeichne cela Icon sur cela menu. Icônes avons oui de sich aus Transparenz et là muss je mich pas tout autor kümmern.
Hierbei gilt pas une Frabe comme transparent, mais Icônes avons encore une sogenannte masque: une zweifarbige noir/weiße Bitmap, chez qui qui Pixel noir sommes, qui pas transparent sommes. Um eh bien alors une Bitmap aus einem Icon trop erzeugen, erzeuge je une le vide Bitmap dans qui Taille des Icônes et kopiere eh bien Pixel pour Pixel qui Bitmap des Icônes dans qui neue Bitmap, wobei je seulement chez den schwarzen Pixeln qui masque qui Original-la couleur nehme et chez den übrigen Pixeln, qui zuvor ermittelte Systemfarbe des menu-Hintergrunds:
function IconToBitmap(DC: hDC; Icon: THandle; bc: integer): THandle; var bmpResult: tHandle; bmpColorOld, bmpMaskOld, bmpResultOld: tHandle; IInfo: ICONINFO; hdcColor, hdcMask, hdcResult: tHandle; c, m, x, y, dx, dy: integer; begin bmpResult := 0; Si GetIconInfo(Icon, IInfo) then begin dx := IInfo.xHotspot * 2; dy := IInfo.yHotspot * 2; bmpResult := CreateCompatibleBitmap(DC, dx, dy); // DCs erzeugen hdcColor := createCompatibleDC(DC); hdcMask := createCompatibleDC(DC); hdcResult := createCompatibleDC(DC); // Bitmaps zuweisen bmpColorOld := SelectObject(hdcColor, IInfo.hbmColor); bmpMaskOld := SelectObject(hdcMask, IInfo.hbmMask); bmpResultOld := SelectObject(hdcResult, bmpResult); for x := 0 to dx - 1 do begin for y := 0 to dy - 1 do begin c := getPixel(hdcColor,x,y); m := getPixel(hdcMask,x,y); si m = 0 then setPixel(hdcResult,x,y,c) d'autre setPixel(hdcResult,x,y,bc); end; end; // Ergebnis zuweisen bmpResult := SelectObject(hdcResult, bmpResultOld); // Aufräumen DeleteObject(SelectObject(hdcMask, bmpMaskOld)); DeleteObject(SelectObject(hdcColor, bmpColorOld)); DeleteObject(IInfo.hbmColor); DeleteObject(IInfo.hbmMask); DeleteDC(hdcColor); DeleteDC(hdcMask); DeleteDC(hdcResult); end; Result := bmpResult; end;
peux on den komischen Code-Formatierer aussi débrancher, avec cela qui Code so dargestellt wird, comment je ihn geschrieben habe? je hasse Programme, qui croyons pour mich mitdenken trop doit. Salut Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 17.02.2016 ▲ |
|
|
|
|
Georg Teles | iF (17.02.2016)
cela hat avec Transluzenz bzw. Alpha-canal ensuite mais rien trop 1faire. comment était cela car seulement... zeichnet Windows chez cette menu-Bildchen pas sowieso irgend une bestimmte la couleur transparent?! mir était so...
oui c'est ca, avec cela hat cela rien zutun, dans XP wird probablement une bestimmte la couleur transparent gemacht bzw. wird "ersetzt" , kenne encore qui "Pinke" la couleur hehe --- suis bereits sur oui c'est ca cet Funktion gestolpert, la fois regarder si cela klappt |
|
|
| |
|
|
|
Georg Teles | RGH (17.02.2016)
là Windows pas direct Icônes, mais une Bitmap chez normalen Menüs erwartet, habe je en supplément une Routine geschrieben, qui un Icon dans un Bitmap umwandelt.
Aaah habe qui Routine encore pas entier verstanden: genauer quoi Du avec RGH (17.02.2016)
et chez den übrigen Pixeln, qui zuvor ermittelte Systemfarbe des menu-Hintergrunds meinst, car sobald on den Fokus sur cela menu hat, wird qui Hintergrund des Menüs oui anders comme sans Fokus ? Ähnliches Tutorial avec BitBlit habe je avant 2 Tagen déjà gesehen [...] fois le Routine ausprobieren si vous cela gleiche täten tut comment cela Tutorial
RGH (17.02.2016)
peux on den komischen Code-Formatierer aussi débrancher, avec cela qui Code so dargestellt wird, comment je ihn geschrieben habe? je hasse Programme, qui croyons pour mich mitdenken trop doit.
HA cela peux je aussi pas ausstehen, besonders Programme qui sans vorwarnung quelque chose 1faire quoi on pas voudrais |
|
|
| |
|
|
|
RGH | avant Aufruf qui dessus gezeigten Routine ermittele je avec qui API getSysColor(color_menu) qui Hintergrundfarbe des Menüs. cet wird dans bc transfert. (qui erste paramètre ist qui aktive DeviceContext, qui zweite cela Icon-Handle et qui dritte qui Hintergrundfarbe.)
cela Changement qui la couleur beim Darüberfahren avec qui souris erledigt Windows. cela menu ist trop dem la date oui déjà gezeichnet.
qui Taille des Icônes ermittle je sur qui Position des Hotspots, là cette chez Icônes toujours exakt dans qui Mitte liegt. (chez einem Cursor wäre qui Ermittlung un qui Taille quelque chose aufwändiger, là vous pas dans qui Info-Struktur drin steht.) Aussi ermittle habe je dans qui Info-Struktur cela Handle zur farbigen Bitmap et zur Masken-Bitmap. Um qui Bitmaps eh bien trop Travailler, muss on den Bitmaps eh bien einem DeviceContext zuweisen, ebenso qui Ergebnis-Bitmap. qui übliche Verwaltungsaufwand arrêt, si on direct avec qui API programmiert. dans qui Boucle lese je ensuite Pixel pour Pixel qui la couleur qui farbigen Bitmap et gleichzeitig qui des entsprechenden Pixels qui masque. Ist cet 1, mets je cela entsprechende Pixel qui Ergebnis-Bitmap sur qui la couleur, ist es 0, ensuite sur qui Hintergrundfarbe. et ensuite ist encore cela übliche Aufräumen annoncé.
Salut Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 17.02.2016 ▲ |
|
|
|
|
Georg Teles | Aaah vielen Dank pour qui detaillierte Erklärung, eh bien ist einleuchtend wieso là qui Hauteur / Breite * 2 steht, weil Hotspot des Icônes dans qui Mitte ist
RGH (17.02.2016)
cela Changement qui la couleur beim Darüberfahren avec qui souris erledigt Windows. cela menu ist trop dem la date oui déjà gezeichnet.
avec cela klärt sich qui Frage merci |
|
|
| |
|
|
|
Georg Teles | salut!
RGH (17.02.2016)
cela Changement qui la couleur beim Darüberfahren avec qui souris erledigt Windows. cela menu ist trop dem la date oui déjà gezeichnet.
verstehe je cela richtig, heisst cela, chaque la fois beim Fokusieren sur cela menu wird IconToBitmap fonctionnement ?
Grüße |
|
|
| |
|
|
|
| [OFFTOPIC] RGH (17.02.2016)peux on den komischen Code-Formatierer aussi débrancher, avec cela qui Code so dargestellt wird, comment je ihn geschrieben habe?
oui, maintenant, simple den Voir le texte source avec einem Ausrufezeichen commencer - hab Deinen obigen Beitrag entsprechend angepasst. [/OFFTOPIC] |
|
|
| |
|
|