windows - Skygge til brugerdefineret musemarkør (2)

Indlæg af Hanne Mølgaard Plasc

Problem



Efter at have læst svaret på skyggen for brugerdefineret musemarkør spørgsmål, gjorde jeg nogle test.


Fra min Delphi-applikation læste jeg både 32bit og 24bit versioner af min markør. Aldrig en skygge. Jeg gjorde det samme med den almindelige Windows-pilpeger. Ingen skygge heller.


Også jeg prøvede det modsatte og tildelte mine brugerdefinerede markører til 'Normal Select' -pegeren i Windows-musen indstillinger. Både 24bit og 32bit pointer blev givet en skygge.


Så det ser ud til at have en alfakanal i en markør ikke påvirker skyggeadfærden. Men hvad gør jeg forkert i min ansøgning?


Første trin er at tilføje markøren til programmets ressourcer via en .rc-fil med


CUR\_EDGE\_R Cursor DISCARDABLE "edge\_r.cur"


Og i ansøgningen er det fyldt med:


const
  crEdgeR = TCursor(135);
 .
 .
  Screen.Cursors[crEdgeR] := LoadCursor(HInstance, 'CUR\_EDGE\_R');


Så, hvordan er det at få Windows til at tilføje en skygge til en brugerdefineret markør?


Bemærk: Jeg har set indlæg på internettet, der foreslår at oprette to versioner af musemarkøren, en med og en uden skygge og indlæse den relevante markør, afhængigt af brugerens indstillinger. Dette er ikke den løsning, jeg leder efter.

Bedste reference


For at placere en skygge under din brugerdefinerede markør, skal du simpelthen designe markøren med en alfa-kanal (som muliggør halv gennemsigtighed) og tegne din skygge på plads. Du kan endda bruge Photoshop/GIMP (eller en hvilken som helst anden grafisk editor) til at producere din markør med en 'Drop Shadow' -effekt, gemme den som en PNG, og brug derefter en ikoneditor (f.eks. Microangello) til at konvertere PNG til en markør .


Som jeg forstår, er ingen af ​​markørerne, der sendes med Windows Vista/7, designet som 'flad', idet der bruges en vis systemeffekt til at generere deres skygger.