Avatar billede valbjorn Nybegynder
26. november 2001 - 00:02 Der er 7 kommentarer og
3 løsninger

HJælp

Hej

Kan man få sit program til at reagere på musen uden at bruger de faste events?
Jeg sider at laver en component. Jeg skal få mit component til at reagere på musen. Der findes en Mouse event som jeg regner med at bruge. Jeg er bare ikke sikker på hvordan den virker. Jeg vil altså ikke bruger property eventen mouseup.

Nogen haj der ved det???

Nikolaj
Avatar billede martinlind Nybegynder
26. november 2001 - 00:19 #1
Du kan bruge WndProc\'en, den styrer alle messages sendt til en control

/Martin
Avatar billede speedy Nybegynder
26. november 2001 - 00:25 #2
Du kan tilføje denne linie i private delen,

    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;

Så kan du trykke CTRL+SHIFT+C

Så laver den en procedure nede i koden, og dernede kan du skrive hvad der skal ske når Musen Kommer ind over dit komponent

/SpEeDy

P.S.  Der findes \"uendelig\" mange af sådan nogle messages, du kan gå på opdagelse i messages.pas for at finde flere spændende :)
Avatar billede morten_s Nybegynder
26. november 2001 - 08:26 #3
Lidt musekode i komponent

unit Loop;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, ALabel, uFalcoVars;

type
  TLoopState = Boolean;
  TLoopError = Boolean;
  TLoop = class(TGraphicControl)
  private
    FLoopState: TLoopState;
    FLoopError: TLoopError;
    procedure MouseMove(var m:twmmouse) ; message wm_MouseMove;
    procedure MouseLDown(var m:twmmouse) ; message wm_LButtonDown;
    procedure MouseLUp(var m:TWMmouse); message wm_LButtonUp;
    procedure MouseLDBlClk(var m:twmmouse); message wm_LButtonDBlClk;
    procedure MouseRDown(var m:twmmouse) ; message wm_RButtonDown;
    procedure MouseRUp(var m:twmmouse) ; message wm_RButtonUp;
    procedure SetLoopState(Value : TLoopState);
    procedure SetLoopError(Value : TLoopError);
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor  Destroy; override;
  published
    { Published declarations }
    property LoopState: TLoopState read FLoopState write SetLoopState;
    property LoopError: TLoopError read FLoopError write SetLoopError;
  end;

procedure Register;

implementation

uses
  tpLoop, dlgLoopData;


procedure TLoop.MouseMove(var m:twmmouse);
begin
  inherited;
  m.YPos  := GVars.GSize * ((m.YPos) div GVars.GSize );
  m.XPos := GVars.GSize * ((m.XPos) div GVars.GSize );
end;

procedure TLoop.MouseLdown(var m:twmmouse);
begin
  inherited;
  MouseCapture := True;
  SetCapture(Canvas.Handle);
  m.YPos  := GVars.GSize * ((m.YPos) div GVars.GSize );
  m.XPos := GVars.GSize * ((m.XPos) div GVars.GSize );
  Invalidate;
end;

Procedure TLoop.MouseLUp(var m:TWMmouse);
begin
  inherited;
  X1 := m.XPos;
  Y1 := m.YPos;
  invalidate;
end;

procedure TLoop.MouseRDown(var m:twmmouse);
begin
  inherited;
  invalidate;
end;

procedure TLoop.MouseRUp(var m:twmmouse);
begin
  inherited;
  if not EditMode then
  with dlgLoopSettings do
  begin
    LabelId.Caption := IntToStr(LoopID);
    LabelGroupName.Caption := LoopName;
    LabelGroupNo.Caption := IntToStr(LoopLogicNo);
    ShowModal;
  end;
  invalidate;
end;

Avatar billede martinlind Nybegynder
26. november 2001 - 10:15 #4
du kan sikkert også bare override DoMouseUp

/Martin
Avatar billede valbjorn Nybegynder
26. november 2001 - 15:14 #5
Tak for hjælpen...det er sgu sejt

Nikolaj
Avatar billede valbjorn Nybegynder
26. november 2001 - 20:29 #6
>morten S
Du kalder inherited. nogen gange. Hvad er det du arver fra? jeg kan godt se at man skal skrive det for ellers vil den ikke lukke ned med mindre man fjerner fokus fra formen
Men jeg kan ikke gennemskue hvad der ske...?

/Nikolaj
Avatar billede morten_s Nybegynder
26. november 2001 - 20:31 #7
Jeg arver den oprindelige museevent
som er på de enkelte museevents, og derefter programmere jeg det tillæg
jeg skal have på museeventet
Avatar billede valbjorn Nybegynder
26. november 2001 - 20:40 #8
hmm..TGraphicControl har da ikke noget du kan arve der hedder noget med Mouse...hvorfra er det så der arves?
Avatar billede morten_s Nybegynder
26. november 2001 - 20:41 #9
godt spørgsmål, gætter på det er noget TWincontrol
Avatar billede valbjorn Nybegynder
26. november 2001 - 20:46 #10
Har set det. Det er TControl...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester