Ce code utilisant l'API windows (d'ou la taille extrèmement réduite de l'executable final) vous permet d'afficher l'heure sur le bureau avec des caractères de type LCD en transparence...
Ecrit au départ avec freepascal, vous trouverez la source pour delphi dans le repertoire Delphi...
J'ai choisi d'utiliser la decoupe de ma form pour afficher les caractères en transparence sur le bureau...
Je n'ai ainsi pas besoin de gérer le rafraichissement de l'image, et le déplacement de celle-ci devient simple...
Dans l'espoir que ce code servira à certains...
Clandestino
7 sept. 2004 à 20:34
7 sept. 2004 à 20:23
28 juil. 2004 à 11:01
27 juil. 2004 à 17:15
parce que j'ai supprimer dans un autre code
uses windows;
ce qui impliquait de ne plus utiliser les const de ce fichier
et de réimporter les fonction gdi.dll user32.dll et autres
et comme le résultat est le même (ce qui prouve encore une fois la très grande efficacité du compilateur),d'importer les type,enfin tout ce travail environ 2 heure à chercher ,copier,coller, transposer ,remanipuler les record pour en faire de type params semblabe acceptable etc...
le compilateur étant ce qu'il est ,une constante ne doit donc pas être supprimer,puisque nous pouvons en debug time en connaître la signification, ici j'avais précalculé (Ws_machin or Ws_overlapped)or ws_visible)ce qui donnait un cardinal ...il n'y a donc aucun gain d'espace dans ce cas ,la valeur étant affecté directement .Difficile en effet de voir où une grande ligne de code n'occupera qu'en fait un byte ? peut-être pas tant que ça ...j'ai télécharger dernièrement un soft qui lis les exe ou les dll et qui les recompile ,permettant de voir les exportations,les entrées,mais on en revient à la base de l'asm.Ce soft n'est pas gratuit (démo 30 jours)il s'applelle PE Explorer.
Pour nous nous avons accès au code asm en utilisant la commande voir/fenêtres de débogage/cpu
donc à la lecture du code
procedure affichage;
je crois qu'ici il y aurait moyen de simplifier encore ,
procedure affichage;
var
points:packed array [0..5] of tpoint;
R1, R2 : Cardinal;
led:Byte;
Procedure point(aa:byte;bb:byte;cc:byte);
begin
points[aa].x:=bb+4;
points[aa].y:=cc+30;
End;
Procedure Setpoint(num,led,a1,a2,a3,a4,a5,a6:byte);
begin
Point( 0, valeur[num,led,0] ,a1 );
Point( 1, valeur[num,led,1] ,a2 );
Point( 2, valeur[num,led,2] ,a3 );
Point( 3, valeur[num,led,3] ,a4 );
Point( 4, valeur[num,led,4] ,a5 );
Point( 5, valeur[num,led,5] ,a6 );
R2:=CreatePolygonRgn(Points[0],6,2);
CombineRgn(R1,R1,R2,3);
deleteobject(R2);
end;
begin
R1 := CreateRectRgn(0,0,0,0);
for led :=1 to 4 do begin
if chiffre[led].A = 1 then Setpoint(1,led,4,1,1,4,7,7);
if chiffre[led].B = 1 then Setpoint(2,led,5,8,30,33,30,8);
if chiffre[led].C = 1 then Setpoint(3,led,5,8,30,33,30,8);
if chiffre[led].D = 1 then Setpoint(1,led,34,31,31,34,37,37);
if chiffre[led].E = 1 then Setpoint(2,led,35,38,60,63,60,38);
if chiffre[led].F = 1 then Setpoint(3,led,35,38,60,63,60,38);
if chiffre[led].G = 1 then Setpoint(1,led,64,61,61,64,67,67);
end;
if clignot=1 then begin
Point( 0, 86 ,19 );
Point( 1, 92 ,19 );
Point( 2, 92 ,24 );
Point( 3, 86 ,24 );
R2:=CreatePolygonRgn(Points[0],4,2);
CombineRgn(R1,R1,R2,3);
Point( 0, 86 ,43 );
Point( 1, 92 ,43 );
Point( 2, 92 ,48 );
Point( 3, 86 ,48 );
R2:=CreatePolygonRgn(Points[0],4,2);
CombineRgn(R1,R1,R2,3);
deleteobject(R2);end;
SetWindowRgn(hwindow,R1,TRUE);
deleteobject(R1);
end;
quelques octets de gagner mais bon !!!
27 juil. 2004 à 09:32
Je n'avais pas réussi à la definir directement dans la création du timer, ce qui m'obligeait à gerer un evènement WM_TIMER..
En effet, contrairement à Delphi (plus tolérent !!) freepascal refuse de compiler la ligne
si miseajour n'a pas une structure Timerproc stricte
j'ai du donc modifier ainsi
miseajour(a:HWND; b:ulong; c:ulong, d:ulong);
et faire mes appels de la manière suivante
miseajour(hwindow,0,0,0);
Merci, c'est grace à toi que je me suis repenché sur le problème et que j'ai compris la solution...
Clan
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.