Jump to content

Vandrovnik

Members
  • Content Count

    583
  • Joined

  • Last visited

  • Days Won

    6

Posts posted by Vandrovnik


  1. 11 minutes ago, Lajos Juhász said:

     

    I never saw this kind of code, I saw:

     

    if Assigned(obj) then

      obj.free;

    Most of the time I only saw that a "developer" refuses to use free instead of FreeAndNil.

     

     

    I also use FreeAndNil - if I ever forget that an object was already freed with .Free, app might be working fine or give an AV "sometimes". When I use FreeAndNil and by mistake try to use freed object later, I am sure it always gives AV. I would not use FreeAndNil in time-critical parts, but there are almost none in my apps.

    • Like 1

  2. 13 hours ago, Anders Melander said:

    Nice. I believe you can just use the FindDragTarget VCL function to find the control under the cursor.

     

    The current algorithm looks for an exact match on the control name and then iterates backward (i.e. negative row index increment) from the least property until it finds a visible property. It does not consider the Status of the property since it doesn't know what you're doing or why you want to select the item. I'd like to keep it that way.
    If you filter the Status column to exclude "Don't translate" then these properties will not be selected and it will behave like you want. Since you're not interested in the "Don't translate" items anyway there's no point in displaying them.

    Thank you, I did not realize that it is possible to use a filter 🙂 That will be enough.


  3. On 3/6/2022 at 10:10 PM, Anders Melander said:

    Now there are 🙂 Do something like this:

    
    // Via TApplicationEvents component:
    procedure TMainForm.ApplicationEventsActionExecute(Action: TBasicAction; var Handled: Boolean);
    begin
    {$ifdef DEBUG}
      TranslationManagerIntegration.TrackControl(Action);
    {$endif DEBUG}
    end;
    ...

    Note: Remove the DEVEXPRESS define in Horizon.IntegrationTest.API if you're not using that library.

    As you can see the above only uses the integration in DEBUG builds but since I'm just using WM_COPYDATA for communication it's pretty harmless if the integration is also active in RELEASE builds.

     

    It works, that is really great!

     

    I have also add a Ctrl + right-mouse-click to find labels etc.:

    procedure TdmMain.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
     var PointClient: tPoint;
         Control: tControl;
         Form: tWinControl;
     begin
     {$IFDEF PrekladyBTM}
      if (msg.message=WM_RBUTTONDOWN) and ((msg.wParam and MK_CONTROL) <> 0) then begin
       Handled:=true;
       Form:=Screen.ActiveCustomForm;
       if Form<>nil then begin
        PointClient:=Form.ScreenToClient(Mouse.CursorPos);
        Control:=Form.ControlAtPos(PointClient, true, true, true);
        if Control<>nil then TranslationManagerIntegration.TrackControl(Control);
       end;
      end;
     {$ENDIF}
    end;

     

    Just a small notice: when I need to find a control and there are more properties in BTM, BTM often selects a property with "Don't translate". Please could you change it, so that BTM tries to select a property which should be translated?

    image.thumb.png.a512a446a40961d1eb947ed392299f28.png

     


  4. If you have SynEdit from GetIt, then yes, you may get newer version of SynEdit after installing newer Delphi.

    SynHighlighterMulti.pas is on C:\Users\MyUserName\Documents\Embarcadero\Studio\22.0\CatalogRepository\SynEdit-2022.03-11\Source\Highlighters\SynHighlighterMulti.pas on my computer in Delphi 11.1.


  5. 26 minutes ago, Lainkes said:

    Thanks for your answer.

    I'm struggeling with 

    
    RozdelLdap

    What is that function? Delphi does not recognise it.

    It was my function. It takes a string in the form "cn=Valek,ou=OOOO,o=XXX" and divides it to Cn "cn=Valek" and Base "ou=OOOO,o=XXX"

    (I was dividing it using the first coma in the input string.)


  6.  

    function LdapGetAttribute(aUserFqdn: string; aAttrib: string): string;
     var Ldap: TLDAPSend;
         Attribs: tStringList;
         Cn, Base: string;
     begin
     result:='';
     Ldap:=TLDAPSend.Create;
     try
      Ldap.UserName:=Config.LdapUser;
      Ldap.Password:=Config.LdapPassword;
      Ldap.TargetHost:=Config.LdapHost;
      Ldap.TargetPort:=Config.LdapPort;
      Ldap.AutoTLS:=true;
      if Ldap.Login then begin
       if Ldap.Bind then begin
        Attribs:=tStringList.Create;
        try
         Attribs.Add(aAttrib);
         RozdelLdap(aUserFqdn, Cn, Base); // cn=Valek,ou=OOOO,o=XXX -> cn=Valek  +  ou=OOOO,o=XXX
         Ldap.Search(Base, false, '('+Cn+')', Attribs);
         if (Ldap.SearchResult.Count>0)and(Ldap.SearchResult[0].Attributes.Count>0) then begin
          result:=Ldap.SearchResult[0].Attributes[0].Text;
         end;
        finally
         FreeAndNil(Attribs);
        end;
       end;
      end;
     finally
      FreeAndNil(Ldap);
     end;
    end;

     


  7. Hello, many years ago, I have used something like this for Novell eDir:

     

    function LdapOverPrihlaseni(aUserName, aPassword: string): boolean;
     var Ldap: TLDAPSend;
     begin
     result:=false;
     if aPassword='' then exit;
     Ldap:=TLDAPSend.Create;
     try
      Ldap.UserName:=aUserName;
      Ldap.Password:=aPassword;
      Ldap.TargetHost:=Config.LdapHost; // 'novell.xxxxx.cz';
      Ldap.TargetPort:=Config.LdapPort; // '389';
      Ldap.AutoTLS:=true;
      if Ldap.Login then begin
       if Ldap.Bind then begin
        result:=true;
       end;
      end;
     finally
      FreeAndNil(Ldap);
     end;
    end;

     

    ldapsend.pas was part of Synapse.


  8. 11 minutes ago, sjordi said:

    Actually, I don't find it. It's not known from the compiler, and I have no trace whatsover of any file that looks like it besides a DCU file... but not seen
    I'm under Alexandria...

    Docwiki at Embarcadero doesn't reference it either... nor does the help...

    I think I'm missing something.

     

    In Delphi 11, it is in C:\Program Files (x86)\Embarcadero\Studio\22.0\source\rtl\common\System.StartUpCopy.pas in my installation.

    Help and doc - ehm... Did not find them.

    • Like 1

  9. 3 minutes ago, Stano said:

    No, no and no. Don't read the instructions!
    I don't know if you want to know: If you do not divide by not an integer, then you have to retype. E.g.
    CAST (1/3 AS DOUBLEPRECISSION) AS RESULT 

    Otherwise, the result will be Integer.

    This will evaluate to zero:

    SELECT CAST (1/3 AS DOUBLE PRECISION) AS RESULT FROM rdb$database

     

    This will ealuate to 0.333333333333333333:

    SELECT CAST (1 AS DOUBLE PRECISION) / 3 AS RESULT FROM rdb$database

     

    But original question is about something else (probably windowing functions).


  10. So there must be something different in your real SQL 🙂

     

    What about:

    select
     cast(cast(10 as double precision) / 0.3048 * 14.7776 as NUMERIC (18,2))
     from rdb$database a


  11. select
     cast((10.00000 / 0.3048) * 14.7776 as NUMERIC (18,2))
     from rdb$database a

     

    It works for me.

    Without the cast, there is 13 decimal places, so only 5 places is left in front of the decimal point.

     

×