PeterBelow
Members-
Content Count
465 -
Joined
-
Last visited
-
Days Won
13
Everything posted by PeterBelow
-
Mh, not very enlightening. Looks like setting up a exception handling frame.
- 9 replies
-
- debug
- inline variables
-
(and 1 more)
Tagged with:
-
I'm surprised that you can even set a breakpoint on a variable declaration. Makes no sense in my opinion. Could you please run to the breakpoint and switch to the CPU disassembly view to see what statement the breakpoint is actually on? I have not been able to install 10.3.2 myself yet due to trouble with the licence, so cannot test that myself.
- 9 replies
-
- debug
- inline variables
-
(and 1 more)
Tagged with:
-
Component Compatibility 10.3.2 vs. 10.3.1?
PeterBelow replied to Steve Maughan's topic in General Help
Generally the minor releases of Delphi (e.g. 10.3.1 10.3.2) are binary compatible, which means there are no changes to the interface part of run-time library or frame work units, so dcus and packages build for one release can be used with other. The same applies to the open tools API, so components you bought for 10.3.1 should work in 10.3.2, even if you cannot recompile them since you don't have the source. This only applies if said components play by the rules, of course. If they rely on undocumented features or dig around in the IDE's innards all bets are off. -
Is the project perhaps Win64 or FMX?
-
WinAPI to query if a form is ready to Rock.
PeterBelow replied to Tommi Prami's topic in Windows API
Some of the form properties (e.g. border and bordericons) are implemented via window styles on the API level, and Windows only honors some of the styles when the window is first created. Changes to these properties recreate the window handle for this reason. Another reason are modal forms with popupmode pmauto or pmexplicit; their window handle has to be recreated when they are shown to tie them to their popup parent in Z-order. Changing the formstyle also recreates the handle. -
WinAPI to query if a form is ready to Rock.
PeterBelow replied to Tommi Prami's topic in Windows API
There is no panacea for this kind of problem, too much depends on how the form in question has been set up. What you can do from "outside" the process is check if the window is visible (IsWindowVisible) check whether it is the current foreground window (GetForegroundWindow) check whether its message loop is running (WaitForInputIdle, or use SendMessageTimeout to send a do-nothing message to the form, e.g. wm_null, the call will not return until the loop is running) Nothing will help you if the form does some kind of delayed initialization, e.g. using a timer started when the form is created. Also keep in mind that a Delphi form may recreate its window handle at the drop of a (virtual) hat during the initialization phase. -
The <projectname>.res file is the one the IDE builds for the form resources, it also contains versioninfo if you enabled that in the project options. The verinfo.res has to be something you added yourself to the project, or some add-in you use added. Look for a {$R verinfo.rc verinfo.res} line in the project dpr file and delete it. The confllict arises since both resources have the same ID.
-
Refer to Form Control without using the Form unit?
PeterBelow replied to Mike Torrettinni's topic in VCL
You cannot do it this way without using the form units. It is not a good way to translate an application anyway. Have you looked at the IDE Translation Manager? -
You can tell the debugger to ignore certain types of exceptions, this is offered as a button on the exception dialog you get when the IDE debugger catches an exception. Perhaps you did this by accident. Call up the Tools --> Options dialog,on the left scroll down to the end of the list. There you find a "debugger options" node with two subnodes for language and OS exceptions. The associated pages list the exception types to ignore; you can reactivate them there as well. see the attached dcreenshot, unfortunately from a german IDE.
-
Cannot login to Quality Central - who to contact?
PeterBelow replied to A.M. Hoornweg's topic in General Help
Can you get to members.embarcadero.com and log in there with your EDN account? -
Best practices for system migration?
PeterBelow replied to PeterPanettone's topic in Delphi IDE and APIs
You only need the licence key, which you can copy from the Licence manager via clipboard. -
Did you check the dpr file for bad line ends (only cr or only lf)? What happend to me some time ago was that the IDE inserted a new form unit name in the DPR file smack in the middle of an existing one, which of course did not build anymore and resulted in some weird error messages (no IDE crash, though). I found out that the file had become corrupted, with mix of linebreak styles. I never found out how that happended...
-
Database connection as parameter in class creation
PeterBelow replied to baeckerg's topic in Databases
For 1: If you like to set up the connection at design-time in a datamodule the approach is OK, and you do not need to pass the connection object as a Var parameter. Objects are reference types, so you pass a reference to the connection object, and that can even be done as const, since you can work with the object's properties or pass the reference on this way as well. Just do not free the connection object in the "record class", it belongs to the datamodule and will be freed by it when the datamodule is destroyed. For 2: "Best" is hard to define in this context. For a complete separation of the UI from the data it works with you need a bit more than just keeping connection and query/table objects out of the forms/frames and business logic code out of event handlers there. But writing a model-view-presenter framework or a full-blown object-relational mapper (ORM) framework from scratch is a lot of work. For smaller projects it may not pay to go to these length, especially if you only aim for one platform with a desktop client. -
Nested Parallel For Loops - Bad idea?
PeterBelow replied to Steve Maughan's topic in Algorithms, Data Structures and Class Design
Using threads to do thing in parallel obviously only works efficiently if the "things" do not depend on each other. As soon as a thread has to wait on the results of another the processing slows down and the chance of deadlocks goes up. Also, using more threads than the hardware has cores/cpus quickly gets you to a point of diminishing returns, since the OS has some administrative overhead to manage the threads. So, don't overdo it, especially in a scenario like a parallel for loop, where the code can only continue after the loop has finished completely it may be more efficient to split the loop into several and run each in its own thread. If the loop does not have that many iterations and executes each round fairly quickly setting up the individual tasks in a parallel for may consume more time than you gain by doing stuff in parallel. There is no substitute for thorough testing and timing in such a scenario. -
Why is this code not thread safe (Delphi 7)
PeterBelow replied to Yaron's topic in Algorithms, Data Structures and Class Design
No, you can operate on several canvases (of offline bitmaps or metafiles) in parallel, its is just a little bit less efficient since each canvas has to create its own font, pen, brush instead of using an existing one from the VCL sharing pool. -
Why is this code not thread safe (Delphi 7)
PeterBelow replied to Yaron's topic in Algorithms, Data Structures and Class Design
If you work with a TCanvas in background threads always wrap your code in canvas.lock; try ...operate on canvas here finally canvas.unlock; end; The VCL has a build-in mechanism to optimize use of GDI objects, which is shared between all TCanvases used, and his mechanism is not thread-safe. Locking the canvas makes sure it does not use this mechanism while it is locked. -
If you want to use a database that requires COM (e.g. via dbGo) inside a thread you have to call CoInitialize at the start of the execute method and CoUninitialize at the end. You are not doing that, your InitializeDatabase method calls CoUnInitialize, so any subsequent use of the database connection may not work as intended. You thread Execute method does not contain a loop, after one pass through the code the thread will exit. Also keep in mind that database connections are usually bound to the thread that created them, so using a dataset bound to the connection created by the thread in another thread (e.g. in the main thread through a Synchronize call) may either not work or involve some internal thread synchronization done by the framework you are using (COM objects using appartment threading are such a case) that may block until the code returns to the message loop. Something else that may foul your design: Creating a datamodule inside a thread is not a problem per se, but if you have design-time links of components on forms, frames, other datamodules to stuff on this datamodule (or vice versa) the way the VCL streaming mechanism resolves them may torpedo your intent. This mechanism is not thread-safe, and it resolves the links using the Name of the component linked to, and it looks for the container (form etc.) in a global list, where it will only find the first created instance of the container, even if you have created several.
-
RIO: Start Debug Session changes source
PeterBelow replied to PeterPanettone's topic in Delphi IDE and APIs
Thanks for sharing the solution. -
RIO: Start Debug Session changes source
PeterBelow replied to PeterPanettone's topic in Delphi IDE and APIs
This is not normal behaviour, i have never encountered that myself with Rio. Do you also get that if you do a build before starting the debug session? -
Why control methods (OnClick) can't be defined in Form Private section?
PeterBelow replied to Mike Torrettinni's topic in VCL
The form streaming process relies on run-time type information (the old styele), and that is only generated for published members of a class. -
Importing Excel2016 Type library into Delphi
PeterBelow replied to ByteJuggler's topic in General Help
If you execute the import component dialog and select "import type library" you should get a list of the installed type libraries on the next page of the wizard. Don't you see a "Microsoft Excel xx.x Object Library" in that list? -
The point is that the code is plain wrong, the last else in both if trees needs to cast value.x and value.y, respectively, not result.x/y, which has not been set at those points!
-
redefined anonymous method - bug or my mistake?
PeterBelow replied to Primož Gabrijelčič's topic in RTL and Delphi Object Pascal
Well, TRunner.TCallback is closer in scope, so I would expect the compiler to use it instead of the global TCallback, so that does look like a bug. Should be easy enough to work around, though, just specify TRunner.TCallback as type for the property and its field. Of course it's a bit problematic to have this kind of nameing conflict in the first place, not (only) for the compiler but also for a programmer trying to make sense of the code 😉. Delphi 10.3 Version 26.0.33219.4899 still shows this behaviour, by the way. -
I did something similar in the past but have stopped since it does not work that well if you let the IDE's code completion or a tool like Modelmaker Code Explorer (which I simply cannot live without) create the methods for you. I find it more useful to stick to a good naming convention for methods and event handlers and also use MMX or the structure view to navigate around a unit.
-
Marking of the main form in a multiform VCL Application
PeterBelow replied to PeterPanettone's topic in Delphi IDE and APIs
If you want to submit a feature request please do so on quality.embarcadero.com. Posting such requests here has no effect other than spawning endless discussions which serve no purpose, IMO, since this is often mostly about a purely personal preference.