SetValue вспомогательная процедура, с произвольным именем, которую и в класс-то можно было не добавлять (можно как глобальную оформить). На форму нужно положить 3 панели и реакцией на событие OnMouseMove у всех панелей сделать PanelsMouseMove. У формы OnKeyDown - FormKeyDown. И всё.
Или переписать так| Код | unit Unit1;
{$mode objfpc}{$H+}
interface
uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm) Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer ); procedure Panel2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer ); procedure Panel3MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer );
private { private declarations } public { public declarations } end;
var Form1: TForm1; V :byte;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin V:=1; Panel1.Color:=clHighlight; Panel2.Color:=clDefault; Panel3.Color:=clDefault; end;
procedure TForm1.Panel2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin V:=2; Panel1.Color:=clDefault; Panel2.Color:=clHighlight; Panel3.Color:=clDefault; end;
procedure TForm1.Panel3MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin V:=3; Panel1.Color:=clDefault; Panel2.Color:=clDefault; Panel3.Color:=clHighlight; end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState ); begin case key of 38:if V>1 then Dec(V) else V:=3; 40:if V<3 then Inc(V) else V:=1; end; if V=1 then Panel1.Color:=clHighlight else Panel1.Color:=clDefault; if V=2 then Panel2.Color:=clHighlight else Panel2.Color:=clDefault; if V=3 then Panel3.Color:=clHighlight else Panel3.Color:=clDefault; end;
end.
|
|