31. oktober 2000 - 12:00Der er
9 kommentarer og 3 løsninger
stjæling af events
Hvis jeg nu laver en ikke synligt component, som jeg gerne vil have til at \"stjæle\" nogle events fra en anden component.
Jeg har overvejet noget i stilen: have en propoerty der er det component der skal stjæle fra. (EventComp:TComponent) Create\'en på component: If assigned(EventComp.OnMouseMove) then begin Self.OldOnMouseMove := EventComp.OnMouseMove; EventComp.OnMouseMove := Self.MyMouseMove; end;
Og så i MyMouseMove: If assigned(OldOnMouseMove) then OldMouseMove;
Der kan vel blive problemmer hvis mit stjæleComponent bliver \"Created\" før den??
Andre problemmer/løsninger?
Pointene vil blive fordelt mellem de forskellige, efter hvor meget de hjælpe mig :-) Så det bliver nok holdt åbnet et par dage efter første svar.. (Højt point sats på grund af jeg håbe på at flere kommer med svar. hint hint?)
Installs a hook procedure that monitors messages before the system sends them to the destination window procedure. For more information, see the CallWndProc hook
Girafen..? hmm.. men jo det kan du da godt, jeg smider det op i aften.
Jo, den jeg stjæle fra(MouseEvent) er valgt via en property på mit component og er af en bestemt type. Og så lige Formen(KeyEvent) hvis det er den der er ejeren af componentet.
Før var det hest. Nu skal (andre) sagesløse dyr fra de afrikanske stepper tilsyneladende osse\' blandes ind i ekspertes meningsudvækslinger...
Vedr. spørsmålet: Snorga> Lidt ærgeligt at du selv fandt på Loaded. Jeg har benyttet netop Loaded til netop noget af det du efterlyser. Jeg bruger specielt Loaded, hvis jeg har en opgave der kræver at nogle database componenter lige skal være initialiseret før jeg kan bruge dem.
//**************************************** // Give back stolen events //**************************************** destructor TGForm.Destroy; begin inherited; if fIsLoaded then begin fIsLoaded:=False; if (Owner is TForm) then begin TForm(Owner).OnKeyDown:=FOnKeyDown; TForm(Owner).OnKeyUp:=FOnKeyUp; TForm(Owner).OnKeyPress:=FOnKeyPress; TForm(Owner).OnMouseMove:=FOnMouseMove; TForm(Owner).OnMouseUp:=FOnMouseUp; TForm(Owner).OnMouseDown:=FOnMouseDown; end; end; fDefaultFont.Free; end;
//**************************************** // Steal Events from Form and DXDraw //**************************************** procedure TGForm.Loaded; begin inherited; if csDesigning in ComponentState then exit; if not fIsLoaded then begin fIsLoaded := True; if (Owner is TForm) then begin TForm(Owner).KeyPreview := True; // Nap KeyDown If Assigned(TForm(Owner).OnKeyDown) then begin FOnKeyDown:=TForm(Owner).OnKeyDown; end else FOnKeyDown:=Nil; TForm(Owner).OnKeyDown:=OnKeyDownEvent; // Nap KeyUp If Assigned(TForm(Owner).OnKeyUp) then begin FOnKeyUp:=TForm(Owner).OnKeyUp; end else FOnKeyUp:=Nil; TForm(Owner).OnKeyUp:=OnKeyUpEvent; // Nap KeyPress If Assigned(TForm(Owner).OnKeyPress) then begin FOnKeyPress:=TForm(Owner).OnKeyPress; end else FOnKeyPress:=Nil; TForm(Owner).OnKeyPress:=OnKeyPressEvent; end; If FDXDraw<>nil then begin // Nap MouseMove If Assigned(FDXDraw.OnMouseMove) then begin FOnMouseMove:=FDXDraw.OnMouseMove; end else FOnMouseMove:=Nil; FDXDraw.OnMouseMove:=OnMouseMoveEvent; // Nap MouseDown If Assigned(FDXDraw.OnMouseDown) then begin FOnMouseDown:=FDXDraw.OnMouseDown; end else FOnMouseDown:=Nil; FDXDraw.OnMouseDown:=OnMouseDownEvent; // Nap MouseUp If Assigned(FDXDraw.OnMouseUp) then begin FOnMouseUp:=FDXDraw.OnMouseUp; end else FOnMouseUp:=Nil; FDXDraw.OnMouseUp:=OnMouseUpEvent; end; end; end;
procedure TGForm.OnKeyDownEvent(Sender: TObject; var Key: Word; Shift: TShiftState); begin If Assigned(FOnKeyDown) Then FOnKeyDown(Sender,Key,Shift); //kode end;
procedure TGForm.OnKeyUpEvent(Sender: TObject; var Key: Word; Shift: TShiftState); begin If Assigned(FOnKeyUp) Then FOnKeyUp(Sender,Key,Shift); //kode end;
procedure TGForm.OnKeyPressEvent(Sender: TObject; var Key: Char); begin If Assigned(FOnKeyPress) Then FOnKeyPress(Sender,Key); //kode end;
procedure TGForm.OnMouseDownEvent(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin If Assigned(FOnMouseDown) Then FOnMouseDown(Sender,Button,Shift,X, Y); //kode end;
procedure TGForm.OnMouseMoveEvent(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin If Assigned(FOnMouseMove) Then FOnMouseMove(Sender,Shift,X, Y); //kode end;
procedure TGForm.OnMouseUpEvent(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin If Assigned(FOnMouseUp) Then FOnMouseUp(Sender,Button,Shift,X, Y); //kode end;
procedure TGForm.SetDXDraw(Value: TDXDraw); begin FDXDraw := Value;end;
procedure Register; begin RegisterComponents(\'DelphiX\', [TGForm]); end;
Synes godt om
Ny brugerNybegynder
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.