博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
绘制一个钢琴键盘
阅读量:6702 次
发布时间:2019-06-25

本文共 2552 字,大约阅读时间需要 8 分钟。

  hot3.png

刚帮朋友解决了一个小问题, 这是其中的小片段:

本例效果图:
26153500_hPQI.gif

代码文件:

unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, ExtCtrls;type  TForm1 = class(TForm)    Panel1: TPanel;    procedure FormCreate(Sender: TObject);  end;  TMyShape = class(TShape)  private    FColorTmp: TColor;  protected    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X: Integer;      Y: Integer); override;    procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X: Integer;      Y: Integer); override;  end;var  Form1: TForm1;implementation{$R *.dfm}const  {黑白键组合顺序}  Keys = '0100101001010100101001010100101001010100101001010100101001010100101001010100101001010100';  KeyWhiteWidth = 15;   {白键宽}  KeyBlackWidth = 10;   {黑键宽}  KeyWhiteHeight = 88;  {白键高}  KeyBlackHeight = 56;  {黑键高}var  KeyArr: array[0..87] of TMyShape; {键数组}procedure TForm1.FormCreate(Sender: TObject);var  i,L: Integer;begin  {控件布局}  Panel1.Align := alTop;  Panel1.Height := KeyWhiteHeight;  ClientWidth := (KeyWhiteWidth-1) * 52 - 1; {共 52 个白键, 这是键盘宽度}  ClientHeight := KeyWhiteHeight;  {画键盘}  L := 0;  for i := 0 to Length(Keys) - 1 do  begin    KeyArr[i] := TMyShape.Create(Self);    KeyArr[i].Pen.Color := clGray;    KeyArr[i].Parent := Panel1;    KeyArr[i].Top := 0;    case Keys[i+1] of      '0': begin        KeyArr[i].Width := KeyWhiteWidth;        KeyArr[i].Height := KeyWhiteHeight;        KeyArr[i].Brush.Color := clWhite;        KeyArr[i].Left := L;        Inc(L, KeyWhiteWidth-1);        KeyArr[i].SendToBack;      end;      '1': begin        KeyArr[i].Width := KeyBlackWidth;        KeyArr[i].Height := KeyBlackHeight;        KeyArr[i].Brush.Color := clBlack;        KeyArr[i].Left := L - KeyBlackWidth div 2;      end;    end;  end;end;{ TMyShape }procedure TMyShape.MouseDown(Button: TMouseButton; Shift: TShiftState; X,  Y: Integer);begin  inherited;  FColorTmp := Brush.Color;  Brush.Color := clWebGold;end;procedure TMyShape.MouseUp(Button: TMouseButton; Shift: TShiftState; X,  Y: Integer);begin  inherited;  Brush.Color := FColorTmp;end;end.
窗体文件:

object Form1: TForm1  Left = 0  Top = 0  Caption = 'Form1'  ClientHeight = 163  ClientWidth = 290  Color = clBtnFace  Font.Charset = DEFAULT_CHARSET  Font.Color = clWindowText  Font.Height = -11  Font.Name = 'Tahoma'  Font.Style = []  OldCreateOrder = False  OnCreate = FormCreate  PixelsPerInch = 96  TextHeight = 13  object Panel1: TPanel    Left = 56    Top = 48    Width = 185    Height = 41    Caption = 'Panel1'    TabOrder = 0  endend

转载于:https://my.oschina.net/hermer/blog/320032

你可能感兴趣的文章
SSH 整合框架(自整理)
查看>>
学习ARM嵌入式linux的一些建议
查看>>
java.lang.NoClassDefFoundError解决方案
查看>>
textView限制字数(超简单,不走弯路)(解决联想输入及iOS7崩溃等问题)
查看>>
shell实例
查看>>
我的友情链接
查看>>
java中四种进制的转换
查看>>
git多个远程仓库
查看>>
Linux之命令
查看>>
Android 6.0 特性
查看>>
shell 脚本作业
查看>>
程序员老司机都要错的 Python 陷阱与缺陷列表
查看>>
《netty入门与实战》笔记-06:心跳与空闲检测
查看>>
使用javascript开发的视差滚动效果的云彩 极客标签 - 做最棒的极客知识分享平台...
查看>>
SSM整合框架
查看>>
【安全牛学习笔记】CONTROL FRAME
查看>>
信号量 互斥锁 条件变量的区别(讲的很好,值得收藏)
查看>>
Linux学习笔记十二周四次课(4月26日)
查看>>
Linux之用户管理
查看>>
写一个shell脚本,把192.168.0.0/24网段在线的ip列出来。 思路: for循环, 0
查看>>