24. marts 2003 - 15:13
Der er
3 kommentarer og
1 løsning
MouseUp/Down problem i RichEdit under Win95/98/Me
Jeg ønsker at bruge RichEdit - komponenten i et program, og har brug for både OnMouseUp og OnMouseDown.
Under win95/98/(ME)* er problemet:
Men med venstre museknap bliver 'koden' der er knyttet til MouseDown først udført ved MouseUp og 'koden' knyttet til MouseUp bliver aldrig udført.
Er der mon en løsning på dette problem.
Jeg tror det må være muligt at lave et nyt komponent: "MyRichEdit" som bygger på TRichedit og som "reparerer" dette problem.
Der er trods alt mange der endnu bruger andet end winXP/2000 hvor problemet ikke optræder.
//Erik
* Jeg har ikke prøvet under WindowsMe men regner med at problemet også findes her da det jo grundlæggende er som win98
24. marts 2003 - 17:43
#1
Kan det passe at du bruger Delphi 4?
Jeg kan huske den fejl fra dengang.
Det kom aldrig nogen fix til det, men det virkede vist fra Delphi 5.
24. marts 2003 - 19:37
#2
Ja, jeg bruger normalt Delphi4, men har også prøvet "den gratis version" af Delphi6 og det var det samme problem.
Det der er afgørende er windowsversionen som programmet afvikles under.
//Erik
07. april 2003 - 10:59
#4
Jeg har fundet ud af at problemet måske kan løses på denne måde.
Måske kan det mon laves lidt bedre. Som det er nu fungerer det ikke som en helt "selvstændig" komponent, fordi der i komponentuniten henvises til en konkret unit i mit program.
Der laves et nyt komponent:
unit newRichEdit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls;
type
TRichEdit2 = class(TRichEdit)
private
{ Private declarations }
Procedure CMMouseUp(var msg:TMessage);message WM_LBUTTONUP;
Procedure CMMouseDown(var msg:TMessage);message WM_LBUTTONDOWN;
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
end;
procedure Register;
implementation
procedure TRichEdit2.CMMouseDown(var msg:TMessage);
begin
SetCapture(Handle);
// MinProcedure f.eks
{ Form1.RichEdit21MouseDown(self,
mbLeft,
[ssLeft],
Mouse.CursorPos.X - self.Left-parent.Left,
Mouse.CursorPos.Y - self.Top-parent.Top);}
// Husk I så fald: uses minUnit;
// Dette skrives først efter at komponenten er registreret.
//kan det laves smartere????
end;
procedure TRichEdit2.CMMouseUp(var msg:TMessage);
begin
//Min Procedure
ReleaseCapture;
end;
procedure Register;
begin
RegisterComponents('MediaMixer', [TRichEdit2]);
end;
end.
//Erik