$theTitle=wp_title(" - ", false); if($theTitle != "") { ?>
About Virtualization, VDI, SBC, Application Compatibility and anything else I feel like
Today I reused a unit I wrote a long time ago for TSAdminEx that shows Resource Dialogs from DLL’s or Executables. I wrote it for a couple of reasons:
The code is hardly rocket science and could probably be improved and made more sophisticated but it works for me. I decided to share it since you may find it usefull.
Here is a small usage example that shows the Reset Password dialog from Active Directory Users & Computers. This dialog is in dsadmin.dll (on Windows Vista/7 you will find it in ds.admin.dll.mui in the language subfolder eg %systemroot%\system32\en-US but you can load it using just the dll name).
It looks like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 215 DIALOGEX 0, 0, 252, 139 STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP CAPTION "Reset Password" LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US FONT 8, "MS Shell Dlg" { CONTROL "&New password:", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 7, 10, 79, 10 CONTROL "", 220, EDIT, ES_LEFT | ES_PASSWORD | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 92, 7, 153, 14 CONTROL "&Confirm password:", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 7, 28, 79, 10 CONTROL "", 222, EDIT, ES_LEFT | ES_PASSWORD | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 92, 25, 153, 14 CONTROL "&User must change password at next logon", 261, BUTTON, BS_AUTOCHECKBOX | BS_LEFT | BS_TOP | BS_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 7, 46, 237, 10 CONTROL "The user must logoff and then logon again for the change to take effect.", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 14, 61, 231, 8 CONTROL "", 8327, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 7, 76, 238, 16 CONTROL "Unlock the user's &account", 8328, BUTTON, BS_AUTOCHECKBOX | BS_LEFT | BS_TOP | BS_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 14, 96, 230, 10 CONTROL "OK", 1, BUTTON, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 140, 118, 50, 14 CONTROL "Cancel", 2, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 195, 118, 50, 14 } |
The code to display it in Delphi looks like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | procedure TMainForm.ChangePasswordExecute(Sender: TObject); const NewPasswordId = 220; ConfirmPasswordId = 222; var ResDialog: TResDialog; NewPassword: TResControl; ConfirmPassword: TResControl; begin ResDialog := TResDialog.Create(Handle, 'dsadmin.dll', 215, InitChangePassword); NewPassword := ResDialog.Controls.FindByResourceId(NewPasswordId); ConfirmPassword := ResDialog.Controls.FindByResourceId(ConfirmPasswordId); if Assigned(NewPassword) and Assigned(ConfirmPassword) then begin ShowMessageFmt('New Password = %s Confirm Password =%s', [NewPassword.Text, ConfirmPassword.Text]); end; ResDialog.Free; end; |
The Constructor takes the following parameters:
My init procedure looks like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | procedure InitChangePassword(ResourceControlListPtr: PResControls); const MustChangeId = 261; UnlockId = 8328; var MustChange: TResControl; Unlock: TResControl; begin MustChange := ResourceControlListPtr^.FindByResourceId(MustChangeId); if Assigned(MustChange) then begin MustChange.Checked := True; end; Unlock := ResourceControlListPtr^.FindByResourceId(UnlockId); if Assigned(Unlock) then begin Unlock.Checked := True; end; end; |
Have fun with it and if you improve something please let me know!
ResDialogs (2445 downloads )
2 Responses for "Using Windows Dialogs from Delphi"
[…] few days ago I wrote about Using Windows Dialogs in your own programs, wouldn’t it be nice to be able to use Windows Resource Strings for the […]
Hi!
Sorry, I just can’t do it…
What is the library that contains TResDialog and TResControl?
Please help me!
Congrats for your job! It’s great and I use to subscribe you!
Leave a reply