Jump to content

shineworld

Members
  • Content Count

    52
  • Joined

  • Last visited

Community Reputation

6 Neutral

About shineworld

  • Birthday 05/05/1970

Technical Information

  • Delphi-Version
    Delphi 10.4 Sydney

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. shineworld

    Change Scroll bar color

    Hi all, I've already used Themes, with satisfaction, on some little applications. In a big application, I haven't used the TStyleManager.Engine because too hard to re-design the entire application, but I would like to have a way to style only the scrollbars colors of a TSynEdit component. It is, in some way, possible to add ONLY the TScrollingStyleHook behavior in a program without the Style engine running? Thank you for your suggenstions!
  2. Hi all, I've many TFrame objects which can implement one or more interfaces, depends. There is a Delphi way to check if a frame implements an interface? E.g: procedure UpdateTheme(Obj: TFrame); begin if "Obj implements ITheme" then (Obj as ITheme).UpdateTheme; end;
  3. shineworld

    Touch Screen VCL

    For every component is possible, in gesture options, disable the long press event (PRESSANDHOLD) to not enter in "simulated right mouse click" and perform what you need. You can also perform that in WndProc (for e.g. in custom components) when you use old Dephi versions (e.g BDS2006 or any version with don't have gesture management): procedure TAggButton.WndProc(var Message: TMessage); const WM_TABLET_DEFBASE = $02C0; WM_TABLET_QUERYSYSTEMGESTURESTATUS = (WM_TABLET_DEFBASE + 12); const TABLET_DISABLE_PRESSANDHOLD = $00000001; TABLET_DISABLE_PENTAPFEEDBACK = $00000008; TABLET_DISABLE_PENBARRELFEEDBACK = $00000010; TABLET_DISABLE_TOUCHUIFORCEON = $00000100; TABLET_DISABLE_TOUCHUIFORCEOFF = $00000200; TABLET_DISABLE_TOUCHSWITCH = $00008000; TABLET_DISABLE_FLICKS = $00010000; TABLET_ENABLE_FLICKSONCONTEXT = $00020000; TABLET_ENABLE_FLICKLEARNINGMODE = $00040000; TABLET_DISABLE_SMOOTHSCROLLING = $00080000; TABLET_DISABLE_FLICKFALLBACKKEYS = $00100000; TABLET_ENABLE_MULTITOUCHDATA = $01000000; {** * NOTE * ==== * https://docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-cursorinfo * * CI.flags: * * 0 The cursor is hidden. * CURSOR_SHOWING 0x00000001 The cursor is showing. * CURSOR_SUPPRESSED 0x00000002 Windows 8: The cursor is suppressed. * This flag indicates that the system is not drawing the cursor because the user is * providing input through touch or pen instead of the mouse. * * Minimum supported client Windows 2000 Professional [desktop apps only]. * **} function IsMouseCursorVisible: Boolean; var CI: TCursorInfo; begin CI.cbSize := SizeOf(CI); Result := GetCursorInfo(CI) and (CI.flags = CURSOR_SHOWING); end; begin case Message.Msg of CM_TEXTCHANGED: Invalidate; CM_VISIBLECHANGED: begin Invalidate; end; CM_ENABLEDCHANGED: begin FSVGSupportChanged := True; Invalidate; end; CM_MOUSEENTER: begin if not FMouseInControl then begin FMouseInControl := IsMouseCursorVisible; if FMouseInControl then Invalidate; end; end; CM_MOUSELEAVE: begin if FMouseInControl then begin FMouseInControl := False; Invalidate; end; end; WM_ERASEBKGND: begin Message.Result := 1; Exit; end; WM_MOUSELEAVE: begin end; WM_TABLET_QUERYSYSTEMGESTURESTATUS: begin Message.Result := ( TABLET_DISABLE_PRESSANDHOLD or TABLET_DISABLE_PENTAPFEEDBACK or TABLET_DISABLE_PENBARRELFEEDBACK or TABLET_DISABLE_TOUCHUIFORCEON or TABLET_DISABLE_TOUCHUIFORCEOFF or TABLET_DISABLE_TOUCHSWITCH or TABLET_DISABLE_FLICKS or TABLET_DISABLE_SMOOTHSCROLLING or TABLET_DISABLE_FLICKFALLBACKKEYS ); Exit; end; end; inherited WndProc(Message); end; In this case you have also to enable touch management with: procedure CreateWnd; override; procedure DestroyWnd; override; procedure TAggButton.CreateWnd; begin inherited; if csLoading in ComponentState then Exit; if not FTouchInitialized and TOSVersion.Check(6, 1) and RegisterTouchWindow(Handle, 0) then FTouchInitialized := True; end; procedure TAggButton.DestroyWnd; begin if FTouchInitialized then begin UnregisterTouchWindow(Handle); FTouchInitialized := False; end; inherited; end;
  4. shineworld

    Gesture igZoom works in FMX but not in VCL

    FOUND !!! VCL and FMX gesture managements are different. I've found an document that say: https://docwiki.embarcadero.com/RADStudio/Sydney/en/Gesturing_Overview
  5. shineworld

    Gesture igZoom works in FMX but not in VCL

    Hi all, I'm trying to use igZoom gesture in a VCL application but doesn't work. It works perfectly in an FMX application. 1] Create an FMX empty application for WIN. 2] Add GestureManager 3] Add a Panel and assign the GestureManager 4] Add igZoom feature in Panel Touch Interactive Gestures 5] Add an event handler for Panel OnGesture 6] Increment a counter and show in the caption for every OnGesture event: var Count: Integer; procedure TForm8.Panel1Gesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean); begin Inc(Count); Caption := IntToStr(Count); end; 1] Create a VCL empty application 2 to 6 as made for FMX application At this point the two applications, FMX and VCL are the same. Running FMX application when I put two fingers on the touch screen the zoom in/out movements creates a continuous flow of OnGesture: OK works fine. Running VCL application when I put two fingers on the touch screen the zoom in/out movements don't create OnGesture event but is created only when I remove the fingers. I don't know why FMX works: till I'm zooming I've got a lot of OnGesture events to track the zoom IN/OUT activity, but with VCL I've got ONLY one event with ID = 0 when I leave the fingers from the touch screen. Thank you for help !!!
  6. shineworld

    Interfacing Unicode string to DLL PAnsiChar

    Thanks all for the help. The suggested way working perfectly !!!
  7. Hi to all, I've moved a lot of code from BDS2006 to Sydney and now it's time to finish DLL interfacing. Support DLLs are at moment in AnsiString so input parameters are as PAnsiChar, but overall calling code is ready to use Unicode strings (I'm waiting the right time to convert the DLL). When strings are emptied a nil pointer must be sent to DLL arguments. As a workaround I've two solutions, one fine to see but I don't know if will work in all cases. The second way could work fine always: { first mode } function StringToAnsiCPointer(const S: string): PAnsiChar; inline; function StringToAnsiCPointer(const S: string): PAnsiChar; begin if Length(S) = 0 then Result := nil else Result := PAnsiChar(AnsiString(S)); end; function CompilerEncryptFile(const TextFileName: string; Key: TCNCEncryptKey; const EncryptedFileName: string): Longint; begin Result := _CompilerEncryptFile // DLL CALL ( StringToAnsiCPointer(TextFileName), @Key, StringToAnsiCPointer(EncryptedFileName) ); end; { SECOND MODE } function CompilerEncryptFile(const TextFileName: string; Key: TCNCEncryptKey; const EncryptedFileName: string): Longint; begin Result := _CompilerEncryptFile ( IIf(Length(TextFileName) = 0, nil, PAnsiChar(AnsiString(TextFileName))), @Key, IIf(Length(EncryptedFileName) = 0, nil, PAnsiChar(AnsiString(EncryptedFileName))) ); end; My dubs in the first mode are concerning the LIFE of temporary cast to AnsiString in the line: PAnsiChar(AnsiString(S) as a result of the external function. Do you have some ideas about it?
  8. Hi developers, I am moving a project from BDS2006 to Sydney. I have strange behavior when debugging with Sydney, the program slows down a lot, and becomes almost unusable. In BDS2006 there is no noticeable difference between running a program in debug or without debugging which helps a lot in the development. In Sydney, this is not the case, and to understand if some changes bring about performance improvements or not, all that remains is to run without debugging and disseminate the log code ... Frustrating. I am attaching a video that highlights how the behavior changes between the two ways of running a program. When running in Sydney the system becomes so slow that the thread sending data via TCP / IP to the connected device cannot keep up with the data request. Everything is slowed down and jerky. Do you have any idea what might go wrong? PS: During the installation of the IDE I also installed the Parnassus Debugger, doesn't this considerably increase the load in the execution of programs in Debug? I obviously use a lot of threads but not a lot to bring the process to its knees. As you can see, when it is not debugged, the CPU used by the program aligns itself on 1-2%. Thanks in advance for the suggestions. https://youtu.be/eLTVhPkn0NA
  9. shineworld

    TTouchKeyboard layout

    Yes, I've already tried that, but, end-user will have a touch keyboard to enter code in the display panel + a physical keyboard (Japanese or Russian in this case) to enter texts in native Unicode mode. I need to have Windows working with Japanese or Russian native user language but the touch keyboard with the US for fast code editing in the display keybaord. I'm trying to understand TTouchKeyboard to "overload" how works o I will move to a custom keyboard component created from zero.
  10. shineworld

    TTouchKeyboard layout

    This is the "English" layout that I mean: I can obtain this layout "forcing" the entire system to use US keyboard layout language instead of "IT" with: ActivateKeyboardLayout(67699721 {en-US}, 0); Application.ProcessMessages; TouchKeyboard1.Redraw; but I wouldn't change how the physical keyboard works, overall the native customer keyboard, for eg. is Japanese and would use a physical keyboard to edit strings, but only the TTouchKeyboard component layout.
  11. shineworld

    TTouchKeyboard layout

    Hi all. I'm on a PC with the Italian language and an Italian true keyboard. In the VCL software, I would like to use the TTouchKeyboard. Is a technical software where I need to force TTouchKeyoard to display US keyboard layout, because chars as [ ] | # etc are mandatory instead of accented èéòàù of specific Italian layout. I've imported the Vcl.Touch.Keyboard.pas in project to add minor graphics changes, which works fine, but I'm not able to understand how to force English layout. I've tried to change CreateKeyboard method to say "use alwyas 'en' but doesn't works. function TCustomTouchKeyboard.CreateKeyboard(const Language: string): Boolean; var Index, RowIndex, ColIndex: Integer; Button: TCustomKeyboardButton; LeftPosition, TopPosition: Integer; KeyboardState: TKeyboardState; KeyboardLayout: TVirtualKeyLayout; Row: TVirtualKeys; FoundCaps: Boolean; _Language: string; begin Result := False; FoundCaps := False; for Index := 0 to FButtons.Count - 1 do FButtons[Index].Free; FButtons.Clear; FDeadKey := VKey(-1, -1); TopPosition := 0; _Language := 'en'; if _Language <> '' then FLanguage := _Language; The result is always: There is a way to force it ?
  12. shineworld

    Disable press and hold in touch screen for a control

    For BDS2006, I've found this solution to disable the press and hold only to required components. For Sydney there is Touch.TabletOptions does the same things. procedure TAggKnob.WndProc(var Message: TMessage); const WM_TABLET_DEFBASE = $02C0; WM_TABLET_QUERYSYSTEMGESTURESTATUS = (WM_TABLET_DEFBASE + 12); const TABLET_DISABLE_PRESSANDHOLD = $00000001; TABLET_DISABLE_PENTAPFEEDBACK = $00000008; TABLET_DISABLE_PENBARRELFEEDBACK = $00000010; TABLET_DISABLE_TOUCHUIFORCEON = $00000100; TABLET_DISABLE_TOUCHUIFORCEOFF = $00000200; TABLET_DISABLE_TOUCHSWITCH = $00008000; TABLET_DISABLE_FLICKS = $00010000; TABLET_ENABLE_FLICKSONCONTEXT = $00020000; TABLET_ENABLE_FLICKLEARNINGMODE = $00040000; TABLET_DISABLE_SMOOTHSCROLLING = $00080000; TABLET_DISABLE_FLICKFALLBACKKEYS = $00100000; TABLET_ENABLE_MULTITOUCHDATA = $01000000; var P: TPoint; begin case Message.Msg of WM_TABLET_QUERYSYSTEMGESTURESTATUS: begin Message.Result := ( TABLET_DISABLE_PRESSANDHOLD or TABLET_DISABLE_PENTAPFEEDBACK or TABLET_DISABLE_PENBARRELFEEDBACK or TABLET_DISABLE_TOUCHUIFORCEON or TABLET_DISABLE_TOUCHUIFORCEOFF or TABLET_DISABLE_TOUCHSWITCH or TABLET_DISABLE_FLICKS or TABLET_DISABLE_SMOOTHSCROLLING or TABLET_DISABLE_FLICKFALLBACKKEYS ); P.X := TWMMouse(Message).XPos; P.Y := TWMMouse(Message).YPos; P := ScreenToClient(P); MouseDown(mbLeft, [], P.X, P.Y); Exit; end; end; inherited WndProc(Message); end;
  13. shineworld

    PaxCompiler

    I'm used to PascalScript from RemObjects. It is a great extendable environment. I'm using it with OpenGL and 2D graphics support... https://github.com/remobjects/pascalscript
  14. I'm creating some UI controls using AggPasMod in a touchscreen application. Some of these controls don't have the Press and Hold feature to simulate Right Mouse click. How to disable this gesture option in them? Is the square visible when I keep pressed touch for a while in the knob. Thank you in advance for your replies. 2021-04-02 09-08-24.7z
  15. shineworld

    TTouchKeyboard when in modal dialog

    Doesn't works also when edit fields are focused. Seems that I've to move my TProgramSettingsForm contents, place it in a TFrame and remain in MainForm where TTouchKeyboard is instanced, or perhaps I've to free the TTouchKeyboard from Main form, re-create it in the TProgramSettings modal Form and assign as Parent the container in MainForm so look doesn't change but is in same message pool.
×