| |
|
|
Georg Teles | SetMenuItemBitmap-Unit
Transparentes De mapa de bits en MenuItem conjunto, Stil beibehalten
Mapa de bits con un Alpha-Kanal de uno Instance transparent en una beliebiges MenuItem uno ya existierenden Menüs setzt, sin el Stil des Menüs a ändern
funktioniert auch en TrackMenu, allerdings muss lo ya geladen worden ser (s. externes Menu como TrackMenu [...] )
Descargar
enthaltene main.bmp es con un Alpha-Kanal versehen, muss natürlich en PROFAN.EXE para Testen eingebunden voluntad
Win XP Win Vista Win 7 Win 8 Win 10 |
|
|
| |
|
|
|
Georg Teles | Win 7, 8, 10 va, en XP no, menno
|
|
|
| |
|
|
|
ByteAttack | Georg Teles (16.02.2016)
Win 7, 8, 10 va, en XP no, menno
Altes Problema con XP - Alphakanäle en PNG voluntad auch sólo de Vista unterstützt... |
|
|
| |
|
|
|
Georg Teles | ByteAttack (16.02.2016)
Altes Problema con XP - Alphakanäle en PNG voluntad auch sólo de Vista unterstützt...
hm, pero es una Mapa de bits - como regelt porque XP el Transparenz, war como no algo como como una belegte Farbe (s. pink also RGB(255,0,255) el como Alpha Kanal interpretiert se en XP ? |
|
|
| |
|
|
|
| Das lo que quiere decir scheint se me más en BitBlit-Operationen [...] a beziehen - como puede ser en el Principio 1 Farbe como transparent (o. no a überzeichnen) definieren. Ist meist Farbe 0.
So características Roland entonces auch z.B. en Loadbmp ...; -1
Das ha con Transluzenz o. Alpha-Kanal entonces aber nichts a tun.
Como war el porque sólo... características Windows de estos Menü-Bildchen no sowieso irgend una cierto Farbe transparent?! me war así...
Yo schätze, dass Roland el mejor weiß. |
|
|
| |
|
|
|
RGH | Yo habe el Ganze veces para Anlass genommen, en el kommenden XProfan X3 auch en normalen Menüs Icons a erlauben. El Syntax Es el gleiche como en el Customdraw-Menüs, sólo dass el Icon-Handle como negativer Valor angegeben se.
Como Windows no direkt Icons, pero una Mapa de bits en normalen Menüs esperado, Yo dazu una Rutina geschrieben, el una Icon en un Mapa de bits umwandelt.
A Transparenz: En el Customdraw-Menüs mache Yo sí eh' alles incluso, el heißt, Yo zeichne el Icon el Menü. Icons haben sí de se de Transparenz y como muss Yo mich no por lo tanto kümmern.
Hierbei gilt no una Frabe como transparent, pero Icons haben ni sogenannte Maske: una zweifarbige schwarz/weiße Mapa de bits, en el Pixel schwarz son, el no transparent son. Um nun also una Mapa de bits de una Icon a erzeugen, erzeuge Yo una vacío Mapa de bits en el Größe des Icons y kopiere nun Pixel para Pixel el Mapa de bits des Icons en el neue Mapa de bits, wobei Yo sólo en el schwarzen Pixeln el Maske el Original-Farbe nehme y en el übrigen Pixeln, el zuvor ermittelte Systemfarbe des Menü-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; If 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 := Seleccionar objeto(hdcColor, IInfo.hbmColor); bmpMaskOld := Seleccionar objeto(hdcMask, IInfo.hbmMask); bmpResultOld := Seleccionar objeto(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); if m = 0 then setPixel(hdcResult,x,y,c) más setPixel(hdcResult,x,y,bc); end; end; // Ergebnis zuweisen bmpResult := Seleccionar objeto(hdcResult, bmpResultOld); // Aufräumen DeleteObject(Seleccionar objeto(hdcMask, bmpMaskOld)); DeleteObject(Seleccionar objeto(hdcColor, bmpColorOld)); DeleteObject(IInfo.hbmColor); DeleteObject(IInfo.hbmMask); DeleteDC(hdcColor); DeleteDC(hdcMask); DeleteDC(hdcResult); end; Result := bmpResult; end;
Kann uno el komischen Code-Formatierer auch abschalten, así el Code así dargestellt se, Yo ihn geschrieben habe? Yo hasse Programas, el glauben para mich mitdenken tener. Saludo 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)
Das ha con Transluzenz o. Alpha-Kanal entonces aber nichts a tun. Como war el porque sólo... características Windows de estos Menü-Bildchen no sowieso irgend una cierto Farbe transparent?! me war así...
genau, así ha el nichts zutun, en XP se vermutlich una cierto Farbe transparent gemacht o. se "ersetzt" , saber todavía el "Pinke" Farbe hehe --- bin ya encima genau esta Función gestolpert, veces schauen si el klappt |
|
|
| |
|
|
|
Georg Teles | RGH (17.02.2016)
Como Windows no direkt Icons, pero una Mapa de bits en normalen Menüs esperado, Yo dazu una Rutina geschrieben, el una Icon en un Mapa de bits umwandelt.
Aaah habe el Rutina todavía no bastante verstanden: genauer qué Usted con RGH (17.02.2016)
y en el übrigen Pixeln, el zuvor ermittelte Systemfarbe des Menü-Hintergrunds media, porque sobald uno el Fokus el Menü ha, se el Hintergrund des Menüs sí anders como sin Fokus ? Ähnliches Tutorial con BitBlit Yo antes 2 Tagen ya gesehen [...] veces el Rutina ausprobieren si ellos el gleiche täten tut como el Tutorial
RGH (17.02.2016)
Kann uno el komischen Code-Formatierer auch abschalten, así el Code así dargestellt se, Yo ihn geschrieben habe? Yo hasse Programas, el glauben para mich mitdenken tener.
HA el kann Yo auch no ausstehen, besonders Programas el sin vorwarnung algo tun qué no möchte |
|
|
| |
|
|
|
RGH | Vor Aufruf el oben gezeigten Rutina ermittele I, con el API getSysColor(color_menu) el Color de fondo des Menüs. Diese se en bc transferencia. (Der erste Parámetro es el aktive DeviceContext, el zweite el Icon-Handle y dritte el Color de fondo.)
Das Cambio el Farbe beim Darüberfahren con ratón hecho Windows. Das Menü es a el Zeitpunkt sí ya suscrito.
El Größe des Icons ermittle Yo en Position des Hotspots, como dieser en Icons siempre exakt en el Mitte liegt. (En una Cursor wäre el Ermittlung una el Größe algo aufwändiger, como ellos no en el Info-Struktur drin es.) Außerdem ermittle Yo en el Info-Struktur el Handle a farbigen Mapa de bits y a Masken-Mapa de bits. Um el Bitmaps nun a bearbeiten, muss uno el Bitmaps nun una DeviceContext zuweisen, ebenso el Ergebnis-Mapa de bits. Der übliche Verwaltungsaufwand sólo, si uno direkt con el API programmiert. In el Bucle lese Yo entonces Pixel para Pixel el Farbe el farbigen Mapa de bits y gleichzeitig el des entsprechenden Pixels el Maske. Ist dieses 1, Puse el entsprechende Pixel el Ergebnis-De mapa de bits en el Farbe, es 0, entonces en el Color de fondo. Und entonces todavía el übliche Aufräumen angesagt.
Saludo 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 para el detaillierte Erklärung, nun es einleuchtend wieso como el Höhe / Breite * 2 es, porque Hotspot des Icons en el Mitte es
RGH (17.02.2016)
Das Cambio el Farbe beim Darüberfahren con ratón hecho Windows. Das Menü es a el Zeitpunkt sí ya suscrito.
Damit klärt el Cuestión danke |
|
|
| |
|
|
|
Georg Teles | Servus!
RGH (17.02.2016)
Das Cambio el Farbe beim Darüberfahren con ratón hecho Windows. Das Menü es a el Zeitpunkt sí ya suscrito.
verstehe Yo el correcto, heisst el, cada veces beim Fokusieren el Menü se IconToBitmap ausgeführt ?
Grüße |
|
|
| |
|
|
|
| [OFFTOPIC] RGH (17.02.2016)Kann uno el komischen Code-Formatierer auch abschalten, así el Code así dargestellt se, Yo ihn geschrieben habe?
Sí, ahora, simplemente el Ver código fuente con un Ausrufezeichen beginnen - tener Su obigen Contribución entsprechend adaptado. [/OFFTOPIC] |
|
|
| |
|
|