⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 feteselect.pas

📁 vod点歌系统,DELPHI的通用软件 会有帮助
💻 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 + -