📄 feteselect.pas
字号:
unit FeteSelect;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls,db,stdctrls,dbclient;
type
TFeteSelect = class(TPanel)
private
FCurPage:Integer;
FPageCount:Integer;
FRecordCount:Integer;
FCurItem:Integer;
FBackImage:TImage;
FSelectImage:TImage;
FNextPageImage:TImage;
FPriorPageImage:TImage;
FReturnImage:TImage;
FDataSet:TDataSet;
FDQDBDataSet:TDataSet;
FGXFieldName:String;
FGMFieldName:String;
FJMLB:String;
FSelImage:Array [0..7] of TImage;
FGQMCLabel:Array [0..7] of TLabel;
FGXXMLabel:Array [0..7] of TLabel;
FTotalLabel:Array [0..7] of TLabel;
FPageLabel:TLabel;
FReturnSelect:TNotifyEvent;
procedure NextPageImageClick(Sender:TObject);
procedure PriorPageImageClick(Sender:TObject);
procedure ReturnImageClick(Sender:TObject);
procedure LabelClick(Sender:TObject);
procedure DrawPage(PageNum:Integer);
procedure SelectItem(ItemIndex:Integer);
procedure AddToDQDBK;
procedure DeleteFromDQDBK;
{ Private declarations }
protected
{ Protected declarations }
public
procedure Init;
procedure NextPage;
procedure PriorPage;
procedure NextItem;
procedure PriorItem;
procedure GotoPage(PageNum:Integer);
procedure SelItem(ItemIndex:Integer);
procedure AgreeCurSel;
constructor Create(AOwner: TComponent); override;
{ Public declarations }
published
property JMLB:String read FJMLB write FJMLB;
property DataSet:TDataSet read FDataSet write FDataSet;
property DQDBDataSet:TDataSet read FDQDBDataSet write FDQDBDataSET;
property GXFieldName:String read FGXFieldName write FGXFieldName;
property GMFieldName:String read FGMFieldName write FGMFieldName;
property ReturnSelect:TNotifyEvent read FReturnSelect write FReturnSelect;
{ Published declarations }
end;
procedure Register;
implementation
{$R FeteSelect.RES}
procedure TFeteSelect.GotoPage(PageNum:Integer);
begin
if FCurPage<FPageCount-1 then
begin
DrawPage(PageNum);
SelectItem(0);
end;
end;
procedure TFeteSelect.NextPage;
begin
if FCurPage<FPageCount-1 then
begin
FCurPage:=FCurPage+1;
DrawPage(FCurPage);
SelectItem(0);
end;
end;
procedure TFeteSelect.PriorPage;
begin
if FCurPage>0 then
begin
FCurPage:=FCurPage-1;
DrawPage(FCurPage);
SelectItem(0);
end;
end;
procedure TFeteSelect.NextItem;
begin
if FCurItem<7 then
begin
if (FCurPage=FPageCount-1) and (FCurItem>=FRecordCount mod 8 -1) then
SelectItem(0)
else
SelectItem(FCurItem+1)
end
else
SelectItem(0);
end;
procedure TFeteSelect.PriorItem;
begin
if FCurItem>0 then
SelectItem(FCurItem-1)
else
begin
if FCurPage=FPageCount-1 then
SelectItem(FRecordCount mod 8 -1)
else
SelectItem(7);
end;
end;
procedure TFeteSelect.AddToDQDBK;
begin
FDQDBDataSet.Append;
if UpperCase(FJMLB)='MUSIC' then
begin
FDQDBDataSet.FieldByName('JMLB').AsString:='M';
FDQDBDataSet.FieldByName('JMBH').AsString:=FDataSet.FieldByName('GQBH').AsString;
FDQDBDataSet.FieldByName('JMMC').AsString:=FDataSet.FieldByName('GQMC').AsString;
FDQDBDataSet.FieldByName('JMLJ').AsString:=FDataSet.FieldByName('CPLJ').AsString;
FDQDBDataSet.FieldByName('JMZL').AsString:=FDataSet.FieldByName('GQZL').AsString;
FDQDBDataSet.FieldByName('DPMC').AsString:=FDataSet.FieldByName('DPMC').AsString;
FDQDBDataSet.FieldByName('BCSD').AsString:=FDataSet.FieldByName('BCSD').AsString;
FDQDBDataSet.FieldByName('YCSD').AsString:=FDataSet.FieldByName('YCSD').AsString;
FDQDBDataSet.FieldByName('YL').AsString:=FDataSet.FieldByName('YL').AsString;
end
else
begin
FDQDBDataSet.FieldByName('JMLB').AsString:='V';
FDQDBDataSet.FieldByName('JMBH').AsString:=FDataSet.FieldByName('XH').AsString;
FDQDBDataSet.FieldByName('JMMC').AsString:=FDataSet.FieldByName('MC').AsString;
FDQDBDataSet.FieldByName('JMLJ').AsString:=FDataSet.FieldByName('LJ').AsString;
FDQDBDataSet.FieldByName('JMZL').AsString:=FDataSet.FieldByName('JMZL').AsString;
end;
TClientDataSet(FDQDBDataSet).ApplyUpdates(0);
end;
procedure TFeteSelect.DeleteFromDQDBK;
begin
FDQDBDataSet.First;
if UpperCase(FJMLB)='MUSIC' then
FDQDBDataSet.Locate('JMBH',FDataSet.FieldByName('GQBH').AsInteger,[])
else
FDQDBDataSet.Locate('JMBH',FDataSet.FieldByName('XH').AsInteger,[]);
FDQDBDataSet.Edit;
FDQDBDataSet.Delete;
TClientDataSet(FDQDBDataSet).ApplyUpdates(0);
end;
procedure TFeteSelect.SelItem(ItemIndex:Integer);
begin
SelectItem(ItemIndex-1);
if FSelImage[FCurItem].Visible then
begin
FSelImage[FCurItem].Visible:=false;
FGQMCLabel[FCurItem].Font.Color:=clBlack;
FGXXMLabel[FCurItem].Font.Color:=clBlack;
FDataSet.First;
FDataSet.MoveBy(FCurPage*8+FCurItem);
DeleteFromDQDBK;
end
else
begin
FSelImage[FCurItem].Visible:=true;
FGQMCLabel[FCurItem].Font.Color:=clRed;
FGXXMLabel[FCurItem].Font.Color:=clRed;
FDataSet.First;
FDataSet.MoveBy(FCurPage*8+FCurItem);
AddToDQDBK;
end;
end;
procedure TFeteSelect.AgreeCurSel;
begin
SelectItem(FCurItem);
if FSelImage[FCurItem].Visible then
begin
FSelImage[FCurItem].Visible:=false;
FGQMCLabel[FCurItem].Font.Color:=clBlack;
FGXXMLabel[FCurItem].Font.Color:=clBlack;
FDataSet.First;
FDataSet.MoveBy(FCurPage*8+FCurItem);
DeleteFromDQDBK;
end
else
begin
FSelImage[FCurItem].Visible:=true;
FGQMCLabel[FCurItem].Font.Color:=clRed;
FGXXMLabel[FCurItem].Font.Color:=clRed;
FDataSet.First;
FDataSet.MoveBy(FCurPage*8+FCurItem);
AddToDQDBK;
end;
end;
procedure TFeteSelect.DrawPage(PageNum:Integer);
var
i:Integer;
begin
FCurPage:=PageNum;
FPageLabel.Caption:=IntToStr(PageNum+1)+'/'+IntToStr(FPageCount);
if Length(FPageLabel.Caption)<=5 then
FPageLabel.Font.Size:=24
else
FPageLabel.Font.Size:=round(24*(5 / Length(FPageLabel.Caption)));
FPageLabel.Left:=21+(94-FPageLabel.Canvas.TextWidth(FPageLabel.Caption)) div 2;
FPageLabel.Top:=482+(48-FPageLabel.Canvas.TextHeight(FPageLabel.Caption)) div 2;
FDataSet.First;
FDataSet.MoveBy(PageNum*8);
For i:=0 to 7 do
begin
FSelImage[i].Visible:=false;
FGQMCLabel[i].Font.Color:=clBlack;
FGXXMLabel[i].Font.Color:=clBlack;
end;
For i:=0 to 7 do
begin
if not FDataSet.Eof then
begin
FGQMCLabel[i].Caption:=FDataSet.FieldByName(FGMFieldName).AsString;
if UpperCase(FJMLB)='MUSIC' then
begin
if FDataSet.FieldByName('SFDCHC').AsString='F' then
FGXXMLabel[i].Caption:=FDataSet.FieldByName(FGXFieldName).AsString
else
FGXXMLabel[i].Caption:=FDataSet.FieldByName(FGXFieldName).AsString+' '+FDataSet.FieldByName('GXXM1').AsString;
if Length(FGXXMLabel[i].Caption)>9 then
begin
FGXXMLabel[i].Font.Size:=round(24*(9 / Length(FGXXMLabel[i].Caption)));
FGXXMLabel[i].Top:=9+i*59+round((48-FGXXMLabel[i].Canvas.TextHeight('字'))/2);
end
else
begin
FGXXMLabel[i].Font.Size:=24;
FGXXMLabel[i].Top:=9+i*59+7;
end;
end;
end
else
begin
FGQMCLabel[i].Caption:='';
FGXXMLabel[i].Caption:='';
end;
FDataSet.Next;
end
end;
procedure TFeteSelect.SelectItem(ItemIndex:Integer);
begin
if FGQMCLabel[ItemIndex].Caption<>'' then
begin
FCurItem:=ItemIndex;
FSelectImage.Visible:=true;
FSelectImage.Top:=9+ItemIndex*59+39;
end;
end;
procedure TFeteSelect.LabelClick(Sender:TObject);
begin
SelItem(TLabel(Sender).Tag+1);
end;
procedure TFeteSelect.NextPageImageClick(Sender:TObject);
begin
NextPage;
end;
procedure TFeteSelect.PriorPageImageClick(Sender:TObject);
begin
PriorPage;
end;
procedure TFeteSelect.ReturnImageClick(Sender:TObject);
begin
if Assigned(FReturnSelect) then
FReturnSelect(self);
end;
procedure TFeteSelect.Init;
var
i:Integer;
begin
if FGQMCLabel[0]=nil then
begin
//初始画FGQMCLabel
For i:=0 to 7 do
begin
FGQMCLabel[i]:=TLabel.Create(self);
FGQMCLabel[i].Parent:=self;
FGQMCLabel[i].Font.Size:=24;
FGQMCLabel[i].Font.Name:='黑体';
FGQMCLabel[i].Font.Style:=[fsBold];
FGQMCLabel[i].AutoSize:=false;
FGQMCLabel[i].Top:=9+i*59+7;
FGQMCLabel[i].Left:=78;
FGQMCLabel[i].Width:=379;
FGQMCLabel[i].Height:=33;
FGQMCLabel[i].Transparent:=true;
end;
//初始画FGXXMLabel
For i:=0 to 7 do
begin
FGXXMLabel[i]:=TLabel.Create(self);
FGXXMLabel[i].Parent:=self;
FGXXMLabel[i].Font.Size:=24;
FGXXMLabel[i].Font.Name:='黑体';
FGXXMLabel[i].Font.Style:=[fsBold];
FGXXMLabel[i].AutoSize:=false;
FGXXMLabel[i].Top:=9+i*59+7;
FGXXMLabel[i].Left:=456;
FGXXMLabel[i].Width:=157;
FGXXMLabel[i].Height:=33;
FGXXMLabel[i].Transparent:=true;
end;
//初始画FTotalLabel
For i:=0 to 7 do
begin
FTotalLabel[i]:=TLabel.Create(self);
FTotalLabel[i].Parent:=self;
FTotalLabel[i].AutoSize:=false;
FTotalLabel[i].Caption:='';
FTotalLabel[i].Left:=22;
FTotalLabel[i].Top:=9+i*59;
FTotalLabel[i].Height:=46;
FTotalLabel[i].Width:=593;
FTotalLabel[i].Transparent:=true;
FTotalLabel[i].Tag:=i;
FTotalLabel[i].Cursor:=crHandPoint;
FTotalLabel[i].OnClick:=LabelClick;
end;
FPageLabel:=TLabel.Create(self);
FPageLabel.Parent:=self;
FPageLabel.Transparent:=true;
FPageLabel.Font.Size:=24;
FPageLabel.Font.Name:='黑体';
FPageLabel.Top:=489;
end;
FDataSet.Last;
FRecordCount:=FDataSet.RecordCount;
if FDataSet.RecordCount mod 8 =0 then
FPageCount:=FDataSet.RecordCount div 8
else
FPageCount:=FDataSet.RecordCount div 8 +1;
FCurPage:=0;
DrawPage(0);
SelectItem(0);
end;
constructor TFeteSelect.Create(AOwner: TComponent);
var
i:Integer;
begin
Inherited Create(AOwner);
BevelOuter:=bvNone;
FBackImage:=TImage.Create(self);
FBackImage.Parent:=self;
FBackImage.Picture.Bitmap.Handle:=LoadBitmap(Hinstance,'FETEBACK');
FBackImage.Align:=alClient;
Width:=FBackImage.Picture.Bitmap.Width;
Height:=FBackImage.Picture.Bitmap.Height;
FSelectImage:=TImage.Create(self);
FSelectImage.Parent:=self;
FSelectImage.Picture.Bitmap.Handle:=LoadBitmap(Hinstance,'FETESELECTT');
FSelectImage.Width:=FSelectImage.Picture.Bitmap.Width;
FSelectImage.Height:=FSelectImage.Picture.Bitmap.Height;
FSelectImage.BringToFront;
FSelectImage.Left:=79;
FSelectImage.Visible:=false;
FNextPageImage:=TImage.Create(self);
FNextPageImage.Parent:=self;
FNextPageImage.Cursor:=crHandPoint;
FNextPageImage.Top:=483;
FNextPageImage.Left:=238;
FNextPageImage.Width:=87;
FNextPageImage.Height:=47;
FNextPageImage.OnClick:=NextPageImageClick;
FPriorPageImage:=TImage.Create(self);
FPriorPageImage.Parent:=self;
FPriorPageImage.Cursor:=crHandPoint;
FPriorPageImage.Top:=483;
FPriorPageImage.Left:=134;
FPriorPageImage.Width:=87;
FPriorPageImage.Height:=47;
FPriorPageImage.OnClick:=PriorPageImageClick;
FReturnImage:=TImage.Create(self);
FReturnImage.Parent:=self;
FReturnImage.Cursor:=crHandPoint;
FReturnImage.Top:=483;
FReturnImage.Left:=338;
FReturnImage.Width:=87;
FReturnImage.Height:=47;
FReturnImage.OnClick:=ReturnImageClick;
//初始画FSelImage
For i:=0 to 7 do
begin
FSelImage[i]:=TImage.Create(self);
FSelImage[i].Picture.Bitmap.Handle:=LoadBitmap(Hinstance,Pchar('FETESELECT'));
FSelImage[i].Parent:=self;
FSelImage[i].Visible:=false;
FSelImage[i].AutoSize:=true;
FSelImage[i].Top:=9+i*59;
FSelImage[i].Left:=20;
end;
end;
procedure Register;
begin
RegisterComponents('Samples', [TFeteSelect]);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -