AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Probleme mit Regedit und Form öffnen!!
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Regedit und Form öffnen!!

Ein Thema von m-werk · begonnen am 14. Jun 2002 · letzter Beitrag vom 17. Jun 2002
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#1

Probleme mit Regedit und Form öffnen!!

  Alt 14. Jun 2002, 19:36
Hallo Leute, hab folgendes Problem: Ich habe für mein Programm eine Registrierung eingebaut, die der User beim 1. Start des Programmes eigeben muß. Diese wird in der Regedit gespeichert. Wenn der User aber ein weiteres mal in das Programm einsteigt, dann soll die Registrierunsform (Keyform) nicht mehr erscheinen, aber dass Programm soll trotzdem bei jedem Start die Registrierung überprüfen.

Soweit sogut. Ich habe es bis jetzt soweit, dass die Registrierung in der Regedit steht. Das funktioniert super. Mein problem ist nur, dass, wenn ich das Programm starte, immer die Keyform erscheint, wo ich den Code eingeben muß, obwohl in der Regedit eh schon das richtige drinn steht. Wenn ich dann auf OK klicke (in der Keyform), dann wird das ganze Programm geschlossen. Ich soll aber auf die Hauptform kommen, bzw. das Keyform soll erst gar nicht erscheinen.

Der Code sieht so aus:
Code:
procedure TKundendaten.FormCreate(Sender: TObject);
var OK: Boolean;
begin
  REG := TRegistry.Create;
  try
    try
      REG.RootKey := HKEY_CURRENT_USER;
      if REG.OpenKey('\Software\SELF', True) then
      begin
        if REG.ValueExists('CODE??') then a:=StrToInt(REG.ReadString('CODE??'))
        else a := 0;
        REG.CloseKey;
      end;
    except
       a := 0;
    end;
  finally
    REG.Free;
  end;
  if (a = 0) or (not CheckCode(IntToStr(a), 25, 7)) then { RegKey nicht vorhanden oder ungültige Seriennummer }
  begin
    Keyform := TKeyform.Create(nil);
    try
      OK := Keyform.ShowModal = mrOK;
      if OK then OK := CheckCode(IntToStr(a),25, 7);
      if not OK then
      begin
        Application.ShowMainForm := False;
        Application.Terminate;
        Exit;
      end;
    finally
      Keyform.Free;
    end;
  end;
end;
Könnt Ihr mir da behilflich sein???
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#2
  Alt 14. Jun 2002, 19:45
Lade doch erst dein Hauptform und frage dann ab !!
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
Benutzerbild von thomasdrewermann
thomasdrewermann

Registriert seit: 8. Jun 2002
Ort: Herne
575 Beiträge
 
Delphi 3 Professional
 
#3
  Alt 14. Jun 2002, 19:59
Also bei mir klappts mit dem Code

Code:
procedure TForm1.FormCreate(Sender: TObject);

var OK: Boolean;
reg:tregistry;
a:integer;
begin
  REG := TRegistry.Create;
  try
    try
      REG.RootKey := HKEY_CURRENT_USER;
      if REG.OpenKey('\Software\SELF', True) then
      begin
        if REG.ValueExists('CODE??') then a:=StrToInt(REG.ReadString('CODE??'))
        else a := 0;
        REG.CloseKey;
      end;
    except
       a := 0;
    end;
  finally
    REG.Free;
    if a=0 then
    begin
    reg:=tregistry.Create;
    reg.RootKey:=HKEY_CURRENT_USER;
    if reg.OpenKey('\Software\SELF',True) then
    begin
    reg.WriteString('CODE??',inputbox('IN','pp','1234'));
    end;
    end else showmessage(inttostr(a));
  end;


end;
Wenn noch kein Wert exsistiert dann öffnet sich eine Inputbox sonst eine Messagebox mit dem vorher eingegebenen Wert.

Du kannst ja einfach dein Fenster anstelle der Inputbox zu öffnen
Und anstelle der Messagebox kannst du ja die Seriennummer prüfen

MFG
Thomas
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 14. Jun 2002, 20:06
Moin m-werk,

ich würd's so machen:

In der Projektdatei prüfen, ob das Programm gestartet werden darf:

Code:
begin
  Application.Initialize;
  if CheckRegistry then
  begin
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
end.
wobei dann, in einer Unit, noch folgendes steht:
Code:
function CheckRegistry : Boolean;
function RegOK        : Boolean;

implementation
uses unit2;

{$R *.DFM}

function CheckRegistry : Boolean;

var
  RegForm : TRegForm;
  iResult : integer;
begin
  Result := RegOK;
  if Result then
  begin // Registrierung erfolgt, dann kann das Programm starten
    exit;
  end;
  RegForm := TRegForm.Create(nil); // aus Unit2
  try
    iResult := RegForm.ShowModal;
    Result := iResult = mrOK;
  finally
    FreeAndNil(RegForm);
  end;
end;

function RegOK : Boolean;
begin
  Result := false;
end;
Das ist jetzt nur stilisiert. RegOk liefert true zurück, wenn ein gültiger Eintrag in der Registry besteht. Ist das nicht der Fall, wird das Abfrageformular geöffnet. Im Erfolgsfalle, gibt das dann das ModalResult mrOK zurück, ansonsten mrCancel.
Ach ja, das TRegForm darf natürlich nicht in der Projektdatei erzeugt werden.
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
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#5
  Alt 14. Jun 2002, 20:48
Hallo, ich habe nun folgendes probiert (siehe code unten). Dies würde ja super funktionieren, aber ich möchte bei der Inputbox eine überprüfung einbauen. Kann man das überhaupt machen? Die überprüfung soll so sein wie sie zum schluß meines Codes auch ist. Ich meine so eine IF then else abfrage. Geht dass überhaupt mit inputbox?

Grund ist folgender. Ich kann in die Inputbox einen beliebigen wert eingeben. Der wird in der Registry auch gespeichert. Aber bei der Überprüfung, (siehe letzten zeilen im code) wird dann das programm nicht mehr gestartet. Das möchte ich verhindern.

ODER: Nach der überprüfung (letzten Zeilen im code) soll entweder das Programm gestartet werden, wenn die überprüfung in Ordnung ist, sonst soll eben wieder das Login (inputbox) kommen.

Code:
procedure TKundendaten.FormCreate(Sender: TObject);
//var OK: Boolean;
begin
  REG := TRegistry.Create;
  try
    try
      REG.RootKey := HKEY_CURRENT_USER;
      if REG.OpenKey('\Software\SELF', True) then
      begin
        if REG.ValueExists('CODE??') then a:=StrToInt(REG.Readstring('CODE??'))
        else a := 0;
        REG.CloseKey;
      end;
    except
       a := 0;
    end;
  finally
    REG.Free;
    if a=0 then
    begin
    reg:=tregistry.Create;
    reg.RootKey:=HKEY_CURRENT_USER;
    if reg.OpenKey('\Software\SELF', True) then
    begin
    reg.WriteString('CODE??',inputbox('Programm freischalten','Code',''));
    end;
    end else if CheckCode(IntToStr(a),25, 7) then
    Application.ShowMainForm := True;
   end;
end;
Kann man das irgendwie anstellen?
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#6
  Alt 14. Jun 2002, 21:09
Die Funktion Inputbox liefert als result einen String, du kanns also:

Code:
If inputbox = 'was solls sein??' then
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#7
  Alt 14. Jun 2002, 21:14
Hi, kann ich das so machen:

if inputbox = CheckCode(IntToStr(a),25, 7) then
Application.ShowMainForm := True;
Grüße, m-werk
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#8
  Alt 14. Jun 2002, 21:17
Zitat von m-werk:
(...)
Hi m-werk.
Habe mich schon gefragt, wann du hier erscheinst.
Also Gruß, erst mal!

Generell würde ich die Variante von Christian nehmen, die klappt nämlich prima. Allerdings hat er es wirklich stark stilisiert, das dürfte dir - m-werk - nicht unbedingt helfen. Deswegen meine Tipps dazu:

In der Funktion "RegOK" schreibst du nur den Registry-Code, der deine Seriennummer ausliest und ggf. vergleicht. Rückgabewert ist true wenn die Seriennummer gefunden wurde UND dem Muster entspricht.

Die andere Funktion "CheckRegistry" benutzt die gerade erwähnte Funktion und zeigt dir das Eingabeformular für die Seriennummer an, wenn es nicht gefunden wurde. Ich habe gerade mal ein Fake-Programm geschrieben, und es geht ohne Probleme.

Du musst "RegOK" nur vor "CheckRegistry" in der Unit definieren, sonst findet letztere die erstere nicht. Hat Christian wahrscheinlich nicht erwähnt, weil er´s für zu offensichtlich hielt.

Zum Rest: wie und wo du´s einbindest, hat Kollege Seehase ja auch gezeigt.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#9
  Alt 14. Jun 2002, 21:18
Zitat von m-werk:
Hi, kann ich das so machen:

if inputbox = CheckCode(IntToStr(a),25, 7) then
Application.ShowMainForm := True;
Bestimmt nicht, weil der Rückgabewert von "CheckCode" doch wohl ein Bool ist (MrSpock?). Inputbox liefert aber einen String zurück, was FR ja erwähnt hat.
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#10
  Alt 14. Jun 2002, 21:19
Fast halt noch die parameter!!

Code:
a:=strtoint(inputbox('Programm freischalten','Code',''));
if CheckCode(IntToStr(a),25, 7)) then
Allerdings wird mit jedem Inputbox der dialog aufgerufen,also würde ich den wert in nen String/integer zwischenspeichern.

Warum schreibst du einen String rein anstatt eines Integer?
Und du hast noch vergessen den eingetragen wert danach noch in die Reg zu schreiben
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 17:21 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