Yep !
Mettre en place une fenêtre permettant de choisir à l'install les compos qu'on voudrait parmi ceux qui sont matures et "indispensables", je dirais.
Bonjour,
Pour ma part je crois qu'il faut améliorer:
1. SqlQuery:
-la création explicite des indexes
-la manipulation des filtres de types 'Float'.
-la manipulation efficace des champs persistants.
-L'ajout de champ ou composant type 'agrégate' pour sommer un autre champ.
2. Mplayer:
-Integrer Mplayer dans l'IDE et lui ajouter un Navigator.
3. Transaction:
Ajouter,par défaut le paramètre 'Read committed' à la transaction.
4. DBGrid:
L'ajout sur les entêtes des colonnes deux minuscules triangles pour la manipulation des tris (A-Z / Z-A).
merci bien.![]()
hello,
alberich, pour le composant TadvLed ce n'est pas si simple que cela de rajouter des couleurs car en fait les couleurs correspondent à des bitmaps stockés en ressource. Par contre tu peux personnaliser et créer une nouvelle couleur en mettant lkCustom dans la propriété Kind et en chargeant un bitmap personnalisé dans la propriété GlyphOn (charger un png qui correspond au bitmap dans TPicture). Tu peux prendre par exemple le bitmap yellow.png qui se trouve dans le répertoire IndustrialStuff/resources, modifier la couleur en bleu et le sauvegarder en bleu.png et c'est le bitmap alors que tu utilises dans GlyphOn.
Ami calmant, J.P
Merci, ton tuyau est séduisant, mais il y a un seul hic : mon logiciel de dessin sait lire, mais pas enregistrer du png ! J'ignore si ton composant accepterait du bmp ? J'ai trouvé une autre solution (bancale, mais qui a marché par le passé, avant que je ne trouve le composant pour Delphi) : j'ai maintenant une collection de captures de ma Led Delphi en différentes couleurs, et au format ico 16 couleurs avec bord transparent ; il suffit alors de créer un composant-image par couleur utilisée, de les superposer et ne n'en rendre qu'un visible suivant le cas.
Ta Led utilise des dégradés, c'est pourquoi elle me paraît plus jolie ... Celle de Delphi n'a qu'une plage de la couleur concernée et un arc de cercle blanc, et est apparemment redessinée à chaque changement de couleur (canvas ? ) : avantage on a toutes les couleurs possibles, inconvénient il faut obligatoirement mettre doublebuffered, sinon traits dans l'image !
Bonjour.
1) Une numérotation des pages serait la bienvenue, comme dans Delphi, même si celle-ci est parfois un déclencheur de fou-rire : page 5/4 ...
2) Et si les programmeurs ont estimé que les couleurs apportent quelque chose au niveau de la fenêtre de code, il y aurait peut-être moyen de les faire ressortir aussi à l'impression (sur une imprimante couleur bien sûr ...) ?
Dernière modification par Invité ; 10/07/2016 à 23h36.
Si possible, ajouter la commande "Enregistrer le projet sous" également dans "Fichier", là où les utilisateurs venus de Delphi s'attendent à le trouver ! Cela leur évitera (comme pour moi) d'embêter inutilement les autres sur des forums ...
Et encore autre chose, mais là je ne me fais pas d'illusions : un des points forts des logiciels de M$ (si, si, il y en a !) est la possibilité de personnaliser complètement la barre des menus TEXTUELS (ce qui résoudrait peut-être au passage le problème précédent). Mon problème (mais je dois être l'un des rares dans ce cas ! ) est que, comme ma machine principale n'est pas connectée à Internet, quand je clique par mégarde dans un point de menu (Aide) qui s'y rapporte, je pars à la chasse au Dahu !![]()
Dernière modification par Invité ; 14/07/2016 à 08h20.
Bonjour,
erreur de traduc' :
Moi, quand on me dit de chercher "dessous", je cherche dessous et bien sûr je ne trouve rien et ça me met la haine...
Des mois ça m'a pris pour réaliser que c'était dessus qu'il fallait chercher, des mois ! Parce qu'en regardant dessous je ne voyais pas la ligne tout en haut...
Et pendant que j'y suis et puisque la dernière ligne ne rentre pas, elle pourrait être simplifiée en "Vérifier selon le contenu plutôt que par l'horodatage"
Bonjour,
pour une fois que j'ai ma fenêtre de messages toute vide d'insultes et de lignes agressives, ben, je me demande s'il ne manque pas une séparation (espace ou autre) entre "...projet" et "Cible..." :
Fait pour servir et valoir ce que de droit,![]()
Complètement dans l'EDI cette fois :
Si on pouvait avoir des dialogues sensés (= avec du sens), exemple de truc à vomir :
Ça serait tellement plus simple de répondre par Oui, Non ou Annuler à la question posée mais non, ça devait être trop simple et moi, quand je me prends cette boîte de dialogue, à chaque fois je la lis et la relis encore, et me pose bien la question de savoir si je suis sûr de là où je vais cliquer.
C'est quand même terrible, des trucs pareils...
Bonjour,
Un autre truc avec l'éditeur de fiche. Quand on veut sélectionner plusieurs composants, on doit appuyer sur une touche (CTRL ou MAJ, je ne sais plus) et cliquer, il m'arrive très souvent, quand j'ai plusieurs composants à sélectionner, que lors du clic, il sélectionne le parent (panel, groupebox, ...) plutôt que le composant.
A ce moment, je suis obligé de recommencer. Quand il y a 2/3 composants, c'est chiant mais ça le fait, mais quand il y en a une dizaine, voire plus...![]()
Surtout que les autres essais peuvent rater de la même manière. Il m'est arrivé d'abandonné et de traiter les composants un à un tellement ça me gavait !
Voilà, si ça pouvait être amélioré...
A+
JS
Juste pour bien enfoncer le clou, je réponds plutôt qu'éditer mon précédent message, même si celui-ci est dans la droite continuité de celui-là.
Et donc ce matin je misérais avec FloodFill sous Laz 1.6 dans une machine virtuelle XP et comme je trouvais que ça commençait à bien faire, à me prendre la tête sérieux et à me les gonfler grave, j'ai démarré la vieille machine virtuelle w2k qui embarque un... D7 perso, et oui !
Et là, en trois clics le FloodFill obéissait aux ordres, c'est reposant.
Alors, à titre de comparaison, voici la partie textuelle de l'aide de Lazarus concernant cette fonctionet ensuite celle de D7 :FloodFill flood-fills an area with the given colour, starting from the specified point; uses the FloodFill method for the current interface or widget setY a pas photo, hein ! Ni dans la quantité, ni dans la qualité : là où Lazarus explique rien ou n'importe quoi, Delphi explique la vraie vie.Utilisez la méthode FloodFill pour remplir une zone, pas nécessairement rectangulaire, de l'image avec la valeur de Brush. Les limites de la région à remplir sont déterminées en se déplaçant dans toutes les directions à partir du point (X,Y) jusqu'à ce qu'une limite de couleur impliquant le paramètre Color soit rencontrée.
X et Y sont les coordonnées du canevas qui marquent le début du remplissage.
Color est la couleur qui définit la limite de la zone à remplir. Son interprétation dépend de la valeur de FillStyle.
FillStyle spécifie si la zone est définie par tous les pixels de même valeur que Color, ou tous les points de valeur différente.
Conseil : Quand vous utilisez le style de remplissage fsSurface, utilisez la propriété Pixels pour connaître la valeur exacte de la couleur au point (X,Y). De même, si FillStyle a la valeur fsBorder, utilisez Pixels pour connaître la valeur exacte de la couleur de délimitation si vous connaissez un point de la limite.
Et j'ai enfin compris pourquoi certains codes trouvés sur le web m'étaient restés jusqu'à présent hermétiques :Lazarus ne me donnait pas la clé !
Autre chose : il faut absolument que les gars qui vont se pencher sur l'aide toutes affaires cessantes pensent à rajouter des exemples, et des exemples qui fonctionnent !, et qu'ils n'oublient pas d'indiquer les résultats attendus (on trouve des exemples nous disant faut faire comme ci faut faire comme ça, mais comme on ne sait pas ce qui va en résulter, si on se trompe on ne le verra pas...)
Genre, j'ai encore perdu une heure ce matin jusqu'à ce que je trouve la ligne qui m'a rendu le sourire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 procedure TForm1.Button2Click(Sender: TObject); begin with Image1.Canvas do begin // ça ne peut pas s'inventer un truc pareil : Clear; // ! \\ // ! \\ MANDATORY sinon image noire // ! \\ // ! \\ mais inconnu en D7 // http://forum.lazarus.freepascal.org/index.php?topic=12558.0 Brush.Style := bsSolid; Brush.Color := clRed; FillRect(0, 0, Width, Height); // ok //FloodFill(0, 0, clRed, fsSurface); // noir jusqu'à trouver la soluce dans D7, gardé pour les copains du forum -- rappel : aide Laz : // FloodFill flood-fills an area with the given colour, starting from the specified point; // c'est bien ce que j'ai écrit, non ? end; end;
Avoir des outils qui fonctionnent vraiment ?
Exemple avec la recherche dans les fichiers, que j'utilise beaucoup, mais hélas...
Ce que je veux chercher ;
Ce que le bazar me trouve :
Linux Debian FPC 3.0.4 / Laz 1.8.2
Bonsoir,
vécu ce matin une vraie catastrophe en termes de perte de temps, et je considère que c'est du ressort de l'EDI, d'où ce post.
J'avais dans l'idée de remplir un TImage avec une couleur, et Canvas.FloodFill était la fonction toute désignée : l'aide était d'accord et la complétion de code aussi, alors roule.
Sauf que ça n'a pas fonctionné. Alors là, je ne comprends pas : je regarde mon code à la loupe (une ligne !) à m'en péter les yeux mais non, aucun défaut et pourtant, image noire, ou vide, selon les essais...
Parce que oui, quand ça ne fonctionne pas du premier coup, on part dans toutes les directions, pour essayer de faire fonctionner ce truc tout simple.
Sans connexion internet c'était la mort assurée, heureusement quelqu'un avait posté qu'il y avait toutes les chances pour que ça ne soit pas implémenté sous Linux avec gtk2, ce qui est hélas exactement mon cas.
Et le quelqu'un en question avait dû y passer du temps, lui aussi, car il fournissait même un lien vers un forum teuton où s'y trouve une solution de contournement, un FloodFill2 perso et à la mano, mais qui fonctionne, ouf !
Alors ce que je ne comprends pas, c'est que les gens qui codent Lazarus se permettent de publier une solution prévue pour être multi-plateformes mais ce n'est pas vrai, loin de là en ce qui concerne Linux, et il n'y a rien pour informer les utilisateurs. On marche sur la tête !
Je crois vraiment que la priorité absolue des développeurs devrait être de prendre ce point en compte, sinon Lazarus restera un gadget pour amateurs ! Il faut que lorsque quelque chose n'est pas implémenté l'utilisateur en soit informé depuis le cœur de l'outil et pas en faisant des recherches externes, dépendantes d'une connexion qui peut ne pas être opérationnelle, et aussi du fait que quelqu'un a déjà eu le problème et a une solution.
Sinon je serais encore à c't'heure en train d'essayer de faire fonctionner un machin qui me fait des sourires et rien d'autres -- Nul !![]()
Salut, je suis tombé sur un bug de très très bas niveau à mon avis. Pourquoi ? tout simplement car aucun message d'erreur n'apparait.
Comment je l'ai découvert en mode debug avec un point de suivi sur une de mes variables qui ne s'affiche pas dans un "TLabel.Caption". Celle-ci est vidée, remise à zero à un moment X.
En gros, j'ai plusieurs classes parents/enfants (sur 6 niveaux). Ma variable est de type string et est déclarée dans la classe de niveau 2. Durant le processus ma variable est bien mise à jour et son contenu conservé jusqu'au Niveau 6 lors de l'appel à une des procedure qui est déclarée "Virtual" dans la classe de niveau 2. Cette procedure est surchargée qu'a partir de la classe de niveau 6. (Vous suivez ?)
La structure pour vous donner une idée :
0 -TPersistent
1 - TGLZUpdateAbleObject2 - TGLZCustomDataFile3 - TGLZCustomBitmap4 - TGLZBitmap5 - TGLZCustomImageFileIO6 - TGLZBitmapXPMImage
Voila une capture d'écran avec le message de "dbg"
Et la la variable est vidée au moment précis ou cette fameuse procedure surchargé est appelée par la classe de niveau 2.
Petite précision je ne touche pas à cette variable une fois son contenu mise à jour la seule et unique fois par la classe de niveau 2
- "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
- "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
- "La simplicité est la sophistication suprême" - Léonard De Vinci
- "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei
Mes projets sur Github - Blog - Site DVP
Bonjour,
Une question à la Papy Mougeot :
Cette propriété est-elle mise à jour et lue directement à partir du champ, ou fait-elle appel à un getter/setter ?
Oui - ou Non - mais vous pensiez à quoi ?
A rien, c'était seulement pour faire avancer le schmilblick !
Cette procédure virtuelle est-elle aussi déclarée abstraite ?
Ce que je ne comprends pas bien :
Une classe de niveau 2 ne peut exécuter cette méthode de niveau 6. Sauf s'il s'agit d'une variable de type TGLZCustomDataFile (niveau 2) contenant un descendant de type TGLZBitmapXPMImage (niveau 6) qui définit bien cette méthode. D'ailleurs, l'appel d'une méthode abstraite non définie devrait entraîner une exception à l'exécution, non ?Et la la variable est vidée au moment précis ou cette fameuse procedure surchargé est appelée par la classe de niveau 2.
Avec ce schéma :
le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 TAncestor = class(TPersistent) end; TDescendantLevel2 = class(TAncestor) private FName: string; public procedure JustSetName(aName: string); procedure DoSomething(aName: string); virtual; abstract; property FieldName: string read FName; // write FName; end; TDescendantLevel3 = class(TDescendantLevel2) end; TDescendantLevel4 = class(TDescendantLevel3) end; TDescendantLevel5 = class(TDescendantLevel4) end; TDescendantLevel6 = class(TDescendantLevel5) public constructor Create(aParam: string); overload; procedure DoSomething(aName: string); override; end; var Form1: TForm1; implementation {$R *.frm} { TForm1 } procedure TDescendantLevel2.JustSetName(aName: string); begin FName := aName + ' ajouté par méthode level2'; end; procedure TDescendantLevel6.DoSomething(aName: string); begin FName := aName + ' = Nom modifié par méthode abstraite level6'; end; constructor TDescendantLevel6.Create(aParam: string); begin inherited Create; JustSetName(aParam + ' = Nom au create du level 6'); end;provoque un EAstractError
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 procedure TForm1.Button1Click(Sender: TObject); var MyDescendant: TDescendantLevel2; begin MyDescendant:=TDescendantLevel2.Create; MyDescendant.JustSetName('Début'); Memo1.Clear; Memo1.Append(MyDescendant.FieldName); MyDescendant.DoSomething('Nouveau nom'); Memo1.Append(MyDescendant.FieldName); MyDescendant.Free; end;
alors que celui-ci passe (mais c'est sûrement un maigre squelette du tien) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 procedure TForm1.Button1Click(Sender: TObject); var MyDescendant: TDescendantLevel6; begin MyDescendant:=TDescendantLevel6.Create('Début'); Memo1.Clear; Memo1.Append(MyDescendant.FieldName); MyDescendant.DoSomething('Nouveau nom'); Memo1.Append(MyDescendant.FieldName); MyDescendant.Free; end;
Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
. Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !
Bonjour,
Oui je comprend que tu ne comprenne pas bien c'est un peu dur sans code. J'aurais tenté d'expliqué au mieux. Car en fait il y'a un peu plus de niveauxIl faut mieux un bon bout de code alors :
Voila partiellement à quoi ça ressemble :
Voila le code c'est tout. J'ai également compiler sans débogage et J'ai également placé Property FullFileName; dans chaque descendant dans la partie public, histoire de...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151 Interface Type TGLZInterfacedPersistent = class(TPersistent, IInterface) TGLZUpdateAbleObject = Class(TGLZInterfacedPersistent, IGLZNotifyAble) TGLZCustomDataFile = Class(TGLZUpdateAbleObject) Private FFullFileName: String; Protected Function CheckFormat(): Boolean; Virtual; Procedure LoadFromMemory; Virtual; // ---> C'est lorsque cette procédure est appelé dans l'enfant que FFullFileName est vidée Public Procedure LoadFromStream(aStream: TStream); Virtual; Procedure LoadFromFile(Const FileName: String); Virtual; Property FullFileName: String read FFullFileName; End; TGLZCustomBitmap = class(TGLZCustomDataFile) TGLZCustomImageFileIO = Class(TGLZCustomBitmap) protected function ReadImageProperties:Boolean;Virtual; end; TGLZBitmapXPMImage = class(TGLZCustomImageFileIO) protected procedure LoadFromMemory();override; // ---> C'est lorsque cette procédure est appelé que FFullFileName est vidée function CheckFormat(): Boolean; override; function ReadImageProperties:Boolean;override; end; TGLZPicture = class(TGLZPersistentObject) private FBitmap : TGLZBitmap; procedure SetBitmap(Const aBitmap : TGLZBitmap); protected public Constructor Create;override; Destructor Destroy;override; //procedure ReadFiler //procedure WriteFiler procedure LoadFromFile(Const aFileName:String); overload; procedure SaveToFile(Const aFileName:String); overload;//aFormat : TGLZImageFileFormats; Options : Pointer); public property Bitmap : TGLZBitmap Read FBitmap Write SetBitmap; end; TGLZCustomImageView = class(TGLZCustomControl) protected FBackBuffer : TGLZBitmap; procedure Paint; override; procedure Resize; override; public property BackBuffer: TGLZBitmap read FBackBuffer; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; TGLZSimpleImageView = Class(TGLZCustomImageView) Implementation Procedure TGLZCustomDataFile.LoadFromFile(Const FileName: String); Var fs: TStream; Begin ResourceName := ExtractFileName(fileName); FFullFileName := FileName; fs := CreateFileStream(fileName, fmOpenRead + fmShareDenyNone); Try LoadFromStream(fs); Finally fs.Free; End; End; Procedure TGLZCustomDataFile.InternalLoadFromStream(aStream: TStream); Begin FData := TGLZBufferedStream.Create(aStream); Try If CheckFormat Then LoadFromMemory; Finally FreeAndNil(FData); End; End; Procedure TGLZCustomDataFile.LoadFromStream(aStream: TStream); Begin InternalLoadFromStream(aStream); End; Function TGLZCustomDataFile.CheckFormat(): Boolean; Begin Result := True; End; Procedure TGLZCustomDataFile.LoadFromMemory(); Begin Assert(False, 'Import de ' + ClassName + ' vers ' + Self.ClassName + ' non supporté.'); End; procedure TGLZBitmap.LoadFromFile(Const FileName:String); var BaseImageClass: TGLZBitmapClass; tempImage: TGLZCustomBitmap; SrcPtr, DstPtr:PGLZColor; begin if filename = '' then exit; BaseImageClass := GetGLZImageFileFormats.FindFromFileName(filename); TempImage:=nil; tempImage := BaseImageClass.Create(0,0); try tempImage.LoadFromFile(fileName); // Assign(TGLZBitmap(TempImage)); SetSize(TempImage.Width, TempImage.Height); Clipping:=false; ClipRect:=TempImage.ClipRect; with RawImage do begin Description.Width:=TempImage.RawImage.Description.Width; Description.Height:=TempImage.RawImage.Description.Height; end; With DataFormatDesc do begin Name := TempImage.DataFormatDesc.Name; Desc := TempImage.DataFormatDesc.Desc; Version := TempImage.DataFormatDesc.Version; FileMask := TempImage.DataFormatDesc.FileMask; Encoding := TempImage.DataFormatDesc.Encoding; end; SrcPtr:=PGLZColor(TempImage.getSurfaceBuffer); DstPtr:=PGLZColor(GetSurfaceBuffer); Move(SrcPtr^,DstPtr^,Size); finally FreeAndNil(tempImage); end; end; procedure TGLZPicture.LoadFromFile(Const aFileName:String); begin FBitmap.LoadFromFile(aFileName); end;
Idem cela ne change rien
Voila le code dans l'application :
Voila rien de bien transcendant à la base. Un problème d'héritage ? faudrait que j'essaye en passant la propriété FullFileName dans published.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106 Interface Type Tform1 = Class(Tform) Label1 : Tlabel; Label2 : Tlabel; Label3 : Tlabel; Label4 : Tlabel; lblImgFileName : Tlabel; lblImgFormat : Tlabel; lblImgSize : Tlabel; lblImgBPP : Tlabel; Panel1 : Tpanel; Panel2 : Tpanel; pnlView : Tpanel; Procedure Formclose(Sender : Tobject; Var Closeaction : Tcloseaction); Procedure Formcreate(Sender : Tobject); Procedure Formdropfiles(Sender : Tobject; Const Filenames : Array Of String); Procedure Formshow(Sender : Tobject); Private protected procedure UI_UpdateImageInfos; Public ImageView : TGLZSimpleImageView; ImageFileName : String; End; Implementation Procedure Tform1.Formcreate(Sender : Tobject); Begin ImageFileName:=''; ImageView := TGLZSimpleImageView.Create(self); With ImageView do begin Parent := pnlView; Align :=alClient; end; End; Procedure Tform1.Formclose(Sender : Tobject; Var Closeaction : Tcloseaction); Begin FreeAndNil(ImageView); End; Procedure Tform1.Formshow(Sender : Tobject); Begin With ImageView do begin Color:=clBlack; Picture.Bitmap.SetSize(Width,Height); Picture.Bitmap.Clear(clrBlack); end; End; Procedure Tform1.UI_UpdateImageInfos; begin With ImageView.Picture.Bitmap Do begin lblImgFileName.Caption := FullFileName; //ImageFileName; lblImgFormat.Caption := DataFormatDesc.Name + '(' + DataFormatDesc.Desc + ')'; lblImgSize.Caption := IntToStr(Width) + ' x ' + IntToStr(Height); With RawImage.Description Do begin Case PixelFormat of pf1Bit : lblImgBPP.Caption := '1 Bit (Monochrome)'; pf2Bits : lblImgBPP.Caption := '2 Bits (4 Couleurs)'; pf4Bits : lblImgBPP.Caption := '4 Bits (16 Couleurs)'; pf8Bits : lblImgBPP.Caption := '4 Bits (256 Couleurs)'; pf15Bits : lblImgBPP.Caption := '15 Bits'; pf16Bits : lblImgBPP.Caption := '16 Bits'; pf24Bits : lblImgBPP.Caption := '24 Bits'; pf32Bits : lblImgBPP.Caption := '32 Bits'; pf48Bits : lblImgBPP.Caption := '48 Bits'; pf64Bits : lblImgBPP.Caption := '64 Bits'; End; End; End; End; Procedure Tform1.Formdropfiles(Sender : Tobject; Const Filenames : Array Of String); begin Try Try Screen.Cursor:=crHourGlass; ImageFileName := FileNames[0]; ImageView.Picture.LoadFromFile(ImageFileName); Finally Screen.Cursor:=crDefault; End; Except On E : EInvalidImageFile do begin MessageDlg(E.Message, mtWarning, [mbOk], 0); Exit; end else begin MessageDlg('Erreur Inconnue : '+//E.Message+ #13+#10+'Ok pour continuer'+#13+#10+'Abandonner pour quitter l''application', mtError, [mbOk, mbAbort], 0); end; end; ImageView.Invalidate; UI_UpdateImageInfos; End;
EDIT : Je tiens à préciser que les images déposées sur la fiche se chargent et s'affiche sans probleme.
- "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
- "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
- "La simplicité est la sophistication suprême" - Léonard De Vinci
- "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei
Mes projets sur Github - Blog - Site DVP
Bonsoir,
ce post date de 2016 mais je n'ai pas pu m'empêcher d'y penser quand...
... cet après-midi j'ai été obligé d'utiliser mon vieux Publisher 2000 qui doit dater de 1999 pour travailler sur un vieux fichier et à la fermeture j'ai eu ça :
et franchement, des boîtes de dialogues comme ça, ça change la vie !
en bien !
Pas besoin de perdre du temps à essayer de comprendre ce qu'ils ont voulu dire, avec Publisher on sait tout de suite.
Bonjour,
OK, je suis un peu HS, mais il est difficile, quand on a les mains dans le cambouis, de faire la part des choses entre l'EDI proprement et les fichiers de code qu'il pilote et qu'il nous permet d'utiliser.
Alors bon, qu'est-ce que je voudrais pour Lazarus ?
Profitons, c'est bientôt Noël : je voudrais un système muni de fonctions de base opérationnelles.
Parce que c'est bien joli de rajouter des composants à chaque nouvelle version, mais si ceux-ci s'appuient sur des fondations en sable, on ne peut pas aller bien loin...
J'ai mis "fonctions de base opérationnelles" en gras car on sait tous que dans ces systèmes, tout est à base de messages échangés entre composants divers et variés, routines kernel et userland, etc., et lisez donc la suite.
Dans ce lien on trouve quelques lignes nous montrant comment fonctionne Ctrl.Perform ; j'ai récupéré et testé, je vous laisse lire mes commentaires (les deux lignes hwnd := ... et SendMessage(... c'est moi qui les ai ajoutées plus tard) :
Tellement dégoûté que j'ai fini par remplacer cette fonction SendMessageToCtrl par celle-ci, en conservant hélas la restriction du TLabel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Ctrl := Components[Idx] as TControl; if AnsiSameText(Ctrl.Name, aName) then begin // found it: send message and bail out // Ctrl.Perform(Msg, WParam, LParam); // dessus ne fonctionne ni sous XP ni sous Linux // dessous fonctionne seulement avec XP // mais pas avec le TLabel, qui n'a pas de hwnd... hwnd := Edit1.Handle; // 2 lignes pour tester SendMessage(hwnd, Msg, WParam, LParam); // Direct call of a message handler, bypassing the message queue. Result := True; Exit; end;
Inutile de préciser que le code du lien fonctionne, sans en changer un seul caractère, du feu de Dieu en... D7, un produit qui a 15 ans d'âge :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 function TForm1.SendMessageToCtrl2(const hwnd: THandle; const Msg: Cardinal; WParam, LParam: Integer): Boolean; begin Result := False; SendMessage(hwnd, Msg, WParam, LParam); Result := True; end;
Ah, cet exe généré sous D7 fonctionne comme on s'y attend, comme sur l'image, sous XP ! Conclusion : Lazarus (ou FreePascal) n'est pas à la hauteur.
Quant à Lazarus sous Linux, ben, laisse tomber, quoi...
Partager