Soyez le premier à donner votre avis sur cette source.
Vue 7 582 fois - Téléchargée 686 fois
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons, WaveBase, WaveOut, IniFiles; type TForm1 = class(TForm) Timer1: TTimer; Label1: TLabel; Label2: TLabel; SpeedButton1: TSpeedButton; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure WaveOut1Buffer(Buffer: Pointer; Length: Cardinal; BufferQueueLength: Integer); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private public FFirstTick,FDeltaSound,FSoundIntensity:Integer; FFlash:Boolean; WaveOut1: TWaveOut; end; var Form1: TForm1; GTotalTime:Integer; const GMillisecondsPerDay=3600*1000*24; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var f:TIniFile; h1,h2:HRGN; const Rounding=15; begin WaveOut1:=TWaveOut.Create(Self); WaveOut1.Bits16:=True; WaveOut1.BufferSize:=2048; WaveOut1.DeviceID:=-1; WaveOut1.OnBuffer:=WaveOut1Buffer; h1:=CreateRoundRectRgn(0,0,ClientWidth+1,ClientHeight+1,Rounding,Rounding); with SpeedButton1.BoundsRect do h2:=CreateRectRgn(Left,Top,Right,Bottom); CombineRgn(h1,h1,h2,RGN_OR); DeleteObject(h2); SetWindowRgn(Handle,h1,False); DeleteObject(h1); f:=TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini')); try Left:=f.ReadInteger('Position','X',0); Top:=f.ReadInteger('Position','Y',0); finally f.Destroy; end; end; procedure TForm1.Timer1Timer(Sender: TObject); var t,u:Integer; begin t:=Integer(GetTickCount)-FFirstTick; u:=GTotalTime-t; if u<6000 then WaveOut1.Start; if u<0 then begin FFlash:=not FFlash; if FFlash then Label1.Color:=clRed else Label1.Color:=0; u:=0; end; Label1.Caption:=TimeToStr(u/GMillisecondsPerDay); Label2.Caption:='Total time: '+TimeToStr(t/GMillisecondsPerDay); end; procedure TForm1.SpeedButton1Click(Sender: TObject); begin Close; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key=27 then Close; end; procedure TForm1.WaveOut1Buffer(Buffer: Pointer; Length: Cardinal; BufferQueueLength: Integer); type TSmallintArray=array[0..$FFFFFF] of Smallint; PSmallintArray=^TSmallintArray; var p:PSmallintArray; i:Integer; function Signal(x:Single):Smallint; begin if Frac(x/3000)<0.8 then Result:=0 else begin if Cos(x)>0 then Result:=FSoundIntensity else Result:=-FSoundIntensity; end; end; begin p:=Buffer; Length:=Length div 2; for i:=0 to Length-1 do p[i]:=Signal(0.3*(i+FDeltaSound)); FDeltaSound:=FDeltaSound+Integer(Length); Inc(FSoundIntensity,5+FSoundIntensity div 20); if FSoundIntensity>32000 then FSoundIntensity:=32000; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var f:TIniFile; begin f:=TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini')); try f.WriteInteger('Position','X',Left); f.WriteInteger('Position','Y',Top); finally f.Destroy; end; end; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; Perform(WM_SYSCOMMAND,$f012,0); end; end.
23 juil. 2008 à 21:44
Mais c'est génial.. Un bon thé et en musique..
enfin, j'ai lancé le programme..
j'avais mis le son sur mes enceintes et à fond..
On a frappé à ma porte..
ils ont cru à un attentat !
heureusement, ouf, j'ai trouvé la croix..
Bravo quand même l'originalité..
23 juil. 2008 à 22:10
Désolé, j'aurais dû prévenir que le son va crescendo :-)
Peut-être que je devrais ajouter la possibilité de limiter le volume, mais je n'avais pas trop envie de surcharger l'interface.
23 juil. 2008 à 23:46
« Dans les 3 premières minutes, c'est la théine qui diffuse dans l'eau ( 80° ! ). Ensuite, ce sont les tanins qui diffusent et donnent le goût amer, mais aussi les parfums.
Cependant les tanins neutralisent l'effet de la théine et rendent donc le thé moins excitant. »
Ma copine suggère donc un TrackBar (excitation-parfum) et un choix de type de thé (noir, vert, blanc, etc.) plutôt que le temps d'infusion en dur. Ce serait appréciée en Chine, paraît-il.
De plus, elle n'aime pas le bip-bip. Quelque chose de plus harmonieux pour cet instant aurait été préférable, dit-elle.
Raffinée la chinetoque! lol
Moi, perso, j'ai rien à redire. Mais je ne mets que 9 à cause du bip-bip agressif (quand t'es un peu paumé dans le codage de tes pointeurs, ça énerve une théière qui menace de faire exploser la baraque).
24 juil. 2008 à 00:59
Si j'ai le temps j'en ferai une autre version. L'agressivité du son était désirée, parce que sinon je suis trop tenté de me dire "non c'est bon je peux attendre un peu et y aller plus tard", au moins là il est difficile de l'ignorer.
24 juil. 2008 à 01:39
10 sec apres : la voisine qui descend en string pas contente.
Bon ben j'en ai profité pour lui offrir un thé : Bilan j'ai pas finit la nuit tout seul.
Smpas ton truc formant, sympa.
Je le conseil à tout les étudiants qui sont en résidence universitaire : Va y avoir du laché de strings.
Je le vous le dit les gars : c'est chaud les trucs à Forman
Mdrrrr
Ps : Pour ceux qui ont pas compris. C'est pas un simple chronometre hein.
Pour le code rien à redire sauf que tu as pas renommé les composants :p.
Pour la voisine ca mérite un 10
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.