Memodaki deger

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
semenderip
Üye
Mesajlar: 42
Kayıt: 04 Nis 2007 03:57

Memodaki deger

Mesaj gönderen semenderip »

İyi günler arkadaşlar benim şöyle bir sorum olacak daha önce forumda baya bir calışma olmuşltu bunun hakkında memodaki degeri direk registrye yazma bu olayı yaptım fakat şöyle bir sorun var mesela

[HKEY_CURRENT_USER\Control Panel\aaaaa]
'test1'='test2'
@='c:\\TEST' Bu şekilde bir anahtar girdigimde registriye yazılıyor dogru olarak fakat

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Control Panel\Cursors]
@=''
'Scheme Source'=dword:00000002

bunu yazdıgımda yine registriye anahtarı işliyor fakat dikkat ettiyseniz ikinci verdigim deger word degil dword registriye dword olarak degil bunuda word degeri olarak işliyor sorun memo satırındaki değerin dword mü string mi olduğunun algılanmasında eger bir cözüm bulursanız teşekkürü bir borç bilirim şimdiden sagolun
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba,
TRegsitry nesnesini kullandığınızı varsayıyorum, bu nesnenin değer yazmak için kullandığı çeşitli metodlar var siz WriteString kullanıyorsunuz anladığım kadayırla, buda dize değeri yaratır, WriteInteger kullanırsanız DWORD değeri yaratır. kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
semenderip
Üye
Mesajlar: 42
Kayıt: 04 Nis 2007 03:57

Mesaj gönderen semenderip »

kardeş sagolasın ama kodla anlatmak daha dogru olacak önce programı anlatayım programda iki butonum var birincisi memoya girilen degeri direk rege yazıyor diğeri ise masaüstüne reg anahterı olarak kayıt yapıyor soru şu memoya girilrn deger strig değilde dword olacaksa nasıl olacak
  • unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, registry,StrUtils;

    type
    TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    private
    { Private declarations }
    public
    rootkey:hkey;
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}
    procedure SaveStr(Source,FileName:AnsiString);
    var
    F:File;
    SaveMode:Integer;
    begin
    AssignFile(F,FileName);
    SaveMode:=FileMode;
    FileMode:=1;
    try
    Rewrite(F,1);
    try
    BlockWrite(F,Source[1],Length(Source));
    finally
    CloseFile(F);
    end;
    except
    on EInOutError do raise Exception.Create('Yazma Hatası '+Filename);
    end;
    FileMode:=SaveMode;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var ad:string;
    reg: TRegistry;
    begin
    SaveStr(Memo1.Text,PChar(ExtractFilePath(ParamStr(0))+'\mtct.reg'));
    ad:=reg.ReadString('memo1.text');
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var i,j,k:integer;
    rt,rv,d,v:string;
    reg: TRegistry;
    begin

    for i:=1 to Memo1.Lines.Count do
    begin
    if LeftStr(memo1.Lines.Strings,1)='[' then
    begin
    rt:=Memo1.Lines.Strings;
    k:=length(rt);
    j:=Pos('\',rt);
    rt:=midStr(rt,2,j-2);
    rv:=midStr(Memo1.Lines.Strings,j+1,k-j-1);
    showmessage(rt+#13+rv);
    end
    else if LeftStr(memo1.Lines.Strings,1)='@' then
    begin
    k:=length(Memo1.Lines.Strings);
    j:=pos('=',Memo1.Lines.Strings);
    d:='@';
    v:=midStr(Memo1.Lines.Strings,j+2,k-j-2);
    j:=length(v);
    v:=PChar(LeftStr(v,2)+midStr(v,4,100));
    showmessage(d+#13+v);
    Reg:=TRegistry.Create;
    if rt='HKEY_CLASSES_ROOT' then Reg.RootKey:=HKEY_CLASSES_ROOT
    else if rt='HKEY_CURRENT_USER' then Reg.RootKey:=HKEY_CURRENT_USER
    else if rt='HKEY_LOCAL_MACHINE' then Reg.RootKey:=HKEY_LOCAL_MACHINE
    else if rt='HKEY_USERS' then Reg.RootKey:=HKEY_USERS
    else if rt='HKEY_CURRENT_CONFIG' then Reg.RootKey:=HKEY_CURRENT_CONFIG
    else
    begin
    showmessage('Rootkey hatalı yazdınız');
    Reg.CloseKey;
    Reg.Free;
    close;
    end;
    if Reg.OpenKey (rv, true) then Reg.WriteString('',v);
    reg.CloseKey;
    reg.free;
    end
    else if memo1.Lines.Strings='' then
    else
    begin
    k:=length(Memo1.Lines.Strings);
    j:=pos('=',Memo1.Lines.Strings);
    d:=midStr(Memo1.Lines.Strings[i],2,j-3);
    v:=midStr(Memo1.Lines.Strings[i],j+2,k-j-2);
    showmessage(d+#13+v);

    Reg:=TRegistry.Create;
    if rt='HKEY_CLASSES_ROOT' then Reg.RootKey:=HKEY_CLASSES_ROOT
    else if rt='HKEY_CURRENT_USER' then Reg.RootKey:=HKEY_CURRENT_USER
    else if rt='HKEY_LOCAL_MACHINE' then Reg.RootKey:=HKEY_LOCAL_MACHINE
    else if rt='HKEY_USERS' then Reg.RootKey:=HKEY_USERS
    else if rt='HKEY_CURRENT_CONFIG' then Reg.RootKey:=HKEY_CURRENT_CONFIG
    else
    begin
    showmessage('Rootkey hatalı yazdınız');
    Reg.CloseKey;
    Reg.Free;
    close;
    end;
    if Reg.OpenKey (rv, true) then Reg.WriteString(d,v);
    reg.CloseKey;
    reg.free;
    end;


    end;
    end;


    end.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Şimdi hazır kod değilde mantığını anlamanız için daha doğru olacağını düşünüyorum, kodunuzu incelediğinizde Registry e sürekli r.WriteString metodu ile değer yazıyorsunuz, WriteString metodu, Registry e String değer alan DizeDeğeri yazar, eğer r.WriteInteger Metoduyla değer yazarsanız bu DWORD olarak Registrye kaydolur, kodunuzda DWORD değer yazmak istediğiniz bölümlerdeki WriteString ifadelerini WriteInteger olarak değiştirin, tabi WriteInteger metodu Integer tipinde parametre alacağı için gerekli tip uyumuna dikkat etmelisiniz.
Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Cevapla