Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus / 2018-10

Forms.pp function error?

7 messages · 3 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

AlexeyT
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

Reply by email

Michael Van Canneyt
to AlexeyT
AlexeyT wrote 16 lines
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.

Reply by email

AlexeyT
to Michael Van Canneyt
Michael Van Canneyt wrote
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

Reply by email

Michael Van Canneyt
to AlexeyT
AlexeyT wrote 20 lines
On 16.10.2018 09:56, Michael Van Canneyt via Lazarus wrote: > 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;

I understand that, but what additional value makes sense ?

Michael.

Reply by email

Dmitry Boyarintsev
to AlexeyT

On Tue, Oct 16, 2018 at 1:29 PM AlexeyT via Lazarus <

Show quoted text 7 lines
wrote: Value $400 makes sense. And also this must be changed then: 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 -------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20181016/6a50b792/attachment.html>

Reply by email

AlexeyT

As pointed by Dmitry B, and checked by myself in LCL, MK_ALT must be defined in LCLType.pp as $20000000. For ex, this is sample from qtwidgets.pas:

   if (ModifierState and MK_SHIFT)  0 then
     Msg.State := [ssShift];
   if (ModifierState and MK_CONTROL)  0 then
     Msg.State := [ssCtrl] + Msg.State;
   if (ModifierState and $20000000)  0 then
     Msg.State := [ssAlt] + Msg.State;

patch added.

Regards, Alexey -------------- next part -------------- A non-text attachment was scrubbed... Name: mkalt.diff Type: text/x-patch Size: 402 bytes Desc: not available URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20181026/3425780d/attachment.bin>

Reply by email