Discussion:
[Lazarus] Forms.pp function error?
AlexeyT via Lazarus
2018-10-16 06:53:40 UTC
Permalink
function ShiftStateToKeys(ShiftState: TShiftState): PtrUInt;
begin
  Result := 0;
  if ssShift  in ShiftState then Result := Result or MK_SHIFT;
  if ssCtrl   in ShiftState then Result := Result or MK_CONTROL;
  if ssLeft   in ShiftState then Result := Result or MK_LBUTTON;
  if ssRight  in ShiftState then Result := Result or MK_RBUTTON;
  if ssMiddle in ShiftState then Result := Result or MK_MBUTTON;
  if ssExtra1 in ShiftState then Result := Result or MK_XBUTTON1;
  if ssExtra2 in ShiftState then Result := Result or MK_XBUTTON2;
  if ssDouble in ShiftState then Result := Result or MK_DOUBLECLICK;
  if ssTriple in ShiftState then Result := Result or MK_TRIPLECLICK;
  if ssQuad   in ShiftState then Result := Result or MK_QUADCLICK;
end;

I don't see here "if ssAlt in ...." line
--
Regards,
Alexey

--
Michael Van Canneyt via Lazarus
2018-10-16 06:56:22 UTC
Permalink
Post by AlexeyT via Lazarus
function ShiftStateToKeys(ShiftState: TShiftState): PtrUInt;
begin
  Result := 0;
  if ssShift  in ShiftState then Result := Result or MK_SHIFT;
  if ssCtrl   in ShiftState then Result := Result or MK_CONTROL;
  if ssLeft   in ShiftState then Result := Result or MK_LBUTTON;
  if ssRight  in ShiftState then Result := Result or MK_RBUTTON;
  if ssMiddle in ShiftState then Result := Result or MK_MBUTTON;
  if ssExtra1 in ShiftState then Result := Result or MK_XBUTTON1;
  if ssExtra2 in ShiftState then Result := Result or MK_XBUTTON2;
  if ssDouble in ShiftState then Result := Result or MK_DOUBLECLICK;
  if ssTriple in ShiftState then Result := Result or MK_TRIPLECLICK;
  if ssQuad   in ShiftState then Result := Result or MK_QUADCLICK;
end;
I don't see here "if ssAlt in ...." line
There does not need to be if there is no corresponding MK_nnn value ?
What would be the MK_nnn value for ssAlt ?

Michael.
AlexeyT via Lazarus
2018-10-16 07:23:50 UTC
Permalink
Post by Michael Van Canneyt via Lazarus
There does not need to be if there is no corresponding MK_nnn value ?
What would be the MK_nnn value for ssAlt ?
We can  add in, LCLType.pp:

const
  // Mouse message key states
  MK_LBUTTON  = 1;
  MK_RBUTTON = 2;
  MK_SHIFT = 4;
  MK_CONTROL = 8;
  MK_MBUTTON = $10;
  MK_XBUTTON1 = $20;
  MK_XBUTTON2 = $40;
  // following are "virtual" key states
  MK_DOUBLECLICK = $80;
  MK_TRIPLECLICK = $100;
  MK_QUADCLICK = $200;
--
Regards,
Alexey

--
Michael Van Canneyt via Lazarus
2018-10-16 07:32:52 UTC
Permalink
Post by Michael Van Canneyt via Lazarus
There does not need to be if there is no corresponding MK_nnn value ?
What would be the MK_nnn value for ssAlt ?
const
  // Mouse message key states
  MK_LBUTTON  = 1;
  MK_RBUTTON = 2;
  MK_SHIFT = 4;
  MK_CONTROL = 8;
  MK_MBUTTON = $10;
  MK_XBUTTON1 = $20;
  MK_XBUTTON2 = $40;
  // following are "virtual" key states
  MK_DOUBLECLICK = $80;
  MK_TRIPLECLICK = $100;
  MK_QUADCLICK = $200;
I understand that, but what additional value makes sense ?

Michael.
AlexeyT via Lazarus
2018-10-16 17:29:01 UTC
Permalink
Value $400 makes sense.
And also this must be changed then:
function KeysToShiftState(Keys: PtrUInt): TShiftState;
it uses same constants.

Alex
--
Dmitry Boyarintsev via Lazarus
2018-10-16 17:37:48 UTC
Permalink
On Tue, Oct 16, 2018 at 1:29 PM AlexeyT via Lazarus <
Post by AlexeyT via Lazarus
Value $400 makes sense.
function KeysToShiftState(Keys: PtrUInt): TShiftState;
it uses same constants.
The value you're looking for is $20000000
It's being used/supported by all current widgetsets

Loading...