// 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;
...



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke