Jump to content

Lars Fosdal

Administrators
  • Content Count

    3416
  • Joined

  • Last visited

  • Days Won

    113

Everything posted by Lars Fosdal

  1. Lars Fosdal

    OS Updates

    Not sure why one would want to do this in a Delphi app, when the tools are right there in PowerShell. https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-hotfix?view=powershell-7
  2. Lars Fosdal

    Java novice and Delphi firefox

    Firefox? I assume Firemonkey. You are more likely to get help if you are specific with regards to what you want to do.
  3. Lars Fosdal

    Difference between Pred and -1

    I know... My indendation style is unconventional. It works for me, though.
  4. Lars Fosdal

    Difference between Pred and -1

    Scoured our complete source code and found only one occurence each of pred and succ. One was legit. for e := Low(TElementType) to Pred(High(TElementType)) do // i.e. do not include the last enum value in the loop. The other one was a bullshit one - and I was probably the author of both. function AfterFirst(const Match:char; const st:string):String; var index : Word; begin index := pos(Match,st); if index <> 0 then Result := Copy(st, index + 1, succ(Length(st) - index)) else Result := st; end; It's not even consequent.
  5. Lars Fosdal

    Random Access Violation?

    How about using MadExcept or EurekaLog ?
  6. Lars Fosdal

    IPV6 to number

    That said, there is BigInteger from https://github.com/rvelthuis/DelphiBigNumbers
  7. Lars Fosdal

    IPV6 to number

    An IPv6 address is 128 bits. The answer is no. You'd need two UInt64s to hold that.
  8. Lars Fosdal

    Setting a "nullable" property on a .NET object

    But isn't it still a value type? https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/nullable-value-types#how-to-identify-a-nullable-value-type
  9. Lars Fosdal

    Setting a "nullable" property on a .NET object

    100% guesswork without any foundation, except name likeness, follows: There is a GetUnderlyingType property in System.RTTI type TRttiEnumerationType - but it is used absolutely nowhere in the RTL. Also, WinAPI.Ole2 contains a VariantChangeType, and WinAPI.ActiveX contains a VariantChangeTypeEx that may be relevant. System.VarUtils contain both. function TRttiEnumerationType.GetUnderlyingType: TRttiType; begin Result := Pool.TypeOrNil(TypeData^.BaseType); end; function TRttiPool.TypeOrNil(Value: PPTypeInfo): TRttiType; begin if Value = nil then Exit(nil); Result := GetType(Value^); end; function TRttiPool.GetType(ATypeInfo: Pointer): TRttiType; begin if ATypeInfo = nil then Exit(nil); Result := TRttiType(ReadObjectPointer(TRttiType, nil, ATypeInfo)); end;
  10. Lars Fosdal

    3 explorer running

    I see. Personally, I rely on the MRU, Quick Access and Libraries functions that are built into the File Explorer. They are sufficient for me.
  11. Lars Fosdal

    Sort of Drop-down menu, that is not

    I am not sure if these are supported in Lazarus, but you could try an ActionMainMenuBar + ActionManager where you only use the top-level menu items. It would handle the hotkeys for you. ActionBarDemo.zip
  12. Lars Fosdal

    3 explorer running

    @limelect What is the nature of the interaction between your app and the file explorer? Would it be better to launch your own explorer with CreateProcessEx? That way, your app would be the owner, and you would know when it closes, and if you need to launch another. In Windows 10, you can control if folder explorer windows should have separate processes by default or not. The default appears to be not, meaning each explorer opened (from f.x. using Win+E) actually is running in the same process. What is your setting? Does changing this setting affect your observable problem?
  13. @Primož Gabrijelčič From the wishful thinking department: I'd love to see OTL evolve to support Linux/MacOS, iOS and Android. Hence, I'd love to see solutions that do NOT use Windows messaging - or at least hide it inside the notification implementation.
  14. Lars Fosdal

    VSoft.Awaitable - async/await for Delphi

    Is there a way to use it with "plugin" handlers instead on anonymous procedures? There are so many pitfalls with captures.
  15. An alternative is to create completely independent classes, and use an interface to define the methods that you want to be general across the classes.
  16. It requires some practice to wrap your head around encapsulation (pun intended) and thinking about how to make your code general or generic, if you like. A common base class mostly makes sense if you want to be able to ignore how it is used later, i.e. rely on polymorphism, and when you have a certain degree of reuse of code. Specific: Instance := TClassType.Create, then provide params -- Ideally, this would be the one place where you do something specific for the type when using it. General. Instance.LoadFiles; General: Instance.Compare; General: Output := Instance.CreateOutput; General: Render Output As you expand your hierarchy, you add properties and features only on the level where you need them. type TCompare = class procedure LoadFiles; virtual; procedure Compare; virtual; property File1: string; property File2: string; end; TCompare2Way = class(TCompare) procedure Compare; override; property Merge: Boolean; end; TCompare3Way = class(TCompare2Way) procedure LoadFiles; override; procedure CompareLeft; procedure CompareRight; procedure Compare; override; property File3: string; end;
  17. Lars Fosdal

    Random Access Violation?

    Do you use MadExcept or Eurekalog or similar? There might be hints in the nature of the callstacks.
  18. Lars Fosdal

    Random Access Violation?

    Just to rule out any db access issues - have you tried logging into the database with the same user credential and connection settings as your ODBC connection uses and running the query manually?
  19. begin Memo1.Lines.LoadFromFile('Test.txt'); // loads the entire file as is into the memo It is a bit unclear what you want to do per line, and if it can be automated or not? Do you have a collection of files that you want to merge into the Memo ? var Filename: string; FileContent: TStringList; begin FileContent := TStringList.Create; try for FileName in ListOfFileNames do begin FileContent.LoadFromFile(FileName); // Process it in FileContent here Memo1.Lines.AddStrings(FileContent); end; finally FileContent.Free; end; end;
  20. Lars Fosdal

    Rio and MDI Applications

    Users are a fickle bunch. Only devs are worse 😛
  21. Lars Fosdal

    Rio and MDI Applications

    It would actually be nice to have something MDI like - but without the container. It would need multi-display support. The main window could be a narrow up top thing, or a sidebar thing.
  22. Lars Fosdal

    Rio and MDI Applications

    Agree on the Joel thing - but the argument still stands with regards to MDI. Its demise has been plotted for at least two decades.
  23. Lars Fosdal

    Rio and MDI Applications

    @Anders Melander: I may have been tooting the MS party line on MDI, without having read an actual deprecation statement, https://docs.microsoft.com/en-us/windows/win32/winmsg/multiple-document-interface "[Many new and intermediate users find it difficult to learn to use MDI applications. Therefore, you should consider other models for your user interface. However, you can use MDI for applications which do not easily fit into an existing model.]" However, this thread by Joel Spolsky from 2002 (!) accentuates how long ago MS started pushing that party line... https://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixpost=2748 Basic functionality seems to be there, even with Per Monitor V2 - but I only gave it a cursory glance. I think I was on 1809 the last time I checked and at the time it was definitively borked. Currently on 1909.
  24. Lars Fosdal

    Rio and MDI Applications

    The last time I checked, I got transparent client areas and border areas.
  25. Lars Fosdal

    Rio and MDI Applications

    MDI has been deprecated for years and is severely broken under Windows 10. Seems that a lot of messages no longer are sent or passed down to children.
×