Avatar billede koonz Nybegynder
04. februar 2001 - 18:40 Der er 6 kommentarer og
1 løsning

Ny begynder i Components....

Jeg er så småt begyndt at sysle med components - det går da også meget godt, indtil den skulle bruges - jeg troede bare det var at lave functioner/procedure og så kalde dem fra mit \"main program\" men efter at have læst lidt hist og her, har jeg fundt ud af jeg måske skal lave en event, for at starte procedure/eventen...

Jeg ligger lige koden..


unit RegRW;

interface

uses WinTypes, WinProcs, Messages, SysUtils, Classes, Controls,
    Forms, Graphics, Registry;

type
  TWriteReadReg = class(TComponent)
    private
      { Private fields of TWriteReadReg }
        { Storage for property RegKey }
        FRegKey : String;
        { Storage for property RegPath }
        FRegPath : String;
        { Storage for property RegRootPath }
        FRegRootPath : HKEY;
        { Storage for property RegValue }
        FRegValue : String;

      { Private methods of TWriteReadReg }
        { Method to set variable and property values and create objects }
        procedure AutoInitialize;
        { Method to free any objects created by AutoInitialize }
        procedure AutoDestroy;

    protected
      { Protected fields of TWriteReadReg }

      { Protected methods of TWriteReadReg }

    public
      { Public fields and properties of TWriteReadReg }

      { Public methods of TWriteReadReg }
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
        { For reading keyvalue }
        function RegRead : String;
        { For writing registry value to key }
        procedure RegWrite;

    published
      { Published properties of TWriteReadReg }
        { Key for read/writing }
        property RegKey : String read FRegKey write FRegKey;
        { Path for key }
        property RegPath : String read FRegPath write FRegPath;
        { Root Path }
        property RegRootPath : HKEY read FRegRootPath write FRegRootPath;
        { Reg value }
        property RegValue : String read FRegValue write FRegValue;

  end;

procedure Register;

implementation

procedure Register;
begin
    { Register TWriteReadReg with Conatech as its
      default page on the Delphi component palette }
    RegisterComponents(\'Conatech\', [TWriteReadReg]);
end;

{ Method to set variable and property values and create objects }
procedure TWriteReadReg.AutoInitialize;
begin
    FRegKey := \'TestKey\';
    FRegPath := \'/Software/Conatech/test\';
    FRegRootPath := HKEY_LOCAL_MACHINE;
    FRegValue := \'Testvalue\';
end; { of AutoInitialize }

{ Method to free any objects created by AutoInitialize }
procedure TWriteReadReg.AutoDestroy;
begin
    { No objects from AutoInitialize to free }
end; { of AutoDestroy }

constructor TWriteReadReg.Create(AOwner: TComponent);
begin
    { Call the Create method of the parent class }
    inherited Create(AOwner);

    { AutoInitialize sets the initial values of variables and      }
    { properties; also, it creates objects for properties of      }
    { standard Delphi object types (e.g., TFont, TTimer,          }
    { TPicture) and for any variables marked as objects.          }
    { AutoInitialize method is generated by Component Create.      }
    AutoInitialize;

    { Code to perform other tasks when the component is created }
   
end;

destructor TWriteReadReg.Destroy;
begin
    { AutoDestroy, which is generated by Component Create, frees any  }
    { objects created by AutoInitialize.                              }
    AutoDestroy;

    { Here, free any other dynamic objects that the component methods  }
    { created but have not yet freed.  Also perform any other clean-up }
    { operations needed before the component is destroyed.            }

    { Last, free the component by calling the Destroy method of the    }
    { parent class.                                                    }
    inherited Destroy;
end;

{ For reading keyvalue }
function TWriteReadReg.RegRead : String;
var
Registry : TRegistry;
begin
Registry := TRegistry.Create;
Registry.RootKey := RegRootPath;
try
  if Registry.OpenKey(RegPath, False) then
  begin
    Result := Registry.ReadString(RegKey);
  end
  finally
  Registry.Free;
  end;
end;

{ For writing registry value to key }
procedure TWriteReadReg.RegWrite;
var
Registry : TRegistry;
begin
Registry := TRegistry.Create;
Registry.RootKey := RegRootPath;
try
  if Registry.OpenKey(RegPath, True) then
  begin
    Registry.WriteString(RegKey, RegValue);
  end
  finally
  Registry.Free;
  end;
end;
end.

Jeg troede så bare jeg kunne

WriteReadReg1.RegWrite

Fra mit program, men den går ikke, nogen der vil forklare lidt ?

Avatar billede moa Nybegynder
04. februar 2001 - 18:49 #1
Nu har jeg ikke læst koden, men et hurtigt gæt er at du ikke har deklareret en variabel af typen TWriteReadReg?

Altså en linie al\'a:

var
  WriteReadReg1: TWriteReadReg;

også senere
WriteReadReg1 := TWriteReadReg.create();

Derefter burde du kunne anvende operationerne, som fx.
WriteReadReg1.RegWrite();
Avatar billede koonz Nybegynder
04. februar 2001 - 18:56 #2
Det havde jeg ikke - jeg ved ikke lige om det er problemet - jeg har ikke prøvet det endnu..

Er der mulighed for at jeg kan lave den deklareret i mit komponent, så jeg ikke får de problemer ?

Avatar billede martinlind Nybegynder
04. februar 2001 - 19:12 #3
Moa >> Det er en component koonz har lavet.

Koonz det du mangler er nok at installere den, hvis du ikke kan finde den på \"Conatech\" paletetab\'en så skal du inst. ved at bruge \"install comp.\" fra menu\'en.

og med hensyn til din kode kan jeg se at du ikke for kørt din init rutine, som du tror, det er måske også lidt skørt da det er en komponent med poblished prop.\'s som jo sættes designtime, men hvis du gerne vil have dem sat, skal du tænke på en component\'s måde at virke på og delphi måde at loade en component, det der sker er at delphi creater en component at den type du har placeret på din form, derefter kalder den loaded, som loader den opsætning der er gem i form\'ens dfm fil
og sætter den created component til den, dvs. at delphi først kalder create derefter loaded inden den er færdig med at loade en form. Men alt dette kan du læse meget mere om i online hjælpen.

/Martin
Avatar billede koonz Nybegynder
04. februar 2001 - 19:26 #4
Martin - Tak foral hjælpen *SS*

Jo den er godt nok installeret, og jeg kan placere den på formen - og lave følgende kode

WriteReadReg1.RegWrite;

Jeg forstår bare ikke en dydt af det du skriver til sidst - men vil det sige at jeg ikke får mine \"default værdier\" puttet i ? - jeg kan jo se dem i min object inspector ?
Avatar billede martinlind Nybegynder
04. februar 2001 - 22:48 #5
Jamen hvad var så problemet ?, mht. loaded skal du bare huske at hvis det skal glæde efter den er loaded skal det stå i den, du kan læse mere i hjælpen.
Avatar billede koonz Nybegynder
04. februar 2001 - 23:19 #6
*LOL*

Funktionen fungerer ikke, den skriver ikke til registry - men måske mit problem skal søges et helt andet sted...
Avatar billede koonz Nybegynder
05. februar 2001 - 00:17 #7
Hunden lå begravet et andet sted.....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester