AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TRegistry

Ein Thema von derhoeppi · begonnen am 6. Okt 2003 · letzter Beitrag vom 6. Okt 2003
Antwort Antwort
Seite 1 von 2  1 2      
derhoeppi

Registriert seit: 6. Okt 2003
Ort: Berlin
24 Beiträge
 
#1

TRegistry

  Alt 6. Okt 2003, 10:03
Hallo liebe Delphi Praxis User
Ich bin Schüler und arbeite seit gut zwei Wochen mit Delphi in der Schule. Leider immer nur 3 Stunden pro Woche, so dass ich noch nicht wirklich die Ahnung habe. Jetzt steh ich aber vor einem Problem. Und zwar möchte ich ein kleines Programm erstellen bzw. "schreiben" mit dem überprüft wird, ob ein Registrierungeintrag vorhanden ist bzw., ob Powerpoint auf dem Computer installiert ist. Wenn dies nicht der Fall ist soll die Meldung kommen, dass Powerpoint nicht installiert ist und gefragt werden ob der Viewer installiert werden soll.Ist Powerpoint installiert so soll die Präsentation gestartet werden.Gibt es dafür eine Möglichkeit???Ich würd das ganze mit einer if-then-else Anweisung realisieren nur kenn ich mich mit dem Part der Registry überhaupt nicht aus.Es wär also nett wenn ihr mir helfen könntet.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#2

Re: TRegistry

  Alt 6. Okt 2003, 10:24
Der Titel besagt ja schon, was Du dazu benötigst: Die TRegistry - Komponente.
Wenn Du dazu mal die Onlinehilfe aufrufst steht sogar mit einem Codebeispiel drin, wie Du damit umgehen musst.

Prinzipiell versuchst Du einfach, den gefragten Schlüssel zu öffnen. Schlägt das fehl, ist er nicht da. Das kannst Du dann entsprechend als Kriterium für Deine Auswahl verwenden.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Blechwolf

Registriert seit: 9. Sep 2003
Ort: Aachen
126 Beiträge
 
Delphi 7 Professional
 
#3

Re: TRegistry

  Alt 6. Okt 2003, 10:25
Salut,

da ich gerade auch fleissig auf der Suche nach dem editieren der Registry war, kann ich nur sagen: Wer suchet, der findet.

Ich würde das ganze allerdings anders machen.
Ich würde folgendes probieren:

Delphi-Quellcode:
  if ShellExecute(0,nil,'Pres.ppt',nil,nil,0) = SE_ERR_NOASSOC then
    begin
      // Nix mit ppt-Files verknüpft -> Powerpoint o.ä. nicht installiert
      // Tu dies Tu das
    end;
Du solltest dann allerdings wohl noch die Unit ShellAPI in der uses-Anweisung verwenden und 'Pres.ppt' durch Deinen FileName ersetzen.

Zu ShellExecute gibts auch eine Hilfe. Allerdings kann ich Dir nicht sagen, ob die direkt unter Delphi zu finden ist (bei mir z.B. nicht). Schau mal unter

C:\Programme\Gemeinsame Dateien\Borland Shared\MSHelp\Win32.hlp

[EDIT]
Noch kurz zur Erläuterung:
Mit dem Aufruf versuchst Du die mit dem Dateityp '.ppt' verknüpfte Anwendung zu öffnen. Also eben halt Power-Point, den Power-Point Viewer, das äquivalente Prog bei OpenOffice etc. Also das Prog, das sich auch öffnet, wenn Du einfach einen Doppelklick auf Deine ppt Datei machst.
[/EDIT]

[EDIT die zweite]
Allerdings hat das jetzt wohl nix mehr mit der Registry zu tun. Sollte die Aufgabenstellung also Explizit mit der Registry gelöst werden, so ist das wohl nicht so günstig
[/EDIT die zweite]

Grüße

Blechwolf
Ein Schiff im Hafen ist sicher. Aber dafür werden Schiffe nicht gebaut. (engl. Sprichwort)
  Mit Zitat antworten Zitat
derhoeppi

Registriert seit: 6. Okt 2003
Ort: Berlin
24 Beiträge
 
#4

Re: TRegistry

  Alt 6. Okt 2003, 18:06
Hallo Leutz
Ich hab nun seit heut Nachmittag etwas gelesen und mein Grundgerüst geschrieben. Allerdings ist es noch nicht so, dass ich sagen kann so möchte ich es lassen.Zum Beispiel startet die Anwendung jetzt erst, wenn ich den Button betätige - ich will aber das es automatisch startet (anders hab ich es in der Schule noch nicht gelernt). Weiterhin hab ich auch noch nicht gelernt wie ich eine Datei aufrufe. Ich möchte ja wenn Powerpoint oder der Viewer nicht installiert ist, dass der Viewer installiert wird.
Hier mal mein momentaner Quellcode:
Delphi-Quellcode:
unit regzugriff;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Registry;

type
  TForm1 = class(TForm)
    pb_test: TBitBtn;
    procedure pb_testClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.pb_testClick(Sender: TObject);
var
    Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;
    if not Reg.OpenKey('\.ppt', True) then
    begin
      //pptv install
      pb_test.Caption := '&install'
    end;
  finally
    Reg.Free;
    inherited;
  end;
end;

end.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: TRegistry

  Alt 6. Okt 2003, 18:19
Moin Hoeppi,

das wird jetzt etwas aufwendiger.
Damit Dein Programm mitbekommt, wenn versucht wird eine PPT Datei zu öffnen, müsste sich Dein Programm als Anwendung registrieren, die mit PPT verknüpft ist.
Um den Button wirst Du also nicht so leicht herumkommen.

Wie ich die MS-Setups kenne, müsste es möglich sein, den PPT Viewer ohne manuelle Eingriffe zu installieren.
Leider kenne ich das Setup und die möglichen Parameter jetzt nicht auswendig (sollte es sich nicht um ein MSI Setup handeln, könntest Du mit "Setup.exe /?" näheres herausbekommen.), aber es sollte mit einer ShellExecute Zeile zu erledigen sein. Dazu müsste Deinem Programm natürlich bekannt sein wo sich das Setup des Viewers befindet.

Zwei Fehler hab' ich in Deinem Codeschnipsel noch gefunden.
Der gravierendste: Da Du als zweiten Parameter true angegeben hast wird der Aufruf nicht unbedingt fehlschlagen, da der Key ja angelegt wird, wenn er nicht existiert.
Für so eine Anwendung ist OpenKeyReadonly besser geeignet.
Der andere Fehler: Du schliesst den Key nicht, wenn er geöffnet wurde. Du hast zwar an das try/finally für das TRegistry Objekt gedacht, nur für den offenen Key fehlt sie.

Ausserdem ist mir das inherited nicht klar. Das kann wegfallen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
derhoeppi

Registriert seit: 6. Okt 2003
Ort: Berlin
24 Beiträge
 
#6

Re: TRegistry

  Alt 6. Okt 2003, 18:41
Hey Christian
Ich hab jetzt mal deine zwei genannten Fehler korrigiert, aber es funzt mit dem Reg.OpenKeyReadOnly nicht mehr. Also mein neuer Quellcode:
Delphi-Quellcode:
unit regzugriff;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Registry;

type
  TForm1 = class(TForm)
    pb_test: TBitBtn;
    Text: TLabel;
    Ja: TButton;
    Nein: TButton;
    procedure pb_testClick(Sender: TObject);
    procedure NeinClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.pb_testClick(Sender: TObject);
var
    Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;
    if not Reg.OpenKeyReadonly('\.ppt', True) then
    begin
      //pptv install
      pb_test.Caption := '&install'
    end;
  finally
    Reg.CloseKey;
    Reg.Free;
   end;
end;

procedure TForm1.NeinClick(Sender: TObject);
begin
close;
end;

end.
Wie ihr sehen könnt hab ich das ganze noch etwas geändert, weil ich eben auch mitbekommen habe, dass ich um den ButtonClick nicht herumkomme - ist zwar schade aber damit muss ich wohl Leben. Ich habe dafür ein Label für den Text erstellt und dann noch zwei Button (Ja/Nein zur Beantwortung der Frage aus dem Label). Wenn Nein angeklickt wird wird das ganze geschlossen, wenn Ja sollte die Überprüfung für den Viewer dargestellt werden.


Ich schreibe gleich noch eine Antwort bei der ich mal die Struktur meines Programms nennen möchte.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: TRegistry

  Alt 6. Okt 2003, 18:58
Moin Hoeppi,

bei OpenKeyReadOnly gibt es nur einen Parameter, nämlich den Key. Da ja in jedem Falle nur gelesen wird, macht es keinen Sinn das Anlegen des Keys vorzusehen.
Ausserdem hab' ich noch eine kleine Korrektur:

Delphi-Quellcode:
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;
    if not Reg.OpenKeyReadonly('\.ppt') then
    begin
      //pptv install
      pb_test.Caption := '&install'
    end else begin
      Reg.CloseKey;
    end;
  finally
    Reg.Free;
  end;
Den Key nur zu schliessen, wenn er auch geöffnet wurde ist sauberer.
Passiert zwischen öffnen und schliessen des Keys noch mehr, könnte es dann etwas umfangreicher aussehen:

Delphi-Quellcode:
    end else begin
      try
        // Mit dem geöffneten Key arbeiten
      finally
        Reg.CloseKey;
      end;
    end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
derhoeppi

Registriert seit: 6. Okt 2003
Ort: Berlin
24 Beiträge
 
#8

Re: TRegistry

  Alt 6. Okt 2003, 19:24
Also das ganze Projekt soll für eine CD sein. Auf die CD soll eine Präsentation über eine Reise. Die Präsentaion wurde mit PowerPoint erstellt und nicht jeder hat PowerPoint auf seinem Rechner. Also möchte ich eine Möglichkeit schaffen, dass sich alle die an der Reise teilgenommen haben auch die Präsentation sehen können. Dazu muss ich nun ein kleines Programm schreiben mit dem überprüft wird, ob die Präsentation dargestellt werden kann.Das ganze soll also über eine Autostartfunktion nach der einlage der CD gestartet werden. Das Programm soll vollgendermaßen aussehen.Ein kleines Formular öffnet sich. Auf diesem befindet sich eine Frage, die mit Ja oder Nein beantwortet werden kann. Wenn die Frage mit Nein beantwortet wird dann soll sich das Formular schließen. Wird die Frage mit Ja beantwortet so soll überprüft werden, ob die Präsentation dargestellt werden kann oder nicht. Wenn sie dargestellt werden kann, soll sich die Präsentation öffnen, wennn nicht dann soll der Viewer installiert werden.ICh hoffe das ist soweit überschaubar.
  Mit Zitat antworten Zitat
derhoeppi

Registriert seit: 6. Okt 2003
Ort: Berlin
24 Beiträge
 
#9

Re: TRegistry

  Alt 6. Okt 2003, 20:37
Hey
Ich hab inzwischen mal weiter gemacht und bin jetzt auf ein anderes Problem gestoßen. Und zwar hab ich eben die Erfahrung gemacht, dass nach einer Windowsinstallation in der Registry die .ppt schon auf ein Programm verweist. Das beste ist, dass das Programm PowerPoint 4.0 ist. Ich kann damit allerdings keine Präsentationen öffnen. Dadurch wird meine Überprüfung immer negativ ausfallen, so dass der Viewer nicht installiert wird. Wie kann ich das jetztz noch realisieren???
Mein neuer Quelltext:
Delphi-Quellcode:
 unit regzugriff;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Registry, shellapi;

type
  TForm1 = class(TForm)
    pb_test: TBitBtn;
    Text: TLabel;
    Ja: TButton;
    Nein: TButton;
    Button1: TButton;
    procedure pb_testClick(Sender: TObject);
    procedure NeinClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.pb_testClick(Sender: TObject);
var
    Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;
    if not Reg.OpenKeyReadonly('\.ppt') then
    begin
     ShellExecute(Handle, nil, 'ppview97.exe', nil, nil, SW_SHOW );
      pb_test.Caption := '&install'
    end;
  finally
    Reg.CloseKey;
    Reg.Free;
    inherited;
  end;
end;

procedure TForm1.NeinClick(Sender: TObject);
begin
close;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(Handle, nil, 'ppview97.exe', nil, nil, SW_SHOW )
end;
end.
  Mit Zitat antworten Zitat
derhoeppi

Registriert seit: 6. Okt 2003
Ort: Berlin
24 Beiträge
 
#10

Re: TRegistry

  Alt 6. Okt 2003, 21:35
Hey Leutz
Momentan bin ich richtig glücklich, weil dieses Prog soweit läuft.
Delphi-Quellcode:
unit regzugriff;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Registry, shellapi;

type
  TForm1 = class(TForm)
    Text: TLabel;
    Ja: TButton;
    Nein: TButton;
    procedure pb_testClick(Sender: TObject);
    procedure NeinClick(Sender: TObject);
      private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.pb_testClick(Sender: TObject);
var
    Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;
    if not Reg.OpenKeyReadOnly('\.ppt\PowerPoint.Show.8') then
    begin
     ShellExecute(Handle, nil, 'ppview97.exe', nil, nil, SW_SHOW );
      Ja.Caption := 'Installation'
    end;
  finally
    Reg.CloseKey;
    Reg.Free;
    inherited;
  end;
end;

procedure TForm1.NeinClick(Sender: TObject);
begin

close;
end;


end.
So weit sieht es meiner Meinung nach gut aus. Jetzt muss nur noch die Anweisung rein, wenn positiv überprüft wurde das die Präsentation gestartet wird.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz