تصور أن عندك برنامج يتحكم في كثير من مفاتيح السجل Registry فهل تقوم بكتابة كود لكل قيمة ومفتاح إذاً سيكون هذا مملاًّ خذ هذا الكود المتواضع وانظر فيه
procedure TForm1.RegKeyOpen(const
Rootkey: Cardinal; // المتاح الرئيسي
PathKey: String; //مسار المفتاح المراد فتحه أو إنشاؤه
CanCreate: Boolean; // تحديد إنشاء المفتاح عند عدم وجده
NameKey, //اسم المفتاح
ValueType: String; //نوع قيمة المفتاح
ValueKey:Variant); //قيمة المتاح
function ValueTypeSelect(Selector: string;
CaseList: array of string): Integer;
var cnt: integer;
begin {شكراً للأخ العزيز Tmaaa الذي دلني عليها}
Result:=-1;
for cnt:=0 to Length(CaseList)-1 do
begin
if CompareText(Selector, CaseList[cnt]) = 0 then
begin
Result:=cnt;
Break;
end;
end;
end;
var
Reg : TRegistry;
ValuType :array[0..8] of string;
begin
ValuType [0] := 'Bool';
ValuType [1] := 'Currency';
ValuType [2] := 'Date';
ValuType [3] := 'Time';
ValuType [4] := 'DateTime';
ValuType [5] := 'ExpandString';
ValuType [6] := 'Float';
ValuType [7] := 'String';
ValuType [8] := 'Integer';
Reg := TRegistry.Create;
Try
Reg.RootKey := Rootkey;
if Reg.OpenKey (PathKey, CanCreate) then
begin
case ValueTypeSelect(ValueType ,ValuType) of
0 : Reg.WriteBool (NameKey,ValueKey);
1 : Reg.WriteCurrency (NameKey,ValueKey);
2 : Reg.WriteDate (NameKey,ValueKey);
3 : Reg.WriteTime (NameKey,ValueKey);
4 : Reg.WriteDateTime (NameKey,ValueKey);
5 : Reg.WriteExpandString (NameKey,ValueKey);
6 : Reg.WriteFloat (NameKey,ValueKey);
7 : Reg.WriteString (NameKey,ValueKey);
8 : Reg.WriteInteger (NameKey,ValueKey);
end;
Reg.CloseKey;
end;
Finally
Reg.Free;
end;
end;ويكون استدعاه كالتالي :
procedure TForm1.Button1Click(Sender: TObject); begin RegKeyOpen ( HKEY_CURRENT_USER , 'Control PanelDesktop', True, 'MenuShowDelay','string' , EditMenu.Text); end; // True إذاً سيتم إنشاء المفتاح إذا لم يجده // 'MenuShowDelay' مفتاح التحكم بسرعة إظهار القوائم يأخذ القيمة 0-999 //EditMenu : TEdit
أرجو أن يكون الشرح واضحاً
وإذا كان هناك طريقة أنسب وأبسط فأرجو التنبيه عليها
وجزاكم الله خير الجزاء (f) (f)