Einzelnen Beitrag anzeigen

fwsp
(Gast)

n/a Beiträge
 
#7

Re: dynam erzeugten TShape OnMouseDown-Prozedur übergeben

  Alt 20. Jan 2006, 10:48
problem gelöst:
Delphi-Quellcode:
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.
so?
  Mit Zitat antworten Zitat