unit _fm_Top; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, ExtCtrls, Buttons; type Tfm_Top = class(TForm) sgTop : TStringGrid; edCW : TEdit; laPhrase : TLabel; Panel1 : TPanel; Timer1 : TTimer; Timer2 : TTimer; btClear : TSpeedButton; btOk : TBitBtn; edName : TLabel; edPoints : TLabel; procedure sgTopDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure btOKClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure Timer2Timer(Sender: TObject); procedure btClearClick(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var fm_Top : Tfm_Top; implementation {$R *.DFM} uses _fm_Main, _fm_Setup, LangSupp, Aphorism; var Aphor : string; const ColorBest = cardinal(clYellow); ColorLast = cardinal($00777777); PlaceCount = 10; iR = (((ColorLast div $00001) mod $100) - (ColorBest div $00001) mod $100 ) div PlaceCount; iG = (((ColorLast div $00100) mod $100) - (ColorBest div $00100) mod $100 ) div PlaceCount; iB = (((ColorLast div $10000) mod $100) - (ColorBest div $10000) mod $100 ) div PlaceCount; procedure Tfm_Top.sgTopDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin with Sender as TDrawGrid do begin Canvas.Brush.Color := ColorBest + (iR + iG*$100 + iB*$10000)*ARow; Canvas.FillRect(Rect); Canvas.TextRect(Rect, Rect.Left+1, Rect.Top+4, sgTop.Cells[ACol,ARow]); end end; procedure Tfm_Top.FormCreate(Sender: TObject); begin sgTop.ColWidths[0] := 20; sgTop.ColWidths[1] := 150; sgTop.ColWidths[2] := 50; sgTop.ColWidths[3] := 280; end; procedure Tfm_Top.Timer1Timer(Sender: TObject); const speed = 5; var a : string; begin edCW.Enabled := (TopAction=taShow); if TopAction=taShow then if fm_Top.Height>140 then begin fm_Top.Height := fm_Top.Height - speed; sgTop.Top := sgTop.Top + speed end else begin Timer1.Enabled := false; ActiveControl := edCW; if Timer2.Tag<>0 then begin repeat a := GetAphorism; until Length(a)<=40; if Length(a)<=40 then begin Aphor := a; Timer2.Enabled := true; end end end else if fm_Top.Height<340 then begin fm_Top.Height := fm_Top.Height + speed; sgTop.Top := sgTop.Top - speed end else Timer1.Enabled := false; Application.ProcessMessages; end; procedure Tfm_Top.btOKClick(Sender: TObject); begin if TopAction=taShow then begin TopNames[Tag].CoolWord := fm_Top.edCW.Text; LoadTopNames; TopAction := taHide; Timer1.Enabled := true; end else Close; end; procedure Tfm_Top.FormActivate(Sender: TObject); begin edCW.Text := ''; if TopAction<>taNone then Timer1.Enabled := true; end; procedure Tfm_Top.Timer2Timer(Sender: TObject); begin if length(Aphor)>0 then begin edCW.Text := edCW.Text + Aphor[1]; Delete(Aphor,1,1); end else begin Timer2.Enabled := false; btOKClick(Sender); end end; procedure Tfm_Top.btClearClick(Sender: TObject); var i : integer; begin if MessageBox(0,PChar(_T_mClear), PChar(Application.Title), MB_YESNO or MB_TASKMODAL or MB_ICONQUESTION or MB_DEFBUTTON2)=IDYES then begin for i:=0 to 9 do begin TopNames[i].Name := ''; TopNames[i].Points := ''; TopNames[i].CoolWord := ''; end; LoadTopNames; end; end; procedure Tfm_Top.FormKeyPress(Sender: TObject; var Key: Char); begin if Key=#27 then Close end; end.