Jump to content


Popular Content

Showing content with the highest reputation on 08/23/19 in all areas

  1. Rollo62

    Report components: good, bad, ugly

    I use HTML Components Library too, and its working flawlessly (considering its a little between HTML4 and 5), but the big advantage for me is that its cross-platform. Also HTML reports are pretty much interchangeable everywhere, you don't need a special reader. Updates come out regularily also Alexander is fixing bugs and even adding some reqested features very fast. I only can recommend these tools.
  2. Angus Robertson

    ICS V8.62 announced

    ICS V8.62 is now installable from GetIt on recent versions of Delphi. Angus
  3. Hi @Chau Chee Yang, I've never seen errors compiling this package. Which branch are you using (master or develop)? Isn't this equivalent to set -LUDesignIDE in the Compiling options? I've never been a package addicted. 😉 Sincerely, Andrea
  4. Hi @Chau Chee Yang Fixed, thanks: https://github.com/andrea-magni/MARS/commit/c9a0d1d75a97b40a56258a6694ae6313107efd98 If you like to be mentioned in the project, feel free to open issues on Github for this kind of problems: your contribution would be public then. For the moment, I've added a comment with a link to this thread. Sincerely, Andrea
  5. Sorry, no code to share as it is embedded in a larger framework. I do use the queues in Omni Thread Library from @Primož Gabrijelčič down in the core, though. As for Synchronize: Just say no.
  6. John Kouraklis

    IDE adds {$R} between units

    The version is 10.3.2 and it looks like the dproj had a few entries like this: <Form>$R *.res</Form> as described in a link Dave shared. There were, also, some {$R *.res} at the end of the lines with the units. I hadn't seen them because the file names and the paths are very long going outside the window. Hope now all is good. Thanks
  7. Dave Nottage

    IDE adds {$R} between units

    When you say this, do you mean for a particular project, or for any? The IDE is known to "mess up" the .dpr if you modify certain parts of it. Examples of what can happen: https://stackoverflow.com/questions/758047/how-do-you-deal-with-ifdefs-in-dpr-uses-section https://stackoverflow.com/questions/6762194/how-to-prevent-delphi-modifying-its-dpr-project-source-unexpectedly https://stackoverflow.com/questions/317997/delphi-adding-r-res-in-the-dpr-file https://wiert.me/2018/12/20/do-not-put-ifdef-with-relative-paths-in-your-dpr-as-the-delphi-ide-cannot-match-them-in-the-dproj/
  8. Gustav Schubert

    Give TViewport3D a test flight.

    I needed to look up "ingress" and "boon"in the dictionary, this is the problem. Very young sailors, sailing in a dinghy (the 420), are measuring things on their boats. But this is mostly nonsense, because of friction in the system (hysteresis). They even buy little mechanical measuring devices to measure forces in the wires. The accuracy of those measurements is also questionable. The program is an abstraction, uses as simplified model. The math behind it is very basic. You would probably need to use FE software (finite element something) which I don't have (was expensive in the past) to do it properly. The old desktop app (Delphi 2, 1996) got the force from a table (diagram in TPaintbox with line or spline). You only needed to specify the params for the curve (Weg-Kraft-Kennlinie) in order to know the force, based on what was measured on the boat once. From one known force in the 'framework' all others can be computed. The iPad app does not deal with forces at all, just the kinematics of the model. When the kids use the program, they will not go faster, just have a better understanding of how things work. But the only thing they want to do is going faster! The app is a toy. And once they are on the water, the wind and the waves will deform the rig in a way I cannot compute. There is math only in the last paragraph of the page, which I need to rewrite, I know.
  9. Dany Marmur

    Give TViewport3D a test flight.

    Wow! A good chunk of math anytime in the day! Help with English?? Looks like you have a pretty good hook on that from the second link, no? IMHO: A short "ingress" on the page, explaining who/when/how uses this app (i have been on the sea myself but a loooong time ago) would be a boon.
  10. John Kouraklis

    Running the IDE in a VM on Mac Book Pro?

    There's a patch for this. See here: https://www.cybernog.com/2018/10/MacOS-Mojave-VMware.html 40GB? This must be a VM with the OS only. My VMs easily reach 250GBs
  11. Attila Kovacs

    Running the IDE in a VM on Mac Book Pro?

  12. David Heffernan

    Google Play Store - request extension for Delphi apps

    Choosing a better tool for mobile development is surely an option
  13. Remy Lebeau

    VCL component issue

    Note, there are a lot more ComponentPlatforms values available than just those shown above: pidAllPlatforms (new in 10.3.2!) pidWin32 pidWin64 pidOSX32 pidiOSSimulator32/pidiOSSimulator pidAndroid32Arm/pidAndroid pidLinux32 pidiOSDevice32/pidiOSDevice pidLinux64 pidWinNX32 pidWinIoT32 pidiOSDevice64 pidWinARM32/pidWinARM pidOSXNX64/pidOSX64 pidLinux32Arm pidLinux64Arm pidAndroid64Arm/pidAndroid64 pidiOSSimulator64
  14. Christen Blom-Dahl

    VCL component issue

    You must include a class attribute to specify which platforms the component is going to be available: type ... [ComponentPlatformsAttribute(pidWin32 or pidWin64 or pidOSX32 or pidiOSSimulator or pidiOSDevice32 or pidiOSDevice64 or pidAndroid)] TVCDProgress = class(TCustomControl) ... end;
  15. Heh, I actually donated that SafeGuard code to JCL many years ago. They modified the name a little, but not the concept. It works, but I am not sure if all guarded objects will be released on an exception. You'll have to test that. The advantage is indeed that you don't have to cast or anything. You use the original object you created. Yesterday, I even wrote a better approach, using records an implicit and explict casts. That one is certain to work and does not need a cast and the pointer can be used as if it were the actual object (by implicit cast). type IObjectGuard<T: class> = interface function Value: T; end; TObjectGuard<T: class> = class(TInterfacedObject, IObjectGuard<T>) private FValue: T; public constructor Create(Obj: T); destructor Destroy; override; function Value: T; end; SmartPtr<T: class> = record private FGuard: IObjectGuard<T>; public class operator Explicit(const Obj: T): SmartPtr<T>; class operator Implicit(const Ptr: SmartPtr<T>): T; end; { TObjectGuard<T> } constructor TObjectGuard<T>.Create(Obj: T); begin FValue := Obj; end; destructor TObjectGuard<T>.Destroy; begin FValue.Free; inherited; end; function TObjectGuard<T>.Value: T; begin Result := FValue; end; { SmartPtr<T> } class operator SmartPtr<T>.Explicit(const Obj: T): SmartPtr<T>; begin Result.FGuard := TObjectGuard<T>.Create(Obj); end; class operator SmartPtr<T>.Implicit(const Ptr: SmartPtr<T>): T; begin if Ptr.FGuard <> nil then Result := Ptr.FGuard.Value else Result := nil; end; And it can be used like: var Bob, Fred, Jack: TTalking; begin Bob := SmartPtr<TTalking>(TTalking.Create('Bob')); Fred := SmartPtr<TTalking>(TTalking.Create('Fred')); Jack := SmartPtr<TTalking>(TTalking.Create('Jack')); Fred.Talk; Bob.Talk; raise Exception.Create('Error Message'); Jack.Talk; Writeln('This is the end of the routine'); end; As you can see, this also creates guards. They do work, even with the Exception. All are freed when the exception occurs.