The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 1,839 other subscribers

Archive for the ‘Software Development’ Category

I tend to forget there is a record intialiser TPair.Create(Key, Value) – via: delphi – TDictionary populated during create example code – Stack Overflow

Posted by jpluimers on 2018/09/18

I tend to forget that since TPair – introduced in Delphi 2009 – has had a TPair.Create(Key, Value)record initialiser since Delphi 2010, though only fully documented since Delphi XE4:

With some spart short methods, Cosmin Prund shows a really nice helper at [WayBack] delphi – TDictionary populated during create example code – Stack Overflow allowing a call like this:

  with TDictHelper<Integer, string> do
    Dict := Make([P(1, 'one'), P(2, 'two')]);

His answer has all the details (including describing the pros and conse), so here is only the helper:

uses
  SysUtils, Generics.Collections;

type
  TDictHelper<Key, Value> = class
  public
    class function P(const K:Key; const V:Value): TPair<Key, Value>;
    class function Make(init: array of TPair<Key, Value>): TDictionary<Key, Value>;overload;
    class function Make(KeyArray: array of Key; ValueArray: array of Value): TDictionary<Key, Value>;overload;
  end;

{ TDictHelper<Key, Value> }

class function TDictHelper<Key, Value>.Make(init: array of TPair<Key, Value>): TDictionary<Key, Value>;
var P: TPair<Key, Value>;
begin
  Result := TDictionary<Key, Value>.Create;
  for P in init do
    Result.AddOrSetValue(P.Key, P.Value);
end;

class function TDictHelper<Key, Value>.Make(KeyArray: array of Key;
  ValueArray: array of Value): TDictionary<Key, Value>;
var i:Integer;
begin
  if Length(KeyArray) <> Length(ValueArray) then
    raise Exception.Create('Number of keys does not match number of values.');
  Result := TDictionary<Key, Value>.Create;
  for i:=0 to High(KeyArray) do
    Result.AddOrSetValue(KeyArray[i], ValueArray[i]);
end;

class function TDictHelper<Key, Value>.P(const K: Key;
  const V: Value): TPair<Key, Value>;
begin
  Result := TPair<Key, Value>.Create(K, V);
end;

–jeroen

Posted in Conference Topics, Conferences, Delphi, Development, Event, Software Development | 7 Comments »

Locating the 7z.exe command-line tool on Windows

Posted by jpluimers on 2018/09/18

From one of my scripts: it will find a  64-bit 7z.exe if it was installed as part of the 7-zip installer, then run it with the parameters provided to the batch file.

  setlocal
  
:verify7zip
:: registry trick from http://www.robvanderwoude.com/files/sortdate2_nt.txt
:: extra trick: tokens=2* allows to get the  3rd (and beyond: space delimited!) value in one variable %%b
  for /F "tokens=2*" %%a IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\7-Zip" /v Path64 2^>nul') do set sevenZipDirectoryPath=%%b
  call :checkMissingSetting sevenZipDirectoryPath     || goto :help
  
  set sevenZipExeFilePath=%sevenZipDirectoryPath%7z.exe
  if not exist "%sevenZipExeFilePath%" call :showError "No 7-zip executable at %sevenZipExeFilePath%" || goto :help
  
:run7zip
  "%sevenZipExeFilePath%" %*

  endlocal
  goto :end
  
:checkMissingSetting
  if not defined %1 call :notifyMissingSetting %1 && exit /b 1
  call :showSetting %1
  exit /b 0
  goto :end

:notifyMissingSetting
  echo Registry didn't provide the environment variable "%1"
  goto :end
  
:showError
  :: remove double quotes using tilde trick:
  echo %~1
  
:help
  echo Syntax: %0 7z.exe-commandline-parameters
  goto :end

:end

–jeroen

Posted in 7zip, Batch-Files, Compression, Development, Power User, Scripting, Software Development | Leave a Comment »

YouTube video how to use DDetours library to hook Win32 API in Delphi

Posted by jpluimers on 2018/09/18

via [WayBack] Just was sneaking around YouTube and found this video showing how to use DDetours library to hook Win32 api. – Mahdi Safsafi – Google+

–jeroen

Read the rest of this entry »

Posted in Delphi, Development, Software Development | 3 Comments »

When Google Search returns one link twice in the results, thinking it was published on two different dates.

Posted by jpluimers on 2018/09/13

I laughed when https://www.google.com/#q=visual%20studio%20code%20indent%20settings%20per%20file%20type got me the first link twice (see below screenshot).

But I was glad that that link to [WayBack] visual studio code – How to set per-filetype tab size? – Stack Overflow.

This one:

In addition, it taught me how to configure the settings.json with md specific settings, which – despite the IDE indicating the JSON is invalid – just works: markdown indentation is now 2 character positions.

    "[md]": {
      "editor.tabSize": 2
    }

The search result:

Read the rest of this entry »

Posted in .NET, Chrome, Development, Google, GoogleSearch, Power User, Software Development, Visual Studio and tools, vscode Visual Studio Code | Leave a Comment »

chrisrolliston/CCR.PrefsIniFile: TCustomIniFile decendants for Delphi wrapping the Android, iOS and OS X Preferences APIs

Posted by jpluimers on 2018/09/13

If you need cross platform settings storage: [WayBackchrisrolliston/CCR.PrefsIniFile: TCustomIniFile decendants for Delphi wrapping the Android, iOS and OS X Preferences APIs

Via: [WayBack] In my application I use System.Win.Registry unit file to read or write to Windows Registry. Now that I have added MAC paltform I need an equivalent method to edit the plist file… – Dimitra Ger – Google+

–jeroen

Posted in Delphi, Development, Software Development | Leave a Comment »

Happy Day of the Programmer!

Posted by jpluimers on 2018/09/13

Happy Day of the Programmer!

Enjoy this little gem: [Archive.isHarvey Green’s answer to What are the best examples of software bugs that became features (a.k.a. misbugs)? – Quora

This is from an anecdote by Ken Demarest, one of the original developers who worked on Wing Commander I on the PC…

… we were getting an exception from our EMM386 memory manager when we exited the game. We’d clear the screen and a single line would print out, something like “EMM386 Memory manager error. Blah blah blah.” We had to ship ASAP. So I hex edited the error in the memory manager itself to read “Thank you for playing Wing Commander!”

via many sources that usually forget to mention the full source:

Thanks [Archive.isHarvey!

Some more links referenced by the above worth browsing on a day like this:

Read the rest of this entry »

Posted in Development, Software Development | Leave a Comment »

roll a dice – Google Search

Posted by jpluimers on 2018/09/13

Happy programmers’ day!

Source: roll a dice – Google Search

Inspired by [WayBackSure, Google. Sure.

–jeroen

Read the rest of this entry »

Posted in Algorithms, Development, Fun, Quotes, Software Development | Leave a Comment »

TIdHTTPWebBrokerBridge example for a standalone Indy based SOAP service

Posted by jpluimers on 2018/09/12

Since I tend to forget what bits and pieces are needed for TIdHTTPWebBrokerBridge, the below code piece from:

The [WayBack] WebReq.WebRequestHandler Function returns a reference to the global [WayBackTWebRequestHandler object. This object manages all the Web modules in the application, and creates Web request and response objects when the application receives HTTP request messages: TWebRequestHandler keeps a pool of active Web modules. In response to a request from the application, TWebRequestHandler creates a request object and assigns it to one of the active Web modules.

The code below is the Indy counterpart of hooking up a classic WebSnap WebBroker (you could also hook the Web.WebBroker.Application.WebModuleClass to TMyWebModule instead of the WebRequestHandler.WebModuleClass, as Web.WebBroker.Application.WebModuleClass is a TWebApplication which inherits from TWebRequestHandler).

Read the rest of this entry »

Posted in Conference Topics, Conferences, Delphi, Development, Event, Software Development | Leave a Comment »

Windows service states and service state transitions

Posted by jpluimers on 2018/09/12

States via [WayBackSERVICE_STATUS structure (Windows)

Value Hex Meaning
SERVICE_CONTINUE_PENDING 0x00000005 The service continue is pending.
SERVICE_PAUSE_PENDING 0x00000006 The service pause is pending.
SERVICE_PAUSED 0x00000007 The service is paused.
SERVICE_RUNNING 0x00000004 The service is running.
SERVICE_START_PENDING 0x00000002 The service is starting.
SERVICE_STOP_PENDING 0x00000003 The service is stopping.
SERVICE_STOPPED 0x00000001 The service is not running.

 

State transition overview

It’s complex as a table, so there are two.

  • The initial state is SERVICE_STOPPED.
  • Most logical targets are in italic.

Common transitions:

From state To state
SERVICE_STOPPED SERVICE_START_PENDING
SERVICE_START_PENDING SERVICE_RUNNING
SERVICE_START_PENDING SERVICE_STOPPED
SERVICE_START_PENDING SERVICE_STOP_PENDING
SERVICE_RUNNING SERVICE_STOPPED
SERVICE_RUNNING SERVICE_STOP_PENDING
SERVICE_STOP_PENDING SERVICE_STOPPED

Infrequent transitions:

From state To state
SERVICE_RUNNING SERVICE_PAUSE_PENDING
SERVICE_RUNNING SERVICE_PAUSED
SERVICE_PAUSE_PENDING SERVICE_PAUSED
SERVICE_PAUSE_PENDING SERVICE_STOP_PENDING
SERVICE_PAUSE_PENDING SERVICE_STOPPED
SERVICE_PAUSED SERVICE_RUNNING
SERVICE_PAUSED SERVICE_CONTINUE_PENDING
 SERVICE_PAUSED SERVICE_STOP_PENDING
 SERVICE_PAUSED SERVICE_STOPPED
SERVICE_CONTINUE_PENDING SERVICE_RUNNING
 SERVICE_CONTINUE_PENDING  SERVICE_STOP_PENDING
 SERVICE_CONTINUE_PENDING  SERVICE_STOPPED

Read the rest of this entry »

Posted in Development, Software Development, Windows Development | Leave a Comment »

delphi – How to make a combo box with fulltext search autocomplete support? – Stack Overflow

Posted by jpluimers on 2018/09/12

Interesting solutions based on the TLama first answer at [WayBackdelphi – How to make a combo box with fulltext search autocomplete support? – Stack Overflow

Via: [WayBack] Nice solution by TLama – Thomas Mueller (dummzeuch) – Google+

–jeroen

Posted in Delphi, Development, Software Development | Leave a Comment »