Autor Beitrag
JRegier
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Do 01.09.05 06:57 
hi, ich habe mit der Registry noch nicht soviel gemact und habe meine ersten Schwierigkeiten!

Was ist am Code falsch? Ich versuche alle Schriftarten mit zugehörigen Dateinamen auszulesen!
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
    Reg := TRegistry.Create;
    FontNames := TStringList.Create;
    FontFiles := TStringList.Create;
    try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts', False) then
    begin
    Reg.GetKeyNames(FontNames);
    Reg.GetValueNames(FontFiles);
    end;
    except
    end;
    Reg.CloseKey;
    Reg.Free;

    FontsListBox.Items.Clear;
    for I := 0 to FontNames.Count - 1 do
    begin
    FontsListBox.Items.Add(FontNames.Strings[I]+';'+FontFiles.Strings[I]);
    end;
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 01.09.05 07:19 
Dein Code dürfte deshalb nicht funz... äh, funktionieren :roll:, weil es sich bei den Einträgen in besagtem Schlüssel nur um Werte (Values) handelt. Es gibt keine Schlüsses (Keys). Jedenfalls nicht bei mir. Du nimmst also nur GetValueNames, und gehst dann in einer Schleife durch alle gefundenen Namen durch und liest für jeden den entsprechenden Eintrag aus (per ReadString).


Anmerkung nebenbei: Ich persönlich würde andere, ins OS eingebaute Methoden empfehlen, um die installierten Schriftarten inkl. Dateinamen zu ermitteln, denn der Weg mit der Registry ist fehleranfällig und muss für jede Windows-Version angepasst werden.
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Do 01.09.05 07:27 
user profile iconMathiasSimmack hat folgendes geschrieben:
Dein Code dürfte deshalb nicht funz... äh, funktionieren :roll:, weil es sich bei den Einträgen in besagtem Schlüssel nur um Werte (Values) handelt. Es gibt keine Schlüsses (Keys). Jedenfalls nicht bei mir. Du nimmst also nur GetValueNames, und gehst dann in einer Schleife durch alle gefundenen Namen durch und liest für jeden den entsprechenden Eintrag aus (per ReadString).


Anmerkung nebenbei: Ich persönlich würde andere, ins OS eingebaute Methoden empfehlen, um die installierten Schriftarten inkl. Dateinamen zu ermitteln, denn der Weg mit der Registry ist fehleranfällig und muss für jede Windows-Version angepasst werden.


Vielen Dank, für die Geburtshilfe! Welche in OS eingebauten Methoden? Wie heißen die?
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Do 01.09.05 08:04 
Dieser Code will einfach nicht Schriftarten kopieren!

// EDIT
OK ich hab ein logischen Fehler entdeckt

ausblenden 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:
Reg := TRegistry.Create;
    FontNames := TStringList.Create;
    try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts', False) then
    begin
    Reg.GetValueNames(FontNames);
    end;
    except
    end;


    for I := 0 to FontsListBox.Items.Count - 1 do
    begin
    AFont := FontsListBox.Items.Strings[I];
      for J := 0 to FontNames.Count - 1 do
      begin
      if(Pos(AFont, FontNames.Strings[J]) > 0)then
      begin
      AFont := Reg.ReadString(FontNames.Strings[J]);   // in dieser Schleife muß ich anderen String nehmen anstatt AFont 
      if(Pos('\', AFont) > 0)then
      CopyFileTo(AFont, FontsDest)
      else
      CopyFileTo(FontsDir+AFont,FontsDest);
      end;
      end;
    end;
    FontNames.Free;
    Reg.CloseKey;
    Reg.Free;


Warum funzt das CopyFile nicht?

//EDIT

ich habe meinen logischen Fehler entdeckt aber ich muß noch testen
LigH
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 239

Win98SE, Win2000SP4
D7
BeitragVerfasst: Do 01.09.05 08:15 
Suche in: Delphi-Forum, Delphi-Library SCHRIFTARTEN AUFLISTEN hat mir 2 Treffer gebracht; vielleicht gibt's noch bessere Stichworte.
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Fr 02.09.05 07:13 
CopyFileTo hat nicht funktioniert weil ich:

ausblenden Delphi-Quelltext
1:
2:
3:
CopyFileTo('C:\Beispielpfad\Arial.TTF', 'C:\Temp');   // so gemacht habe

CopyFileTo('C:\Beispielpfad\Arial.TTF', 'C:\Temp\Arial.TTF'); // muß aber so machen!