📄 jvquninstallcontrols.pas
字号:
case Dm of
hkCurrentUser:
Result := 'HKEY_CURRENT_USER';
hkLocalMachine:
Result := 'HKEY_LOCAL_MACHINE';
end;
end;
begin
FFolders := TStringList.Create;
FItems := TStringList.Create;
Strings.BeginUpdate;
Reg := TSafeRegIniFile.Create('');
// FFolders.Sorted := True;
with Reg do
try
for Dm := Low(FKey) to High(FKey) do
if Dm in DisplayModes then
begin
RootKey := FKey[Dm];
if OpenKeyReadOnly(cUninstallPath) then
begin
ReadSections(FFolders);
for I := FFolders.Count - 1 downto 0 do
begin
Tmp := ReadString(FFolders[I], cDisplayName, '');
if (Tmp = '') and not ShowAll then
FFolders.Delete(I)
else
begin
UI := TJvUninstallInfo.Create;
if Tmp = '' then
Tmp := FFolders[I];
UI.HKey := RootKey;
UI.HKeyName := DMToStr(Dm);
UI.Section := cUninstallPath + FFolders[I];
ReadSection(FFolders[I], FItems);
ReadProperties(Reg, FFolders[I], ShowEmptyValues, FItems, UI.Properties);
Strings.AddObject(Tmp, UI);
OpenKeyReadOnly(cUninstallPath);
end;
end;
end;
end;
finally
Free;
FFolders.Free;
FItems.Free;
Strings.EndUpdate;
end;
end;
//=== { TJvUninstallComboBox } ===============================================
constructor TJvUninstallComboBox.Create(AComponent: TComponent);
begin
inherited Create(AComponent);
Style := csDropDownList;
FDisplayMode := [hkCurrentUser, hkLocalMachine];
end;
destructor TJvUninstallComboBox.Destroy;
begin
Clear;
inherited Destroy;
end;
procedure TJvUninstallComboBox.Rebuild;
var
I: Integer;
begin
if ([csLoading, csDestroying] * ComponentState) <> [] then
Exit;
I := ItemIndex;
Clear;
GetUninstallApps(DisplayMode, Items, ShowAll, ShowEmptyValues);
ItemIndex := I;
if (Items.Count > 0) and (ItemIndex < 0) then
ItemIndex := 0;
end;
function TJvUninstallComboBox.GetDisplayName: string;
begin
if ItemIndex > -1 then
Result := TJvUninstallInfo(Items.Objects[ItemIndex]).Properties.Values[cDisplayName]
else
Result := '';
end;
function TJvUninstallComboBox.GetItems: TStrings;
begin
Result := inherited Items;
end;
function TJvUninstallComboBox.GetSection: string;
begin
if ItemIndex > -1 then
Result := TJvUninstallInfo(Items.Objects[ItemIndex]).Section
else
Result := '';
end;
function TJvUninstallComboBox.GetUninstallString: string;
begin
if ItemIndex > -1 then
Result := TJvUninstallInfo(Items.Objects[ItemIndex]).Properties.Values[cUninstallString]
else
Result := '';
end;
procedure TJvUninstallComboBox.SetDisplayMode(const Value: TJvUCBDisplayModes);
begin
if FDisplayMode <> Value then
begin
FDisplayMode := Value;
Rebuild;
end;
end;
procedure TJvUninstallComboBox.SetShowAll(const Value: Boolean);
begin
if FShowAll <> Value then
begin
FShowAll := Value;
Rebuild;
end;
end;
procedure TJvUninstallComboBox.SetShowEmptyValues(const Value: Boolean);
begin
if FShowEmptyValues <> Value then
begin
FShowEmptyValues := Value;
Rebuild;
end;
end;
procedure TJvUninstallComboBox.Clear;
var
I: Integer;
begin
if Parent = nil then
Exit;
for I := 0 to Items.Count - 1 do
Items.Objects[I].Free;
inherited Clear;
end;
procedure TJvUninstallComboBox.CreateWidget;
begin
inherited CreateWidget;
if ItemIndex < 0 then
Rebuild;
end;
function TJvUninstallComboBox.GetProperties: TStrings;
begin
Result := nil;
if ItemIndex > -1 then
Result := TJvUninstallInfo(Items.Objects[ItemIndex]).Properties;
end;
function TJvUninstallComboBox.GetHKey: HKEY;
begin
Result := 0;
if ItemIndex > -1 then
Result := TJvUninstallInfo(Items.Objects[ItemIndex]).HKey;
end;
function TJvUninstallComboBox.GetHKeyName: string;
begin
Result := '';
if ItemIndex > -1 then
Result := TJvUninstallInfo(Items.Objects[ItemIndex]).HKeyName;
end;
procedure TJvUninstallComboBox.SetSorted(const Value: Boolean);
var
S: string;
begin
if Value <> inherited Sorted then
begin
if ItemIndex > -1 then
S := Items[ItemIndex]
else
S := '';
inherited Sorted := Value;
if not Value then
Rebuild;
if S <> '' then
ItemIndex := Items.IndexOf(S);
end;
end;
//=== { TJvUninstallListBox } ================================================
constructor TJvUninstallListBox.Create(AComponent: TComponent);
begin
inherited Create(AComponent);
FDisplayMode := [hkCurrentUser, hkLocalMachine];
end;
destructor TJvUninstallListBox.Destroy;
begin
Clear;
inherited Destroy;
end;
function TJvUninstallListBox.GetDisplayName: string;
begin
if ItemIndex > -1 then
Result := TJvUninstallInfo(Items.Objects[ItemIndex]).Properties.Values[cDisplayName]
else
Result := '';
end;
function TJvUninstallListBox.GetUninstallString: string;
begin
if ItemIndex > -1 then
Result := TJvUninstallInfo(Items.Objects[ItemIndex]).Properties.Values[cUninstallString]
else
Result := '';
end;
function TJvUninstallListBox.GetItems: TStrings;
begin
Result := inherited Items;
end;
function TJvUninstallListBox.GetSection: string;
begin
if ItemIndex > -1 then
Result := TJvUninstallInfo(Items.Objects[ItemIndex]).Section
else
Result := '';
end;
procedure TJvUninstallListBox.SetDisplayMode(const Value: TJvUCBDisplayModes);
begin
if FDisplayMode <> Value then
begin
FDisplayMode := Value;
Rebuild;
end;
end;
procedure TJvUninstallListBox.SetShowAll(const Value: Boolean);
begin
if FShowAll <> Value then
begin
FShowAll := Value;
Rebuild;
end;
end;
procedure TJvUninstallListBox.SetShowEmptyValues(const Value: Boolean);
begin
if FShowEmptyValues <> Value then
begin
FShowEmptyValues := Value;
Rebuild;
end;
end;
procedure TJvUninstallListBox.Clear;
var
I: Integer;
begin
if Parent = nil then
Exit;
for I := 0 to Items.Count - 1 do
Items.Objects[I].Free;
Items.Clear;
inherited Clear;
end;
procedure TJvUninstallListBox.Rebuild;
var
I: Integer;
begin
if ([csLoading, csDestroying] * ComponentState) <> [] then
Exit;
I := ItemIndex;
Clear;
GetUninstallApps(DisplayMode, Items, ShowAll, ShowEmptyValues);
ItemIndex := I;
if (Items.Count > 0) and (ItemIndex < 0) then
ItemIndex := 0;
end;
procedure TJvUninstallListBox.CreateWidget;
begin
inherited CreateWidget;
if ItemIndex < 0 then
Rebuild;
end;
function TJvUninstallListBox.GetProperties: TStrings;
begin
Result := nil;
if ItemIndex > -1 then
Result := TJvUninstallInfo(Items.Objects[ItemIndex]).Properties;
end;
function TJvUninstallListBox.GetHKey: HKEY;
begin
Result := 0;
if ItemIndex > -1 then
Result := TJvUninstallInfo(Items.Objects[ItemIndex]).HKey;
end;
function TJvUninstallListBox.GetHKeyName: string;
begin
Result := '';
if ItemIndex > -1 then
Result := TJvUninstallInfo(Items.Objects[ItemIndex]).HKeyName;
end;
procedure TJvUninstallListBox.SetSorted(const Value: Boolean);
var
S: string;
begin
if Value <> inherited Sorted then
begin
if ItemIndex > -1 then
S := Items[ItemIndex]
else
S := '';
inherited Sorted := Value;
if not Value then
Rebuild;
if S <> '' then
ItemIndex := Items.IndexOf(S);
end;
end;
procedure TJvUninstallComboBox.RefreshItem;
begin
Click;
Change;
end;
procedure TJvUninstallListBox.RefreshItem;
begin
Click;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -