Autor Beitrag
locutus2k5
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 33

Windows Vista Ultimate
BDS2005
BeitragVerfasst: Fr 30.09.05 17:29 
Hallo!

Ich möchte eine kleine Komponente schreiben, mit welcher ich bestimmte Registryeinträge schneller auslesen kann. Die Komponente soll lediglich eine bestimmte Anzahl von Schlüsseln auslesen und mir zur verfügung stellen ohne das ich mit Variabeln schonglieren muss. Ich habe folgenden Code geschrieben, nur tut sich Delphi stur und meldet "Abstrakter Fehler" ... Des weiteren kommt ein Runtime-Error wenn ich die Registry in der Komponente anspreche... Bitte helft mir :?

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
type
TRunItem = class(TComponent)
private
{ Private-Deklarationen }
FHKCU_Run: TStrings; //<---
function GetHKCU_Run: TStrings;
//procedure SetStrList(const Value: Tstrings);//<----
protected
{ Protected-Deklarationen }
public
{ Public-Deklarationen }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
{ Published-Deklarationen }
property HKCU_Run: TStrings read GetHKCU_Run; //<--
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Standard', [TRunItem]);
end;

{ TRunItem }

constructor TRunItem.Create(AOwner: TComponent);
begin
inherited create(AOwner);
FHKCU_Run := TStringlist.Create;
end;

destructor TRunItem.Destroy;
begin
FHKCU_Run.Free;
inherited destroy;
end;

{procedure TRunItem.SetStrList(const Value: Tstrings);
begin
FStrList.Assign(Value); //assign ist wichtig, keine Zuweisung mit := !!!
end;}


function TRunItem.GetHKCU_Run: TStrings;
var S: TStrings;
// R: TRegistry;
begin
// R := TRegistry.Create(KEY_READ);
// R.Rootkey := HKEY_CURRENT_USER;
// If R.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', False) Then;
// R.CloseKey;
// R.Free;
S := TStrings.Create;
S.Add('TEST');
FHKCU_Run.Assign(S);
Result := FHKCU_Run;
S.Free;

end;
cartridge
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 209

Win XP
D4 Prof,D6 Prof
BeitragVerfasst: Fr 30.09.05 17:37 
Hi!

Als erstes mal: TStrings ist nicht TStringList!

Du deklarierst TStrings und erzeugst eine StirngList.
Der Compiler lässt das durchgehen, aber es kommt zu einem Laufzeitfehler.

Leider habe ich momentan nicht die Zeit, mir den gesamten Quelltext an zu gucken.
Vielleicht ist es auch ratsam, Die Stringlist bei Erstellung der Unit zu erstellen...

initialization
FHKCU_Run:= TStringList.Create;

finalization
FHKCU_Run.Free;


Gruß Ingo
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 30.09.05 17:39 
ausblenden Delphi-Quelltext
1:
var S: TStrings;					

TStrings ist eine abstrakte Klasse, deren methoden weitgehen aus leeren Methoden bestehen, die erst von abgeleiteten Klassen zum Leben erweckt werden. Nimm statt dessen TStringList als Klasse.
locutus2k5 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 33

Windows Vista Ultimate
BDS2005
BeitragVerfasst: Fr 30.09.05 17:44 
Auch nach beseitigung des fehlers kommt immer noch die selbe Fehlermeldung...
locutus2k5 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 33

Windows Vista Ultimate
BDS2005
BeitragVerfasst: Fr 30.09.05 17:47 
Ich danke euch für die schnelle Antwort! Lucki, deine Aufklärung hat geholfen!

@Lucki:
PS.: Ich verfolge deine Werke und Tutorials schon eine ganze weile. Hast du Delphi - Programmierung im Studium gelernt?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 01.10.05 15:05 
Ich bin Autodidakt.