f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 2022
-
1 juin 2009 à 15:26
fredelem
Messages postés136Date d'inscriptiondimanche 29 octobre 2006StatutMembreDernière intervention 1 décembre 2022
-
27 oct. 2010 à 20:21
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
fredelem
Messages postés136Date d'inscriptiondimanche 29 octobre 2006StatutMembreDernière intervention 1 décembre 20222 27 oct. 2010 à 20:21
J'ai trouvé pourquoi ton formulaire était invisible. Quand je regarde le fichier nuancier.dfm, je vois que la form1 commence par left=1020. Evidemment, avec un écran qui fait 1024 pixels, le formulaire va se cacher tout au bout à droite et il est très difficile de le voir.
J'ai remplacé par "left = 400", le formulaire n'est plus invisible.
fredelem
Messages postés136Date d'inscriptiondimanche 29 octobre 2006StatutMembreDernière intervention 1 décembre 20222 9 juin 2009 à 16:36
Si tu veux avoir une idée de ce qui se passe chez moi, remplace la ligne {$R *.dfm} par (* $R *.dfm*),
sauvegarde, charge un autre programme puis reviens à ton programme. Appuie sur F12 pour voir si le formulaire apparait.
Je connaissais ce tour de magie sous cette forme mais avec ton programme, je n'ai pas besoin de faire quoi que ce soit, le formulaire est totalement invisible.
Si je trouve la clé du mystère, je te le dirai.
Toidil
Messages postés23Date d'inscriptionsamedi 10 septembre 2005StatutMembreDernière intervention 8 juillet 20151 9 juin 2009 à 15:27
Merci à f0xi, c'est une grande amélioration que tu proposes, je vais étudier cette Unit qui me fera progresser dans Delphi.
fredelem, Je n'ai mis aucune magie, d'ailleurs je n'ai pas compris ta remarque sur la magie. C'est vrai que les trackbars sont très discrets, mais je n'ai rien trouvé de mieux pour faire évoluer les rapports des couleurs de bases.
fredelem
Messages postés136Date d'inscriptiondimanche 29 octobre 2006StatutMembreDernière intervention 1 décembre 20222 8 juin 2009 à 11:35
J'apprécie beaucoup ce programme. Une remarque tout de même: les trackbars sont tellement fines qu'il m'a fallu du temps pour les apercevoir. Je pense que ça a été le cas pour d'autres et ça explique qu'il n'y ait pas eu beaucoup de commentaires.
Et par ailleurs, chez moi. le formulaire est invisible. Je peux le charger sous forme de fichier .dfm et le voir sous forme de lignes de code mais si j'appuie sur Alt-F12, il disparait. Par quel tour de magie as-tu fait ça ?
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 1 juin 2009 à 15:26
Tiens voila une amelioration...
Tu pourrais y ajouter plus tard le formatage en CMJ, HLS etc.
const
ColMask : array[1..3] of integer = ($000000FF, $0000FF00, $00FF0000);
function TForm1.GetColorFmt: string;
var
ODS : char;
const
GLR = 1/255;
begin
// Retourne une chaine qui represente la couleur dans le format désiré
with fMagicColor do
case fColFmt of
// Delphi BGR : $00000000 a $00FFFFFF
1 : result := format('$%.8x',[Color]);
// HTML RGB : #000000 a #FFFFFF
2 : result := format('#%.2x%.2x%.2x',[RGBA[1], RGBA[2], RGBA[3]]);
// Hexa RGB : 000000 a FFFFFF
3 : result := format('%.2x%.2x%.2x',[RGBA[1], RGBA[2], RGBA[3]]);
// OpenGL RGB : 0.0, 0.0, 0.0 a 1.0, 1.0, 1.0
4 :
begin
ODS := DecimalSeparator;
DecimalSeparator := '.';
result := format('%.4g, %.4g, %.4g',[GLR*RGBA[1], GLR*RGBA[2], GLR*RGBA[3]]);
DecimalSeparator := ODS;
end
else
// Decimal RGB : 0 0 0 a 255 255 255
result := format('%d, %d, %d',[RGBA[1], RGBA[2], RGBA[3]]);
end;
end;
procedure TForm1.Initialize;
var
I : Byte;
begin
for I := 1 to 3 do
with fPanels[I] do
begin
// On definie le texte du Panel qui correspond a l'octet de couleur associé
Caption := IntToStr(fMagicColor.RGBA[I]);
// Sa hauteur depend egalement de l'octet de couleur associé
Height := fMagicColor.RGBA[I];
// On change sa position pour qu'elle suive le curseur de la Trackbar
Top := 190 + fTrackBars[I].Position;
// Finalement on definie sa couleur par l'octet de couleur associé
Color := fMagicColor.Color and ColMask[I];
end;
// On definie la couleur de panel1 et panel2 selon la couleur réglée
Panel1.Color := fMagicColor.Color;
Panel2.Color := Panel1.Color;
// On affiche la couleur formatée en texte
Panel3.Caption := GetColorFmt;
end;
procedure TForm1.FormCreate(Sender: TObject);
var I : Byte;
begin
// Par defaut tout est blanc
fMagicColor.Color := clWhite;
// Par defaut on affiche en decimal RGB
fColFmt := 0;
// Combobox pour le formatage texte de la couleur
fComboBox := TComboBox.Create(Panel2);
with fComboBox do
begin
// Le parent est Panel2!
Parent := Panel2;
// L'objet n'herite pas de la fonte de Panel2
ParentFont := false;
// Ont redefinie la police
Font.Size := 8;
Font.Style := [];
// On vide le texte par defaut
Text := '';
// On definie la position et dimension de l'objet
SetBounds(1,72,220,22);
// On definie les lignes de textes dans l'objet
Items.BeginUpdate;
try
Items.Clear;
Items.Add('Format Decimal RGB (R, G, B)');
Items.Add('Format Delphi ($00BBGGRR)');
Items.Add('Format HTML (#RRGGBB)');
Items.Add('Format Hexa RGB (RRGGBB)');
Items.Add('Format OpenGL RGB (R.R, G.G, B.B)');
finally
Items.EndUpdate;
end;
// Par defaut on est en format Decimal RGB
ItemIndex := 0;
// On assigne finalement le gestionnaire d'evenement
OnChange := DoComboChange;
end;
for I := 1 to 3 do
begin
// Trackbar pour augmenter ou diminuer la couleur R,G ou B
fTrackBars[I] := TTrackBar.Create(Self);
with fTrackBars[I] do
begin
// Le parent est la classe TForm1, pas la variable Form1!
Parent := Self;
// On definie l'intervalle, la position et l'orientation de la Trackbar
Max := 255;
Min := 0;
Position := 0;
Orientation := trVertical;
// On definie l'apparence de la Trackbar
SliderVisible := True;
ThumbLength := 10;
TickMarks := tmBoth;
// On definie un Tag different pour differencier les Trackbar
Tag := I;
// On definie la position et dimension de la Trackbar
SetBounds(12 + (126 * (I - 1)), 184, 25, 265);
// On assigne finalement le gestionnaire d'evenement
OnChange := DoTrackbarChange;
end;
// Panels qui servent de gauge quantitative de couleur R,G ou B
fPanels[I] := TPanel.Create(Self);
with fPanels[I] do
begin
// Le parent est la classe TForm1 et non la variable Form1
Parent := Self;
// On definie la police, identique a celle de Panel3
Font := Panel3.Font;
// Le blanc ressort bien sur du rouge, du vert ou du bleu pur.
Font.Color := clWhite;
// On definie la position et dimension du Panel
SetBounds(32 + (126 * (I - 1)), 184, 100, 260);
end;
end;
// Initialise les couleurs, texte, position et aspect
Initialize;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var N : integer;
begin
// Liberation des objets créés dynamiquement
for N := 3 downto 1 do
begin
// Liberation des Panels
fPanels[N].Free;
// Liberation des TrackBars
fTrackBars[N].Free;
end;
// Liberation de la ComboBox
fComboBox.Free;
end;
procedure TForm1.DoTrackbarChange(Sender: TObject);
var I : integer;
begin
// Changement de la couleur R, G ou B
I := (Sender as TTrackBar).Tag;
if I in [1..3] then
begin
{ un simple Not suffit pour inverser la valeur de position
de la Trackbar en couleur valide.
Not byte(N) = 255-N
}
fMagicColor.RGBA[I] := not byte(fTrackBars[I].Position);
Initialize;
end;
end;
procedure TForm1.DoComboChange(Sender: TObject);
var I : integer;
begin
// Changement du formatage texte de la couleur
I := (Sender as TComboBox).ItemIndex;
if I <> -1 then
begin
fColFmt := I;
Initialize;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Memorisation de la couleur dans le presse-papier
Clipboard.Clear;
Clipboard.AsText := GetColorFmt;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// Fermeture du programme
Close;
end;
27 oct. 2010 à 20:21
J'ai remplacé par "left = 400", le formulaire n'est plus invisible.
9 juin 2009 à 16:36
sauvegarde, charge un autre programme puis reviens à ton programme. Appuie sur F12 pour voir si le formulaire apparait.
Je connaissais ce tour de magie sous cette forme mais avec ton programme, je n'ai pas besoin de faire quoi que ce soit, le formulaire est totalement invisible.
Si je trouve la clé du mystère, je te le dirai.
9 juin 2009 à 15:27
fredelem, Je n'ai mis aucune magie, d'ailleurs je n'ai pas compris ta remarque sur la magie. C'est vrai que les trackbars sont très discrets, mais je n'ai rien trouvé de mieux pour faire évoluer les rapports des couleurs de bases.
8 juin 2009 à 11:35
Et par ailleurs, chez moi. le formulaire est invisible. Je peux le charger sous forme de fichier .dfm et le voir sous forme de lignes de code mais si j'appuie sur Alt-F12, il disparait. Par quel tour de magie as-tu fait ça ?
1 juin 2009 à 15:26
Tu pourrais y ajouter plus tard le formatage en CMJ, HLS etc.
unit Nuance;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Clipbrd,
Dialogs, Controls, Forms, StdCtrls, ComCtrls, ExtCtrls, Graphics;
type
TMagicColor = packed record
case integer of
0 : (RGBA : array[1..4] of Byte);
1 : (Color : Integer);
end;
TForm1 = class(TForm)
Panel1 : TPanel;
Panel2 : TPanel;
Panel3 : TPanel;
Button1 : TButton;
Button2 : TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
fMagicColor : TMagicColor;
fPanels : array[1..3] of TPanel;
fTrackBars : array[1..3] of TTrackBar;
fComboBox : TComboBox;
fColFmt : integer;
protected
function GetColorFmt: string; virtual;
procedure Initialize; virtual;
procedure DoComboChange(Sender: TObject);
procedure DoTrackbarChange(Sender: TObject);
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
ColMask : array[1..3] of integer = ($000000FF, $0000FF00, $00FF0000);
function TForm1.GetColorFmt: string;
var
ODS : char;
const
GLR = 1/255;
begin
// Retourne une chaine qui represente la couleur dans le format désiré
with fMagicColor do
case fColFmt of
// Delphi BGR : $00000000 a $00FFFFFF
1 : result := format('$%.8x',[Color]);
// HTML RGB : #000000 a #FFFFFF
2 : result := format('#%.2x%.2x%.2x',[RGBA[1], RGBA[2], RGBA[3]]);
// Hexa RGB : 000000 a FFFFFF
3 : result := format('%.2x%.2x%.2x',[RGBA[1], RGBA[2], RGBA[3]]);
// OpenGL RGB : 0.0, 0.0, 0.0 a 1.0, 1.0, 1.0
4 :
begin
ODS := DecimalSeparator;
DecimalSeparator := '.';
result := format('%.4g, %.4g, %.4g',[GLR*RGBA[1], GLR*RGBA[2], GLR*RGBA[3]]);
DecimalSeparator := ODS;
end
else
// Decimal RGB : 0 0 0 a 255 255 255
result := format('%d, %d, %d',[RGBA[1], RGBA[2], RGBA[3]]);
end;
end;
procedure TForm1.Initialize;
var
I : Byte;
begin
for I := 1 to 3 do
with fPanels[I] do
begin
// On definie le texte du Panel qui correspond a l'octet de couleur associé
Caption := IntToStr(fMagicColor.RGBA[I]);
// Sa hauteur depend egalement de l'octet de couleur associé
Height := fMagicColor.RGBA[I];
// On change sa position pour qu'elle suive le curseur de la Trackbar
Top := 190 + fTrackBars[I].Position;
// Finalement on definie sa couleur par l'octet de couleur associé
Color := fMagicColor.Color and ColMask[I];
end;
// On definie la couleur de panel1 et panel2 selon la couleur réglée
Panel1.Color := fMagicColor.Color;
Panel2.Color := Panel1.Color;
// On affiche la couleur formatée en texte
Panel3.Caption := GetColorFmt;
end;
procedure TForm1.FormCreate(Sender: TObject);
var I : Byte;
begin
// Par defaut tout est blanc
fMagicColor.Color := clWhite;
// Par defaut on affiche en decimal RGB
fColFmt := 0;
// Combobox pour le formatage texte de la couleur
fComboBox := TComboBox.Create(Panel2);
with fComboBox do
begin
// Le parent est Panel2!
Parent := Panel2;
// L'objet n'herite pas de la fonte de Panel2
ParentFont := false;
// Ont redefinie la police
Font.Size := 8;
Font.Style := [];
// On vide le texte par defaut
Text := '';
// On definie la position et dimension de l'objet
SetBounds(1,72,220,22);
// On definie les lignes de textes dans l'objet
Items.BeginUpdate;
try
Items.Clear;
Items.Add('Format Decimal RGB (R, G, B)');
Items.Add('Format Delphi ($00BBGGRR)');
Items.Add('Format HTML (#RRGGBB)');
Items.Add('Format Hexa RGB (RRGGBB)');
Items.Add('Format OpenGL RGB (R.R, G.G, B.B)');
finally
Items.EndUpdate;
end;
// Par defaut on est en format Decimal RGB
ItemIndex := 0;
// On assigne finalement le gestionnaire d'evenement
OnChange := DoComboChange;
end;
for I := 1 to 3 do
begin
// Trackbar pour augmenter ou diminuer la couleur R,G ou B
fTrackBars[I] := TTrackBar.Create(Self);
with fTrackBars[I] do
begin
// Le parent est la classe TForm1, pas la variable Form1!
Parent := Self;
// On definie l'intervalle, la position et l'orientation de la Trackbar
Max := 255;
Min := 0;
Position := 0;
Orientation := trVertical;
// On definie l'apparence de la Trackbar
SliderVisible := True;
ThumbLength := 10;
TickMarks := tmBoth;
// On definie un Tag different pour differencier les Trackbar
Tag := I;
// On definie la position et dimension de la Trackbar
SetBounds(12 + (126 * (I - 1)), 184, 25, 265);
// On assigne finalement le gestionnaire d'evenement
OnChange := DoTrackbarChange;
end;
// Panels qui servent de gauge quantitative de couleur R,G ou B
fPanels[I] := TPanel.Create(Self);
with fPanels[I] do
begin
// Le parent est la classe TForm1 et non la variable Form1
Parent := Self;
// On definie la police, identique a celle de Panel3
Font := Panel3.Font;
// Le blanc ressort bien sur du rouge, du vert ou du bleu pur.
Font.Color := clWhite;
// On definie la position et dimension du Panel
SetBounds(32 + (126 * (I - 1)), 184, 100, 260);
end;
end;
// Initialise les couleurs, texte, position et aspect
Initialize;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var N : integer;
begin
// Liberation des objets créés dynamiquement
for N := 3 downto 1 do
begin
// Liberation des Panels
fPanels[N].Free;
// Liberation des TrackBars
fTrackBars[N].Free;
end;
// Liberation de la ComboBox
fComboBox.Free;
end;
procedure TForm1.DoTrackbarChange(Sender: TObject);
var I : integer;
begin
// Changement de la couleur R, G ou B
I := (Sender as TTrackBar).Tag;
if I in [1..3] then
begin
{ un simple Not suffit pour inverser la valeur de position
de la Trackbar en couleur valide.
Not byte(N) = 255-N
}
fMagicColor.RGBA[I] := not byte(fTrackBars[I].Position);
Initialize;
end;
end;
procedure TForm1.DoComboChange(Sender: TObject);
var I : integer;
begin
// Changement du formatage texte de la couleur
I := (Sender as TComboBox).ItemIndex;
if I <> -1 then
begin
fColFmt := I;
Initialize;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Memorisation de la couleur dans le presse-papier
Clipboard.Clear;
Clipboard.AsText := GetColorFmt;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// Fermeture du programme
Close;
end;
end.