Einzelnen Beitrag anzeigen

Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#1

Dynamische Procedur-Zuordnung

  Alt 1. Mär 2006, 20:44
Hi,

ich möchte gerne einem Button (z.B.) die Proceduren für einige Events dynamisch zuordnen.

Der Code unten funktioniert auch in so weit, dass die entsprechenden Befehle in der neuen Procedure ausgeführt werden, allerdings bekomme ich bei ControlMove/-Down/-Up nach Beendigung der Procedure eine Exception.
Mal eine EAccessViolation, mal eine EExternalException.

ControlClick wirft keine Exception.

Einer eine Idee?
Parameteranzahl/-art stimmt mit denen der normalen Events überein.


Danke schon mal,

Stefan



Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Button: TButton;

implementation

{$R *.dfm}

procedure ControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Form1.Caption := 'ControlMouseDown';
end;

procedure ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  Form1.Caption := 'ControlMouseMove';
end;

procedure ControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Form1.Caption := 'ControlMouseUp';
end;

procedure ControlClick(Sender: TObject);
begin
  Form1.Caption := IntToStr(GetTickCount);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button := TButton.Create(nil);

  Button.Left := 100;
  Button.Top := 100;
  Button.Width := 100;
  Button.Height := 25;

  @Button.OnClick := @ControlClick;
  @Button.OnMouseMove := @ControlMouseMove;
  @Button.OnMouseDown := @ControlMouseDown;
  @Button.OnMouseUp := @ControlMouseUp;

  Button.Parent := Form1;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Button.Free;
end;

end.
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat