-
Content Count
2886 -
Joined
-
Last visited
-
Days Won
169
Everything posted by Uwe Raabe
-
Open Tools API - Project load/close notification
Uwe Raabe replied to Vincent Parrett's topic in Delphi IDE and APIs
You should try IOTAIDENotifier registered with IOTAServices. Then in FileNotification check for NotifyCode = ofnFileOpening. This will be called for all files before they are opened, so you need to filter by extension. -
Alt-sortcuts are not always the same
Uwe Raabe replied to PeterPanettone's topic in Delphi IDE and APIs
The property/method responsible for that behavior is Vcl.Menus.TMenuItem.AutoHotkeys and/or Vcl.Menus.TMenuItem.RethinkHotkeys -
You can still connect these as long as both are inside the frame. If you want to connect buttons of the frame to action in the form: no, that must be done manually.
-
First, you should clarify how TMainForm and TMainFormBase are related, as well as TFrameBase and TFrameTop. Disregarding these inconsistencies I will try to outline my solution: You should avoid placing the frame instance into the form with the designer. Instead declare a field in TMainFormBase of type TFrameBase named Frame. Add a virtual class function CreateFrame returning a TFrameBase instance. During form creation call this function and set the field Frame with the result. Then in TMainFormApplication override that function and return a TFrameApplication.
-
That is the ICODE section (probably stands for initialization code).
-
Of course! Fixed.
-
You can also create an include file with the following content type TLog = class public class procedure This(const Msg:string); end; class procedure TLog.This(const Msg: string); begin LogThis(UnitName, Msg); end; In your units add an appropriates include directive directly below the implementation uses. Then replace all LogThis calls with TLog.This calls, without bothering about the unit name at all.
-
As I said, you can call UnitName on every class declared in that unit. If the unit contains no suitable class declaration in the first place, you can always add one just for this purpose: type TClassInThisUnit = class; initialization LogThis(TClassInThisUnit.UnitName, SomeValue); end.
-
If this call happens inside a method or class method in that unit, you can use UnitName for that. Every class returns the unit of its declaration with this function. See: http://docwiki.embarcadero.com/Libraries/Rio/en/System.TObject.UnitName As it is a class method, you can even make use of it outside of that class as long as there is at least one class declared in that unit.
-
Blogged : Introducing DPM - a Package Manager for Delphi
Uwe Raabe replied to Vincent Parrett's topic in Delphi Third-Party
Cleaning the global library path from unwanted entries creeping in when installing a library with its own setup is a continuing task here. In my installations the global library path contains only what the Delphi installer writes to it. Every additional library path is added to the search path of the project that makes use of it. Option sets for each library not only simplifies this, but also give a visual clue in the project manager which libraries are used for the project. Also these paths are somehow included in the repository of this project. This way I can fire up a new build agent for Continua, install Delphi, FinalBuilder and whatever tools are needed - that's it. All my projects can be compiled on this machine. Gone are the days where hunting for missing libraries detected late in the build process - often when you are already in a hurry. -
Anyone have good code to get difference of two TList<T>
Uwe Raabe replied to Tommi Prami's topic in Algorithms, Data Structures and Class Design
The solution heavily depends on what you call different on these lists. Your solution simply makes the lists containing the same elements, which is quite off checking for equality. Others might see two lists equal if the elements and their order match. Also equality of two elements can mean different things depending on the actual type T. At least TList<T> offers to provide a comparer for the latter. -
TInterlocked.BitTestAndSet strangeness
Uwe Raabe replied to M.Joos's topic in RTL and Delphi Object Pascal
Works as expected in Rio... -
This information is buried inside the DSK file of the project. Inspect the View<n> section for the source file in question and note the EditViewName entry. For the source view to be visible it contains the PAS file name, while for the design view it says Borland.FormDesignerView. Note that the the last state is stored and overwrites your changes when the IDE options are set to store the current desktop on close.
-
MMX Code Explorer offers that with Shift-Alt-Up/Down (if no other key binding catches it first).
-
"Project / Version info / target - all configuration" broken?
Uwe Raabe replied to Yaron's topic in Cross-platform
For Version Info manually delete means inside the dproj file. -
"Project / Version info / target - all configuration" broken?
Uwe Raabe replied to Yaron's topic in Cross-platform
Project Magician has an option for that: -
Actually it is - with Project Magician:
-
Yesterday I got a (real paper!) mail from Embarcadero with this link: https://lp.embarcadero.com/blackweek2019de
-
Don't know what you expect, but here it closes the current tab containing the CPU view.
-
Delphi 10.3.3 has been released
Uwe Raabe replied to Dalija Prasnikar's topic in Delphi IDE and APIs
That's one reason why I don't work with packages installed by GetIt. Despite some efforts since the first appearance, it is still a half baked solution and not suitable for my environment and the way I work. -
Can you attach a small example showing the problem? Just to rule out it is somehow bound to your system only? That would also be helpful for a bug report.
-
Perhaps it helps to delete the .dsk file of the project and/or project group.
-
Delphi 10.3.3 has been released
Uwe Raabe replied to Dalija Prasnikar's topic in Delphi IDE and APIs
Well, they do here: -
1GB SVN repo free from Perforce... and Git Sucks.
Uwe Raabe replied to Darian Miller's topic in Tips / Blogs / Tutorials / Videos
VersionShelf servers are located in Germany, which is mandatory for some companies over here for enforcing the German data protection laws. I doubt that Perforce can guarantee that. -
1GB SVN repo free from Perforce... and Git Sucks.
Uwe Raabe replied to Darian Miller's topic in Tips / Blogs / Tutorials / Videos
If you are sharing the sources only inside your company, a local server is indeed a valid solution. I my case I am sharing sources with different customers, where a local server hosted in my intranet is almost out of scope (or comes with a lot of maintenance need). Therefore I prefer hosted servers that can be reached 24/7 from outside my place. What makes it a bit complicated is the restriction that some customers require the data to reside in Germany or at least the EU (while the latter turns out to be a moving target these days). This is why I recently asked in the German sibling of this forum about setting up a Kallithea instance (I am still fond of Mercurial - despite the crowd either stays with SVN or moved to Git. Hey, I am doing Delphi! What did you expect? Running with the majority?). Unfortunately (or better thankfully) that died during the first steps going to get it running. The only service I currently know of that satisfies all these requirements is Versionshelf by Shelf Cloud. Although, they don't offer a free account.