Jump to content

ChrisChuah

Members
  • Content Count

    121
  • Joined

  • Last visited

Posts posted by ChrisChuah


  1. Thank you very much for everyone suggestion.

    However, my timeline for this project is quite tight. need to finish within 1 month for this gantt chart control with drag and drop, drag and move etc.

    If i need to do it, then it must be a ready to use component whereby i can just implement the logic instead of focusing on the user interface with drag and drop and refresh issues

    I am now trying out the TMS FNC Gantt Chart as well as VCL Gantt Component

    TMS FNC Gantt Chart is not able to have 3 level type of top axis. I am able to create with 2 level but the drag and drop of task is quite rough. cant make it to drag and move per pixel or per minute

    VCL Gantt Component, i am still stuck in how to create the 3 level type of top axis also

     

    As for Jedi TimeLine, i did not have time to look into it yet.


  2. On 6/21/2025 at 9:25 PM, Keesver said:

    Yes, I understand. Our software is built using Delphi and we have all the components needed to create professional PM software with Gantt's, Pert, scheduling and more. We have been selling such components since '96 but left the supplier market some time ago. However we are still open to supply these components to other Delphi developers. How? That needs to be discussed.

     

    Please send a message to the mail address provided, I can show you what we have.

    what is your email? u can send it to me chuahyen at yahoo dot com


  3. I would like to enquire if there is any Gantt chart or visual component is able to provide such view whereby the top title is 3 layer showing the date, followed by hour followed by interval of 20 minutes
    Also for each group e.g. T1-Island 3 Row E, it will show the number of task that is under each 20 minutes block

    At 07:00 to 07:20, it will have a task [9] in brown which is actually a total of all the task below 6 x SQ761 and 3 x 8M360

     

    regards

    chris

    Screenshot 2025-06-20 at 16.26.12.png


  4. Hi Remy

    I think i got it.

    I need to create an instance of the TThriftHashSetImpl but the variable is an Interface itself

     

    var

      hashset : IThriftHashSet<TProduct_info_type>;

      product_info : IProduct_info;

     

    begin

      hashset := TThriftHashSetImpl<TProduct_info_type>.create;

      hashset.add(TProduct_Info_type.terminal_packaged_part_number);

      hashset.add(TProduct_info_type.terminal_packaged_serial_number);

      product_info := product_get_info(hashset);

    end;

     

    Another question:

    How can i free or release these instances that i have created?

    Wont there be any memory leak?

     

    regards

    chris

     


  5. Hi Remy

     

    the function 

            function product_get_info(const info_type: IThriftHashSet<TProduct_info_type>): IProduct_info;
     

    requires a parameter which is an Interface of IThriftHashSet<TProduct_info_type>

     

      TProduct_info_type = (
        terminal_packaged_part_number = 0,
        terminal_packaged_serial_number = 1,
        terminal_packaged_comm_name = 2,
        sensor_packaged_part_number = 3,
        sensor_packaged_serial_number = 4,
        specific_part_number = 5,
        license_identifier = 6,
        license_name = 7,
        mac_address_ethernet = 8,
        mac_address_wifi = 9,
        mac_address_3g_modem = 10,
        RFID_board_type = 11,
        terminal_cie_part_number = 12,
        travel_totem_serial_number = 13,
        travel_totem_product_number = 14
      );

     

    and this IThriftHashSet has a class like this

     

    ======== Start =======

      IThriftHashSet<T> = interface(IThriftContainer)
        ['{733E2B57-C374-4359-BBD5-2B9CD8DF737C}']
        function GetEnumerator: TEnumerator<T>;
        function GetCount: Integer;
        property Count: Integer read GetCount;
        function Add( const item: T) : Boolean;
        procedure Clear;
        function Contains( const item: T): Boolean;
        function Remove( const item: T): Boolean;
      end;

      // compatibility
      IHashSet<T> = interface( IThriftHashSet<T>)
        ['{C3CF557F-21D9-4524-B899-D3145B0389BB}']
      end deprecated 'use IThriftHashSet<T>';


      {$WARN SYMBOL_DEPRECATED OFF}
      TThriftHashSetImpl<T> = class( TInterfacedObject, IHashSet<T>, IThriftHashSet<T>, IThriftContainer, ISupportsToString)
      {$WARN SYMBOL_DEPRECATED DEFAULT}
      strict private
        FDictionary : TDictionary<T,Byte>;  // there is no THashSet<T> in older Delphi versions
      strict protected
        function GetEnumerator: TEnumerator<T>;
        function GetCount: Integer;
        property Count: Integer read GetCount;
        function Add( const item: T) : Boolean;
        procedure Clear;
        function Contains( const item: T): Boolean;
        function Remove( const item: T): Boolean;
      public
        constructor Create( const aCapacity: Integer = 0);  overload;
        constructor Create( const aCapacity: Integer; const aComparer : IEqualityComparer<T>);  overload;
        destructor Destroy; override;
        function ToString : string;  override;
      end;

    ====== End =====

     

     

    How can i call this function product_get_info??

     

    How to pass a IThriftHashSet into this function as parameter?

    The only thing i can see is to use the TThriftHashSetImpl<T> constructor to create

    After which, i cannot use the Add function as it is strict protected.

     

    Is there a example or sample which i can read on how to pass interface as parameters to functions for Delphi?

     

    please advise

     

    regards

    chris

     

     

     


  6. Hi

    Currently, i am having problem with using Interfaces in Delphi 

     

    I need to call this function

            function product_get_info(const info_type: IThriftHashSet<TProduct_info_type>): IProduct_info;

     

    However, the parameters and return result are interfaces

    ====== Start IThriftHashSet ======

      // compatibility
      IHashSet<T> = interface( IThriftHashSet<T>)
        ['{C3CF557F-21D9-4524-B899-D3145B0389BB}']
      end deprecated 'use IThriftHashSet<T>';


      {$WARN SYMBOL_DEPRECATED OFF}
      TThriftHashSetImpl<T> = class( TInterfacedObject, IHashSet<T>, IThriftHashSet<T>, IThriftContainer, ISupportsToString)
      {$WARN SYMBOL_DEPRECATED DEFAULT}
      strict private
        FDictionary : TDictionary<T,Byte>;  // there is no THashSet<T> in older Delphi versions
      strict protected
        function GetEnumerator: TEnumerator<T>;
        function GetCount: Integer;
        property Count: Integer read GetCount;
        function Add( const item: T) : Boolean;
        procedure Clear;
        function Contains( const item: T): Boolean;
        function Remove( const item: T): Boolean;
      public
        constructor Create( const aCapacity: Integer = 0);  overload;
        constructor Create( const aCapacity: Integer; const aComparer : IEqualityComparer<T>);  overload;
        destructor Destroy; override;
        function ToString : string;  override;
      end;

    ===== End IThriftHashSet ====

     

    === Start IProduct_Info ====

      IProduct_info = interface(IBase)
        ['{F9E8E7FC-6023-48F0-940E-4B2EBC9A2258}']
        function GetTerminal_packaged_part_number_UTF8: System.UnicodeString;
        procedure SetTerminal_packaged_part_number_UTF8( const Value: System.UnicodeString);
        function GetTerminal_packaged_serial_number_UTF8: System.UnicodeString;
    ...

    ...

    end;

     

      TProduct_infoImpl = class(TInterfacedObject, IBase, ISupportsToString, IProduct_info)
      private
        FTerminal_packaged_part_number_UTF8: System.UnicodeString;
        FTerminal_packaged_serial_number_UTF8: System.UnicodeString;
    ...

    ...

    end

    ==== End IProduct_info ====

     

    When i create a variable

    hashset = TThriftHashSetImpl<TProduct_info_type>.create;

    I could not call hashset.add(TProduct_info_type)

     

    Also how do i handle the return result IProduct_info?

    Should i also call 

    product_info := TProduct_infoImpl.create??

     

    Please help as i am not used to calling interfaces in Delphi

     

    regards

    chris

     

     


  7. I just installed 12.1 community edition and try to install JEDI Visual Componnent Library 2023.11

    It gave me an error that i must install jcl first.

    When i tried to uninstall it, it said that the jvclInstall.exe is missing.

     

    I downloaded jvcl from github and try to install locally, then it showed that this version of the product does not support command line compiling. aborting

     

    How can i install JEDI component into the 12.1 community edition via getit.

     

    Now, i removed the JEDI Component library and JEDI Visual component library from the CategoryRepository directory.

    GetIt now showed the install button and when i click on it, it state that JEDI is already installed.

     

    sigh..

    anyone can advise on this?

     


  8. I have re-downloaded the PAServer for Delphi 11.1 on MacOS and updated the XCode to 15.2

    However, when i tried to run the mac app in debug mode, it gave me this error

     

    dyld[9049]: Library not loaded: /System/Library/Frameworks/Python.framework/Versions/2.7/Python

      Referenced from: <06D97208-31C1-324C-94F5-B231E630BF31> /Applications/PAServer-22.0_11.1.app/Contents/MacOS/lldb-x86_64/lib/liblldb.3.8.0.dylib

      Reason: tried: '/System/Library/Frameworks/Python.framework/Versions/2.7/Python' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/System/Library/Frameworks/Python.framework/Versions/2.7/Python' (no such file), '/System/Library/Frameworks/Python.framework/Versions/2.7/Python' (no such file, not in dyld cache)

     

    Is there an updated PAserver for 11.1 to fix this python link problem.

    The python frame work is found in /Library/Frameworks/Python.framework/Versions/2.7/Python rather than the /System library.

    I cannot create a link within the /System library as it is forbidden by Apple. 

     

    Please help

     

    regards

    chris

     


  9. it seems that if i put a web browser on Form2 and Form2 is run-time called to be created, then there will be an access violation on RecreateBrowser function called.

    The way to go about it is to create a browser onCreate form2 function and insert the webbrowser component into it

    Not sure if anyone is having this problem


  10. Hi

    Is there a function in Indy whereby i could get the Mac address of the interface card?

    Or is there any function in Delphi whereby i could obtain the MAC address of the NIC card for FMX app?

     

    regards

    chris


  11. Oh Yes, now the browser can crash my application when i use a Navigate function. 

    I place a try except block on the navigate function but somehow there is no exception error.

    Where can i get any information about the crash?

     

    regards

    chris


  12. On 11/15/2023 at 12:08 PM, Brian Evans said:

    The dbxora.dll and midas.dll files are available in both the 32-bit and 64-bit redistributable directories.  

     

    For example for Delphi 12 the redist directories for Windows are:  

    C:\Program Files (x86)\Embarcadero\Studio\23.0\Redist\win32

    C:\Program Files (x86)\Embarcadero\Studio\23.0\Redist\win64

    HI 

    By right, the delphi 64 bits applications that uses Oracle DBExpress should use the dbxora.dll and midas.dll.

    However, when i deployed using those dll, my application would not be able to connect to the oracle database.

    Instead i have to add the dbexpora.dll which is 32bit dll that I have been using in Delphi 6.

    Once i added that dbexpora.dll file into my application folder, my application is able to connect to the Oracle database.

     

    Anyone has any idea why the dbexpora.dll is still being used?

    Maybe next time i should ditch DBExpress and move on to other drivers instead. sigh

     

    regards

    chris

     


  13. Hi

    When i use the deployment Featured Files for 64 bit application, the DBExpress Oracle Driver will use dbxora.dll and MIDAS Library will use midas.dll.

    However, when i copied these 2 files together with my exe application and run on a newly installed Win 10 Pro pc, the application would not connect to the database.

    I have already set the Net Configuration for Oracle Client and it is able to connect to the Oracle database server.

    However, previously when i deployed my 32 bit application using Delphi 6, i would use dbexpora.dll and when i add this file to the newly installed Win 10 Pro pc, my application is able to connect to the database.

    Why is this file dbexpora.dll used? Its a 32 bit dll if i am not wrong.

    Is there something that i did not configure correctly?

     

    regards

    chris

    Screenshot 2023-11-15 at 11.57.02 AM.png

    Screenshot 2023-11-15 at 11.58.01 AM.png

×