// Es wird ein
Dialog erzeugt, der die Checkbox
// "Diesen
Dialog nicht mehr anzeigen"
enthält.
// Nach anklicken dieser Box erschein der Dialog
// normalerweise nicht mehr.
//
Varinate 1: Getestet mit D4 unter XP
var
GlobalUnique: string = '{13C4DAB3-1540-4769-B928-45D65519812C}';
// erzeugt durch Strg+Shift+G
function NichtMehrAnzeigen(h: THandle; Txt, Title, GuidStr: string;
uType: Uint): integer;
var
HL: THandle;
Dlg: function(h: THandle; Txt, Title: PChar;
dw: DWORD; nll: integer; GStr: PChar): integer; stdcall;
begin
result := maxint;
HL := LoadLibrary('shlwapi.dll');
if HL <> 0 then begin
@Dlg := GetProcAddress(HL, MAKEINTRESOURCE($B9));
if Assigned(Dlg) then
result := Dlg(h, PChar(Txt), PChar(Title),
uType, 0, PChar(GuidStr));
FreeLibrary(HL);
end;
end;
// Beispielaufruf
procedure TForm1.Button3Click(Sender: TObject);
var
i: integer;
begin
i := NichtMehrAnzeigen(handle, 'Möchten Sie mein Programm wirklich starten?',
'Dialog-Titel', GlobalUnique, MB_YESNO or MB_ICONQUESTION);
case i of
{ 0: showmessage('Ätsch, der Dialog wird nicht mehr angezeigt'); }
MAXINT: showmessage('FEHLER');
IDCANCEL: showmessage('Abbrecher!');
IDYES: showmessage('Selber Schuld.');
IDNO: showmessage('Na Gott sei Dank.');
end;
end;
// --- Und so kann man das wieder zurücknehmen: ---
uses registry;
procedure DochWiederAnzeigen;
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\' +
'Explorer\DontShowMeThisDialogAgain', True)
then Reg.DeleteValue(GlobalUnique);
finally
Reg.CloseKey;
Reg.Free;
end;
end;
procedure
TForm1.Button4Click(Sender: TObject);
begin
DochWiederAnzeigen;
end;
//
------------------------------------------------------
//
Varinate 2: Getestet mit D2010 unter W7
...
function NichtMehrAnzeigen(h: THandle; Txt, Title, GuidStr: string;
uType: Uint): integer;
var
Dlg: function(h: THandle; Txt, Title: AnsiString; dw: DWORD; nll: Integer;
GStr: PChar): Integer;
stdcall;
HL :
THandle;
begin
Result := maxint;
HL := LoadLibrary('shlwapi.dll');
if HL <> 0 then
begin
@Dlg := GetProcAddress(HL, MAKEINTRESOURCE($B9));
if Assigned(Dlg) then
Result := Dlg(h, PAnsiChar(AnsiString(Txt)),
PAnsiChar(AnsiString(Title)), uType, 0,
PChar(AnsiString(GlobalUnique)));
end;
end;
...
|