Jump to content

Lajos Juhász

Members
  • Content Count

    1078
  • Joined

  • Last visited

  • Days Won

    15

Posts posted by Lajos Juhász


  1. Something is blocking the file(s) from writing. Check out for viruses and settings in applications that could lock the file, is it a shared folder? First step could be to add the folder to the antivrus exception folders lists to keep it locking the files there.


  2. 54 minutes ago, Squall_FF8 said:

    Are you talking for Aggregates in general, or my example of use?

     

    in general, when using with you can never sure to which object you are assigning a value. It can work in one version of Delphi and break in the next one. You can always write:

     

    var
      a: TFDAggregate;
    begin
      if Qry.Aggregates.Count = 0 then
      begin
         a:=Qry.Aggregates.Add;
         a.Expression := 'COUNT(Town)';
         a.Active := True;
         a.Name:='NoName';
         Qry.AggregatesActive := true;
      end;
    end;

     


  3. First of all do not use with it is always a bad idea.

     

    You are not setting the name property for the aggregate object.

     

    Edit. I have checked even the examples on docwiki are wrong. 

    • Thanks 1

  4. 37 minutes ago, Patrick PREMARTIN said:

    It's probably done on the commit comment with an internal ticket number. No reason to put it in the source file on the comment visible by the public (= us).

     

    Most probably yes. It would be easier if we could get that information. I do hate when on codebase I am working on changes like this does not have a comment with a proper description or ticket number. Searching in repository for the specific change can be time consuming.


  5. 10 minutes ago, Lars Fosdal said:

    But you are still blocking, if looping around a wait.
    Are you going to put a ProcessMessages in that loop?

     

    The question was whether it is possible to check if the future is completed or not. Method Wait can be used to achieve that. (The design of wait could be improved to support non-blocking call, but we can argue if a couple of ms delay is significant or not.) 

     

    Nobody mentioned that the future is going to be used in the main thread. Whenever ProcessMessages should be used or process paint messages depends on how long the calculation should take. If it is under a minute or the application should be blocked during the life of the method, it should not be used.

     


  6. 5 minutes ago, bravesofts said:

    here is no callback in tfuture to use unless monitoring her status with while loop which also freeze the app

     

    That is the idea behind future to do something until you definitely need the result of the future. If you want to check if the future is finished you can use the wait method.


  7. The answer is the same as for the previous question you have to change the StyledSettings. In this case you are changing the Family and Style thus you have to remove those elements from the set, you do not change the Style of the font.

     

    You can replace:

     

    L1.StyledSettings:=L1.StyledSettings-[TStyledSetting.Style];
    L2.StyledSettings:=L2.StyledSettings-[TStyledSetting.Style];

     

    with:

     

                              L1.StyledSettings:=[];
                              L2.StyledSettings:=[];
     


  8. 4 minutes ago, Die Holländer said:

    But a dataset like DBGrid or client dataset is caching the calculated field values, right?

     

    First of all, DBGrid is not a dataset, it is a component that displays data. How should a component know if and when the field value must be calculated again and cannot use the cached value?

     

    On the other hand you can use fkInternalCalc  (caches) stores the calculated values https://docwiki.embarcadero.com/Libraries/Athens/en/Data.DB.TFieldKind.
     


  9. CaretPositionProp is not nil, however when invoking the GetValyue in CaretPositionProp.GetValue self is an Inaccessible value:

     

    FMX.Memo.TCustomMemo.GetCaretPosition
    :00cfcac8 RawInvoke + $40
    System.Rtti.RawInvoke(???,???)
    :00cfcead Invoke + $249
    System.Rtti.Invoke(nil,(),???,???,True,True)
    :00cf5689 TRttiInstanceProperty.DoGetValue + $DD
    System.Rtti.TRttiInstanceProperty.DoGetValue(???)
    :00cf54ae TRttiProperty.GetValue + $26

     

    Since it is pointing to an invalid address the Access Violation is when the code tries to execute Model.CaretPosition.


  10. If you are using a standard windows user then you must start the IDE elevated in order to have a chance to verify which patches are installed.


  11. You see he images because the IDE will copy paste the reference to the imagelist on the DM. The compiler will find the DM containing the pictures and will show them. You can save the form, close all the projects and open the form the IDE will remove the reference to the datamodule and you will not see the pictures anymore.

×