unit UKlavier;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TFKlavier =
class(TForm)
PnlKlavier: TPanel;
procedure FormCreate(Sender: TObject);
procedure TasteDruecken(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
type TKlaviatur =
record
Weiss: bool;
Taste: TShape;
end;
type TMouseEvent =
procedure (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer)
of object;
var
FKlavier: TFKlavier;
Klaviatur:
array[55..84]
of TKlaviatur;
TasteDruecken:TMouseEvent;
_bla1: TMouseButton;
_bla2: TShiftState;
implementation
uses UMain;
{$R *.dfm}
procedure TFKlavier.FormCreate(Sender: TObject);
var i, Count: integer;
begin
Count:= 1;
for i:= 55
to 84
do
if (i=56)
or (i=58)
or (i=61)
or (i=63)
or (i=66)
or (i=68)
or (i=70)
or
(i=73)
or (i=75)
or (i=78)
or (i=80)
or (i=82)
then Klaviatur[i].Weiss:= False
else Klaviatur[i].Weiss:= True;
for i:= 55
to 84
do
if Klaviatur[i].Weiss
then
begin
Klaviatur[i].Taste:= TShape.Create(Self);
with Klaviatur[i].Taste
do
begin
Left:= 20*Count - 10;
Top:= 10;
Width:= 20;
Height:= 85;
Parent:= FKlavier.PnlKlavier;
end;
inc(Count);
end;
for i:= 55
to 84
do
if Klaviatur[i].Weiss=False
then
begin
Klaviatur[i].Taste:= TShape.Create(Self);
with Klaviatur[i].Taste
do
begin
Top:= 10;
Width:= 16;
Height:= 60;
Brush.Color:= clBlack;
Parent:= FKlavier.PnlKlavier;
end;
end;
Klaviatur[56].Taste.Left:= 22;
Klaviatur[58].Taste.Left:= 42;
Klaviatur[61].Taste.Left:= 82;
Klaviatur[63].Taste.Left:= 102;
Klaviatur[66].Taste.Left:= 142;
Klaviatur[68].Taste.Left:= 162;
Klaviatur[70].Taste.Left:= 182;
Klaviatur[73].Taste.Left:= 222;
Klaviatur[75].Taste.Left:= 242;
Klaviatur[78].Taste.Left:= 282;
Klaviatur[80].Taste.Left:= 302;
Klaviatur[82].Taste.Left:= 322;
for i:= 55
to 84
do
begin
Klaviatur[i].Taste.Tag:= i;
Klaviatur[i].Taste.OnMouseDown:= TasteDruecken;
end;
end;
procedure TFKLavier.TasteDruecken(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Sender
is TShape
then
FMain.MidiOutput.PutShort($90, TShape(Sender).Tag, 65);
end;
end.