Bonsoir,
je poste parce que je viens de découvrir deux trucs qui me font halluciner.
Dans le code de l'un des premiers posts de cette discussion, que j'ai voulu reprendre pour essayer de comprendre pourquoi aujourd'hui je n'arrive à rien, j'ai découvert que cette procédure qui fonctionnait en son temps m'envoie bouler sur les roses à la compil sans en avoir changé une virgule !

Envoyé par
Jipété
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| procedure TForm1.FormShow(Sender: TObject);
var
DC: THandle;
LogFont: TLogFont;
begin
LogFont.lfFaceName := '';
LogFont.lfCharSet := DEFAULT_CHARSET;
LogFont.lfPitchAndFamily := 0;
//lfPitchAndFamily -- Must be set to zero for all language versions of the operating system.
// trouvé ce commentaire un jour qqpart, il me suit de code en code,
// de prog en prog, il faudrait faire des tests plus poussés...
DC := GetDC(0);
if DC <> 0 then begin
//EnumFontFamilies(DC, nil, @EnumFontClBack, Integer(Self));
// Combobox vide si pas "Ex" et LogFont -- dessus ok sous D7, dessous ok sous Linux pas testé sous D7
EnumFontFamiliesEx(DC, @LogFont, @EnumFontClBackEx, Integer(Self), 0);
ReleaseDC(0, DC)
end;
end; |
Le gag est là, ligne 16 ci-dessus, si jamais quelqu'un voulait utiliser ça un jour :
EnumFontFamiliesEx(DC, @LogFont, @EnumFontClBackEx, Integer(Self), 0);
Il faut transformer cette ligne en
EnumFontFamiliesEx(DC, @LogFont, @EnumFontClBackEx, LParam(Self), 0);
Quant au commentaire de l'ami Bernard, il sera content de savoir pourquoi on a parfois envie de se taper la tête contre les murs.
il y a une piste avec le second commentaire du bout de code -- ce qui induit en erreur c'est le fait qu'en Delphi c'est bon.

Envoyé par
bb84000
A mon avis, tes soucis avec la manipulation des fontes ne font que débuter, parce qu'il y a à la fois l'émulation de la fonction EnumFontFamiliesEX dans le widgetset GTK et le comportement de l'OS qui peut différer ce celui de Windows, et peut être même entre versions du sous-système graphique...
Parce qu'en désespoir de cause face à un code qui compile mais ne fait rien, j'ai découvert, après avoir lancé le binaire dans un terminal, la... phrase que tue ! :
EnumFontFamilies is not yet implemented for this widgetset
Mais la mettre en œuvre n'empêche pas de compiler et d'exécuter sans erreur, sans message, sans rien !
Je vous vois venir, vous allez me dire qu'il ne s'agit pas des mêmes fonctions, l'une a "Ex" au bout, c'est vrai, mais comme un idiot j'ai toujours pensé que les machins nommés avec Ex étaient apparus après la publication de celles qui ne l'ont pas, un peu comme des ajouts pour compléter des choses basiques, comme les boîtes de Meccano complémentaires quand on était minots.
Mais là non, c'est l'inverse on dirait.
Le temps que je perds, c'est impressionnant...
Et si j'attaque le matin confiant et détendu, le soir venu j'ai l'impression d'avoir passé la journée sur un ring avec des méchants sournois en face,
Partager