Autor Beitrag
uwewo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 154



BeitragVerfasst: Di 09.01.07 09:29 
Hallo,

ich bin am entwickeln meiner ersten Komponente, stehe aber im Moment gerade vor einem Problem. Zur Zeit verwende ich folgenden Source, um die Mausbotschaften MouseOver und MouseLeave meiner Items an die Komponente DateLine(StringGrid) zu übergeben. siehe auch ScreenShot.
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
TControlDateItem = class(TGraphicControl) 
  private  
   FOnMouseOver   : TNotifyEvent; 
   FOnMouseLeave  : TNotifyEvent;                    
   procedure MouseOver(var Message : TMessage); message CM_MOUSEENTER; 
   procedure MouseLeave(var Message : TMessage); message CM_MOUSELEAVE; 
... 
   published 
   property OnMouseOver  : TNotifyEvent read FOnMouseOver write FOnMouseOver; 
   property OnMouseLeave : TNotifyEvent read FOnMouseLeave write FOnMouseLeave; 
... 
  end

TDateLine = class(TCustomGrid) 
  private 
    FItemMouseOver    : TNotifyEvent; 
    FItemMouseLeave   : TNotifyEvent; 
    procedure ItemMouseOver(Sender : TObject); 
    procedure ItemMouseLeave(Sender : TObject); 
... 
  published 
    property OnItemLeave      : TNotifyEvent read FItemMouseLeave write FItemMouseLeave; 
    property OnItemDown       : TMouseEvent read FItemMouseDown write FItemMouseDown; 
... 
end

procedure TDateLine.UpdateItem(Item : TDateItem); 
begin 
if Item <> nil then 
    begin 
     with Item.FControlDateItem do 
      begin 
       OnMouseOver  := ItemMouseOver; 
       OnMouseLeave := ItemMouseLeave; 
      end
    end;      
end;


Nun möchte ich auch MouseDown, MouseUp usw. übergeben.
Dies ist mein Ansatz.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
TControlDateItem = class(TGraphicControl) 
  private  
     FOnMouseDown   : TMouseEvent; 
     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;X, Y: Integer); override
... 
   published 
     property OnMouseDown  : TMouseEvent read FOnMouseDown write FOnMouseDown; 
... 
  end

TDateLine = class(TCustomGrid) 
  private 
    FItemMouseDown    : TMouseEvent; 
    procedure ItemMouseDown(Button: TMouseButton; Shift: TShiftState;X, Y: Integer); 
... 
  published 
    property OnItemDown  : TMouseEvent read FItemMouseDown write FItemMouseDown; 
... 
end;


Die Zuweisung
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TDateLine.UpdateItem(Item : TDateItem); 
begin 
if Item <> nil then 
    begin 
     with Item.FControlDateItem do 
      begin 
...        
       OnMouseDown  := ItemMouseDown; 
      end
    end;      
end;


funktioniert so natürlich nicht, da noch die Parameter
(Button: TMouseButton; Shift: TShiftState;X, Y: Integer);

übergeben werden müssen, und hier liegt mein Problem wie sollte die Syntax genau aussehen?
Wenn ich bei meinen Items nur die vorhandenen MouseDown, MouseUp überschreibe wird nur die mittlere und rechte Maustaste ausgewertet. Und das verstehe ich überhaupt nicht.

Danke schonmal an alle die sich dieses Problems annehmen.

Uwe
Einloggen, um Attachments anzusehen!