-
Content Count
2885 -
Joined
-
Last visited
-
Days Won
169
Everything posted by Uwe Raabe
-
Add an OnDrawItem or OnAdvancedDrawItem event handler to these menu items with something like the following code: ACanvas.Font.Style := [TFontStyle.fsBold]; ACanvas.TextRect(ARect, 1, 1, StripHotkey((Sender as TMenuItem).Caption)); As obviously styles are involved, you might have to take that into account, too.
-
Delphi Daily WTF / Antipattern / Stupid code thread
Uwe Raabe replied to Tommi Prami's topic in RTL and Delphi Object Pascal
"Use constants" the boss told us: const cDecimals0 = 0; cDecimals1 = 1; cDecimals2 = 2; cDecimals3 = 3; cDecimals4 = 4; cDecimals5 = 5; cDecimals6 = 6; cDecimals7 = 7; cDecimals8 = 8; cDecimals9 = 9; cDecimals10 = 10; cDigits0 = 0; cDigits1 = 1; cDigits2 = 2; cDigits3 = 3; cDigits4 = 4; cDigits5 = 5; cDigits6 = 6; cDigits7 = 7; cDigits8 = 8; cDigits9 = 9; cDigits10 = 10; cDigits11 = 11; cDigits12 = 12; cDigits13 = 13; cDigits14 = 14; cDigits15 = 15; cDigits16 = 16; cDigits17 = 17; cDigits18 = 18; cDigits19 = 19; cDigits20 = 20; cDigits21 = 21; cDigits22 = 22; cDigits23 = 23; cDigits24 = 24; cDigits25 = 25; cDigits26 = 26; cDigits27 = 27; cDigits28 = 28; cDigits29 = 29; cDigits30 = 30; cDigits31 = 31; cDigits32 = 32; cDigits33 = 33; cDigits34 = 34; cDigits35 = 35; cDigits36 = 36; cDigits37 = 37; cDigits38 = 38; cDigits39 = 39; cDigits40 = 40; cEndPos0 = 0; cEndPos1 = 1; cEndPos2 = 2; cEndPos3 = 3; cEndPos4 = 4; cEndPos5 = 5; cEndPos6 = 6; cEndPos7 = 7; cEndPos8 = 8; cEndPos9 = 9; <snip...> cEndPos997 = 997; cEndPos998 = 998; cEndPos999 = 999; cEndPos1000 = 1000; cEndPos9000 = 9000; cIndex0 = 0; cIndex1 = 1; cIndex2 = 2; cIndex3 = 3; cIndex4 = 4; cIndex5 = 5; cIndex6 = 6; cIndex7 = 7; cIndex8 = 8; cIndex9 = 9; cIndex10 = 10; cIndex11 = 11; cIndex12 = 12; cLength1 = 1; cLength2 = 2; cLength3 = 3; cLength4 = 4; cLength5 = 5; cLength6 = 6; cLength7 = 7; cLength8 = 8; cLength9 = 9; cLength10 = 10; cLength11 = 11; cLength12 = 12; cLength13 = 13; cLength14 = 14; cLength15 = 15; cLength50 = 50; cLength102 = 102; cLength117 = 117; cLength298 = 298; cLength618 = 618; cLength800 = 800; cStartPos0 = 0; cStartPos1 = 1; cStartPos2 = 2; cStartPos3 = 3; cStartPos4 = 4; cStartPos5 = 5; cStartPos6 = 6; cStartPos7 = 7; cStartPos8 = 8; cStartPos9 = 9; <snip...> cStartPos995 = 995; cStartPos996 = 996; cStartPos997 = 997; cStartPos998 = 998; cStartPos999 = 999; cStartPos1000 = 1000; -
JSON serialization using published properties w/o attributes
Uwe Raabe replied to Zoë Peterson's topic in Algorithms, Data Structures and Class Design
Might be tricky to persuade the third party lib to create your new classes rather than its own. -
Delphi Daily WTF / Antipattern / Stupid code thread
Uwe Raabe replied to Tommi Prami's topic in RTL and Delphi Object Pascal
I'm probably going to regret it, but I'll throw this one into the discussion: function BlankControl(EditControl: TObject; const EditMess: string; ShowErrorMsg: Boolean; MaxLen: Integer): Boolean; begin Result := False; try if EditControl is TCustomEdit then Exit(length(trim((EditControl as TCustomEdit).Text)) < MaxLen); if EditControl is TComboBox then Exit(length(trim((EditControl as TComboBox).Text)) < MaxLen); if EditControl is TDBComboBox then Exit(length(trim((EditControl as TDBComboBox).Text)) < MaxLen); if EditControl is TDBRadioGroup then Exit((EditControl as TDBRadioGroup).Value = ''); if EditControl is TDBLookupComboBox then Exit((EditControl as TDBLookupComboBox).Text = ''); if EditControl is TDBCheckBox then Exit((EditControl as TDBCheckBox).State = cbGrayed); finally if Result then Showerror(EditControl, EditMess, false, ShowErrorMsg); end; end; -
Delphi Daily WTF / Antipattern / Stupid code thread
Uwe Raabe replied to Tommi Prami's topic in RTL and Delphi Object Pascal
Ehm! That Exit call will only exit procedure gotoTrue, but not function BlankControl. Funny, that such a suggested improvement perfectly qualifies for the reason of this thread -
Yes, here: Enumerated Types with Explicitly Assigned Ordinality
-
Put a TPanel in the grid cell and place the label and LED onto that panel. The vertical alignment of a TLabel is controlled by its Layout property,
-
Delphi Daily WTF / Antipattern / Stupid code thread
Uwe Raabe replied to Tommi Prami's topic in RTL and Delphi Object Pascal
As ProcessMessage already does all the work, there is not much to do in the body of this loop. -
upcoming language enhancements?
Uwe Raabe replied to David Schwartz's topic in RTL and Delphi Object Pascal
Well, obviously announcing is easier than implementing. -
upcoming language enhancements?
Uwe Raabe replied to David Schwartz's topic in RTL and Delphi Object Pascal
There definitely is a plan! The problem is how much of that plan turns into reality. -
Would you mind writing in English, please? Otherwise a Personal Message would be a better choice.
-
I also use Delphi in many VMs. To overcome the installation limit I have switchen to a Network Named License and make use of my own license server (ELC). This allows me to install Delphi on as many VMs I want as long I have it running on up to three machines simultaneously.
-
That menu item should be enabled whenever you have the CPU window open while debugging.
-
D10.4.2 where's setting to not debug into RTL ?
Uwe Raabe replied to David Schwartz's topic in Delphi IDE and APIs
SelectiveDebugging -
The VCL already provides such a flag for you: TApplication.ModalLevel
-
Structured Difference Viewer added to MMX Code Explorer
Uwe Raabe replied to Uwe Raabe's topic in MMX Code Explorer
Usually the MMX setup installs the app and also registers it into the Delphi IDE. You only have to select it as the default viewer. -
Should a TDataSet allow changing the .SQL property while being open?
Uwe Raabe replied to aehimself's topic in Databases
I expect the dataset to be closed when SQL changes. Otherwise the records would not match the SQL anymore. One can easily extend this to all other properties that have influence on the data retrieved and the way it can be accessed. What would be the benefit of an immediate exception here? The author of the code wants to change the SQL, so what would be the gain from that exception (which happens at runtime btw.)? The dataset has to be closed anyway to change the SQL, so why not closing it automatically? Unfortunately this option is not available in the poll (at least as I understand it). -
Of you compile with packages and allow external packages be loaded dynamically.
-
Both tools have a completely different approach. While DelphiAST analyzes source code, the class tree utility requires the classes to be compiled into the exe.
-
If possible, could you be a bit more specific? I mean, that is a bit vague, isn't it?
-
You have to activate that option:
-
You can define the group names per project in MMX Properties - Project options: A single identifier is treated as a group prefix which has to be followed by a dot (like System, VCL, FireDAC). You can also use wildcards like Rz* for all units from Raize Components (KSVC). Unit names not covered in one of the schemes above can be listet in brackets. This is the setting for MMX itself: (ToolsApi,DesignIntf,DCCStrs,DockForm,TabDock);Winapi;System.Win;System;Xml;Vcl;VirtualTrees*;Rz*;Tb*;Png*;MMX The settings are stored in the dproj file.
-
Can I force compiler to report on enum change that related code needs changing?
Uwe Raabe replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
It needs some code to be added, but you can declare a const array[<enumeration>] of Integer with values 0 in all places where the enumeration is used in some way. const cCheckProjectType: array[TProjectType] of Integer = (0, 0, 0, 0); If you now extend TProjectType the compiler will stop at all places where such a declaration is present and you can inspect the code around for correct TProjectType usage. After that is done you extend the array values to make the compiler continue to the next problematic position. -
Using Attributes in class declarations
Uwe Raabe replied to Lars Fosdal's topic in RTL and Delphi Object Pascal
Very good point 👍 -
TFDQuery (Master/Detail) with CachedUpdates Too Slow on Delphi 10.4.2
Uwe Raabe replied to dataol's topic in Databases
Enclosing the loops with a qryItemReceita.DisableControls/EnableControls should help a bit.