Bitmap 32bits intégré à la vcl (timage, tpicture, tbitmap, topenpicturedialog)

Soyez le premier à donner votre avis sur cette source.

Vue 7 993 fois - Téléchargée 892 fois

Description

ç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)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
10
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
22 avril 2009

sauf erreur de ma part, ta remarque

************************************
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
Messages postés
10
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
22 avril 2009

merci à Cirec
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
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Salut Cirec,

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;
Messages postés
992
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
24 avril 2013
2
c'est donc de ça que tu me parlais Cirec ...
en effet , c'est bien différent ^^

j'ai pas delphi ici mais je garde sous la main ;)

Nico
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Bon voilà je me suis rattrapé sur une autre source concoctée pendant le reste de l'après-midi et ce soir ! Plus de bitmaps, je pense être en terrain à peu près connu sur ce coup-là ... quand-est-ce que ce bug va être réparé ?
Bon j'espère que cette source sera plus intéressante :)

Cordialement, Bacterius !
Afficher les 12 commentaires

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.