I have made a few changes to the code in Fake TSpeedButton based on a TBitBtn: I replaced all that line drawing with a call to the WinAPI function DrawEdge. I set both bitmaps to Transparent. I moved the bitmap generation to a sub procedure. Thus I got rid of about 20 LOC. That's negative … Continue reading Fake TSpeedButton based on a TBitBtn – updated
Category: Delphi
Fake TSpeedButton based on a TBitBtn
When you google for TSpeedButton and Focus a lot of hits are where people ask how to set the focus to a TSpeedButton and the answer of course is, that it isn't possible because TSpeedButton descends from TGraphicControl which does not have a window handle and therefore cannot receive the input focus. And that is … Continue reading Fake TSpeedButton based on a TBitBtn
Beware: IOTAComponent.GetPropValue needs 4 bytes for an enum
The ToolsAPI interface IOTAComponent declares two methods for getting property values: [delphi] IOTAComponent = interface(IUnknown) // [...] { Given the index or name, returns the property value. The untyped var must be large enough to hold the returned value. If the property is a descendant of TPersistent, the return value is a IOTAComponent. For properties … Continue reading Beware: IOTAComponent.GetPropValue needs 4 bytes for an enum
System wide mouse gestures with dzMouseGestures
When Mozilla released their last big update, they deprecated quite a few APIs for plugins. One of these plugins was FireGestures which I used to get some of the mouse gestures of Opera in Firefox. There are a few new plugins that try to replace FireGestures but none of them really seemed to work quite … Continue reading System wide mouse gestures with dzMouseGestures
Getting a good night’s sleep is important
Today, I finally found the time to read up on some rather ancient e-mails. One was from Paolo in the dxgettext mailing list about a bug in gnugettext.pas: With SVN revision 75 and the following, AddDomainForResourceString() has no effect, additional translations are not used. Suggested patch: original code from SVN revision 79: [delphi] function TGnuGettextInstance.LoadResString( … Continue reading Getting a good night’s sleep is important
GExperts Bugfixes
The Unicode issues in GExperts just don't end. Today I fixed three of them: [delphi] procedure bla; begin SomeVar := 3245; // german description with some äöüß to SomeVar SomeVar := 123; SomeQuery.FieldByName('GermanWordWithäöüß').AsString := 'some value'; end; [/delphi] (Yes, I know, this doesn't compile.) Move the cursor to the first occurrence of SomeVar and press … Continue reading GExperts Bugfixes
Access Violation in Delphi 6 or 7 when setting IOTASourceEditor.BlockVisible to True
Note to self: If you get an access violation when setting IOTASourceEditor.BlockVisible to true in Delphi 6 or 7 e.g.: [delphi] procedure GxOtaSelectBlock(const Editor: IOTASourceEditor; const Start, After: TOTACharPos); begin Assert(Assigned(Editor)); Editor.BlockVisible := False; try Editor.BlockType := btNonInclusive; Editor.BlockStart := Start; Editor.BlockAfter := After; finally Editor.BlockVisible := True; // <---- BOOM end; end; [/delphi] Check … Continue reading Access Violation in Delphi 6 or 7 when setting IOTASourceEditor.BlockVisible to True
Delphi XE2 crash when opening the About dialog
Today I had a rather annoying problem with Delphi XE2. I only wanted to change the caption of a TListView column using the Columns Editor (right click -> Columns Editor). The IDE crashed on me with an Access Violation. So, I thought I had broken it again (things like this happen when you are developing … Continue reading Delphi XE2 crash when opening the About dialog
TdzStreamCache class for caching access to any TStream
You might have noticed that I haven't blogged as much as usual and that there have been no recent updates to GExperts either. The reason of course was that I was busy doing other things. Some of them were programming related and one of these was writing a caching class wrapper for TStream descendants (e.g. … Continue reading TdzStreamCache class for caching access to any TStream
Using PE Flags in Delphi
There was a discussion about using the PE flag IMAGE_FILE_LARGE_ADDRESS_AWARE and whether this is equivalent to compiling a program to 64 bit Windows target (no it's not) in the German Delphi Praxis forum. This prompted me to have a look at what kind of flags can be specified and how to do that for a … Continue reading Using PE Flags in Delphi