Jump to content

Javier Tarí

Members
  • Content Count

    61
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by Javier Tarí


  1.  All of the following applies to VCL,; I have zero experience with FMX:

     

    You should use OnEnter, not OnMouseEnter

     

    If you want it work 100% also when the form is closed, I do this:

    Save the form Active control value on a variable

    Assign to ActiveControl another safe control (I do it eg. btnCancel.SetFocus)

    Assign again to ActiveControl the control you saved

    This way you are simulating the user leaving the edit box

     

    Another way to observe a DB field changes is the TDataSource events: when your field is changed while the dataset is in dsEdit or dsInsert state, you will get a DataChange event refering to that field (and not to nil)

     

     

     

     

     


  2. I'm planning to use MQTT to connect industrial devices (PLCs) to an ERP program running in Windows

    Never played with that, so I hope some of you could give me any advice

    The broker would be a Mosquitto

    As for the Delphi side, I need something that works without troubles, so was considering purchasing the www.esegece.com components, unless suggested otherwise

     

    Any advice would be more than welcome!

     

    Than you in advance 


  3. Thanks for answering, Remy; I'm sure it's not Indy's fault, but I'm quite lost

     

    All and every email is sent to exactly the same recipients: the email addresses are used by an automated system, always from the same "From" to the same "To", CC" and "BCC"

    All the emails are sent successfully, and arrive successfully. Some of them (5%-10%) are received twice, and never more than twice

    • I call TIdSMTP.Send once
    • The source of the repeated emails, at least as seen on Thunderbird "source code" message option, is exactly the same, even compared with a text comparer

    On the source I can see some IDs (as I said, exactly the same on both emails):

    X-Cyrus-Session-Id: llcc507-a-18474-1651934775-1-2233586116162072206

    ESMTP id 4KwVcR2Dvdz30vg

    ESMTPS id 4KwVcQ5F2Lz3072

    ESMTPA id 4KwVcQ1gtSz2t2D

     


  4. I'm having a strange issue sending messages through TSMTP

    The emails are sent to a fixed destination, and CC'd to the sender email

    Although I only send them once from program, About 5% of them are sent twice

    To increase my confussion, I've added as BCC my own email, and that email doesn't get duplicates

     

    So I'm quite lost

     

     

     


  5. The installer is failing for me.

    These are some details for my subscription;

    1dff4e56-15c6-43c1-b176-8a0b96a505bc.png.11d5eef87f97854ec925735bf8347fc9.png

     

    This is what happens when I try to install from the web installer or the ISO installer:

    11fbb227-ee9b-4909-953e-a764158c4bc4.png.8fdcb5ec9417117bbdd95dfea3ff98fe.png

     

    Just in case, I downloaded the activation file from the licensing page:

    ba6344e3-f00b-4c89-bf60-c4bcadf5f28f.thumb.png.64c416dee790ec35b41476cddff5d3fd.png

     

    and tried removing the license from licensing manager, and leting the installer use the new one

     

    Result: Delphi 10.3 and 10.4 keep running with the license, but Delphi 11 won't install

     

     

     


  6. 14 minutes ago, Dany Marmur said:

    re-writing a project using the same but newer renders a better result

    If you can, sure. I work everyday on the same project, for more than 20 years, and it can't stop evolving

    So no chance of rewriting projects here


  7. 1 hour ago, Dany Marmur said:

    Why would a solution using MVVM/MVC be (much?) better that a solution using the DB-aware pattern?

    Testing

    Greater Platform independency

    Long term, evolutive applications

     

    1 hour ago, Dany Marmur said:

    When MVVM becomes convoluted (due to real-world needs) then MVVM "components" are needed

    Same happens with DB-aware; you just have some DBaware components


  8. On 5/13/2020 at 3:16 PM, Bernard said:

    It would be great with all the record enhancements in the next version to be able to write

     

    tPoint2D = record;

     

      tPolar2D = record
        Radius: Double;
        azimuth: Double;
        function ToCartesian: tPoint2D;
      end;

     

      tPoint2D = record
        x: Double;
        y: Double;
        function ToPolar: tPolar2D;
      end;

     

    One possible solution could be allowing a two-phase declaration:

     

      tPolar2D = record
        Radius: Double;
        azimuth: Double;
      end; forward; //keyword just to say there are methods to be defined later

     

      tPoint2D = record
        x: Double;
        y: Double;
        function ToPolar: tPolar2D;
      end;

     

      tPolar2D = record finalization
        function ToCartesian: tPoint2D;
      end;


  9. There are no MVC or MVVM frameworks on Delphi, other than the DMVCframework, wich I believe is not thought for Windows UI apps

    And anyway, that kind of frameworks are not oriented to let a form use a TDataset or a TDatasource

    So IMHO, as of today, RAD and MVC/MVVM are not friends

    • Like 1

  10. Thank you; finally understood it

    Ofcourse, it is a BPL registering the components and some property editors, all of them working

     

    Following your advice, I've solved it this way:

    var
      ModuleServices: IOTAModuleServices;
      FFormEditor: IOTAFormEditor;
      NTAFormEditor: INTAFormEditor;
      FormModule: IOTAModule;
      aFormDesigner: IDesigner;
    begin
      aFormDesigner:=nil;
      ModuleServices := BorlandIDEServices as IOTAModuleServices;
      if Assigned(ModuleServices) then begin
        FormModule := ModuleServices.FindFormModule(Self.Owner.Name);
        if assigned(FormModule) then begin
          FFormEditor := FormModule.GetModuleFileEditor(FormModule.GetModuleFileCount - 1) as IOTAFormEditor;
          if Supports(FFormEditor, INTAFormEditor, NTAFormEditor) then
            aFormDesigner:=NTAFormEditor.GetFormDesigner;
        end;
      end;
      //Now you just select the column, i.e.:
      if Assigned(aFormDesigner) then
        aFormDesigner.SelectComponent(Column(ACol))
    end;

    Next one also works, but I'm not sure if it should work, so will keep the first one

    var
      aFormDesigner: IDesigner;
      aForm: TCustomForm;
    begin
      AForm:=GetParentForm(Self);
      If not Supports(aForm.Designer,IDesigner,aFormDesigner) Then
        aFormDesigner:=nil;
      if Assigned(aFormDesigner) then begin
        aFormDesigner.SelectComponent(Column(ACol));
    end;

     


  11. 1 hour ago, David Hoyle said:

    I'm not sure I understand correctly what you are trying to do here but the Open Tools API can provide you access to the IDesigner from INTAFormEditor.GetFormDesigner. You can get the INTAFormEditor by querying the IOTAModule interface for the form.


    Don't thik I understood you.. Do you mean something as this?

    ((Form as IOTAmodule) as INTAFormEditor).GetFormDesigner

     


  12. Short: At design time, How can I get the IDesigner interface for a given form?

     

    Long:

    I have a VCL DBGrid-kind component developed for D5 and working fine all the way up to D10.4.1, except for one thing

    At design time, when I clic on a column header, it should select on the Object Inspector the TCollectionItem descendant for that column

    In D5, it was as easy as finding the form owning the DBGrid-kind, and then using FDesigner.SelectComponent(TheColumn);

    But now the form has IDesigner: IDesignFormHook, so I don't know how to do a SelectComponent

     

    Thanks in advance


  13. Unless you really need Enterprise, I would go with UniDac

     

    If you decide to go with UniDAC, consider making wrapper components wich, depending on a $DEFINE, would inherit from FireDAC or from UniDAC, and then substitute all your current FD components with those

     

    That way, your app will always be ready for both FD and UD. So if you later decide to go with Enterprise and come back to FireDAC, you would not need to change a single line of code on your sources

     

    That's pretty much my line of work right now

×