ça fait longtemps que j'ai ce code sous le coude (déjà plusieurs refontes) et j'ai pensé qu'il était temps de vous en faire profiter ^^
Alors c'est quoi ?:
ben tout simplement la prise en charge du Bitmap 32Bit par la VCL (en RunTime uniquement) en toute transparence ... (jeu de mots ^^)
ça veut dire que pour vous rien ne change (presque) vous utilisez les composants comme avant (TImage, TPicture, TBitmap) mais le 32Bits est géré.
Mais comment donc ?:
ben en surchargeant la classe TBitmap (voir le code dans crBitmap32.pas).
concrètement vous avez 2 propriétés supplémentaires:
NoAlpha: permet de ne pas utiliser le canal Alpha (32Bit Uniquement)
nb: NoAlpha est prioritaire sur propriété Transparent.
Opacity: de 0 à 255 permet changer l'opacité du Bitmap
peu importe le PixelFormat.
0 = Transparent.
255 = Opaque.
Pour tous les Bitmaps en-dessous de 32Bit:
si Opacity est <> 255 le bitmap est automatiquement transformé en 32Bit
Note importante :
pour accéder aux propriétés supplémentaires depuis un TBimap contenu dans un TPicture/TImage
vous serez obligé de transtyper explicitement le Bitmap en Bitmap ... hein quoi .. ^^
img_BkGround.Picture.Bitmap.Opacity <------- propriété inconnue
// Solution:
TBitmap(img_BkGround.Picture.Bitmap).Opacity
en revanche ceci ne pose aucun problème:
var aBMP : TBitmap;
begin
aBMP := TBitmap.Create;
aBMP.Opacity := 180;
...
end;
Dans ce code vous apprendrez, en plus, à:
effectuer des surcharges de composant, de méthodes, de procédures et fonctions.
centraliser les événements OnClick (jusqu'à 11 évènements sur une procédure)
************************************
en revanche ceci ne pose aucun problème:
var aBMP : TBitmap;
begin
aBMP := TBitmap.Create;
aBMP.Opacity := 180;
...
end;
************************************
n'est valable que dans une procedure, mais pas en variable globale
JP
cette source est bien plus "globale" que tout ce que j'ai pu trouver ou faire sur ce sujet. Et en plus, c'est rapide!
JP
Merci pour cette source très intéressante. Pourrais-tu m'expliquer un peu plus en détail où se trouve la surcharge du TBitmap ?
J'avais vu, il y a déjà un bout de temps, une source très utile de DelphiProg qui permet de "dériver" des composants en déclarant un type sur une unité TComboBox = Class(MonCombo.TComboBox).
Du coup, j'ai fait quelques unités pour ajouter des fonctions à certains composants (CheckListBox, DateTimePicker, IDFTP...). Mais je suis obligé d'appeler cette dérivation sur chaque unité où je pose ces composants.
Ta méthode me semble permettre d'enregistrer définitivement les modifications de la classe. J'aimerais donc bien comprendre comment tu fais pour essayer de l'appliquer à mes modifs de composants.
Pour illustrer (et éclairer ?) ma question, je joins un exemple de modif du IDFTP
unit UMdf_IDFTP;
interface
uses IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdFTP;
type
TIdFTP = class(IdFTP.TIdFTP)
Published
procedure LockDir(ADir : String);
procedure UnlockDir(ADir : String);
end;
implementation
procedure TIdFTP.LockDir(ADir : String);
begin
Site('CHMOD 555 '+ ADir);
end;
procedure TIdFTP.UnlockDir(ADir : String);
begin
Site('CHMOD 755 '+ ADir);
end;
en effet , c'est bien différent ^^
j'ai pas delphi ici mais je garde sous la main ;)
Nico
Bon j'espère que cette source sera plus intéressante :)
Cordialement, Bacterius !
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.