Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wo ist der Fehler ? (https://www.delphipraxis.net/135731-wo-ist-der-fehler.html)

PsTo 16. Jun 2009 21:39

Re: Wo ist der Fehler ?
 
Naja, mache es net gerne, aber gut. hier der source
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, sSkinManager, Menus, StdCtrls, sButton, sEdit, acPNG, ExtCtrls,
  sLabel, sPanel, ComCtrls, sTrackBar, Registry, sMemo, Shellapi,
  DynamicSkinForm, OleCtrls, SHDocVw;

type
  TForm1 = class(TForm)
    sSkinManager1: TsSkinManager;
    OpenDialog1: TOpenDialog;
    sLabel1: TsLabel;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    sPanel1: TsPanel;
    sLabel2: TsLabel;
    sTrackBar1: TsTrackBar;
    Image1: TImage;
    Image5: TImage;
    sLabel3: TsLabel;
    Label1: TLabel;
    Label2: TLabel;
    sMemo1: TsMemo;
    MainMenu1: TMainMenu;
    test1: TMenuItem;
    test2: TMenuItem;
    procedure Image4Click(Sender: TObject);
    procedure Image3Click(Sender: TObject);
    procedure Image2Click(Sender: TObject);
    procedure sTrackBar1Change(Sender: TObject);
    procedure Image5Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    function GetApplicationDirectory: string;
  end;

var
  Form1: TForm1;
  DATFILE: array[1..100] of string;
  I, C:integer;


implementation


{$R *.dfm}


function TForm1.GetApplicationDirectory: string;
begin
  Result := ExtractFilePath(ParamStr(0)) + 'Easy Start Loader.exe';
end;

procedure TForm1.Image2Click(Sender: TObject);
var sl: TStringlist;
    J,K:integer;
    regist, auto: TRegistry;
    PLACED,PLACE:string;
begin
  // BATCH DATEI GETT GESCHRIWWEN
  sl := TStringlist.Create;
  try
    sl.Add('@echo off');
    for J:=1 to C do
    begin
      sl.Add('start ' + chr(34) + chr(34) + ' ' + chr(34) + DATFILE[J] + chr(34));
    end;
    sl.SaveToFile('C:\EasyStartTimer.bat');
  finally
    sl.Free;
  end;
  // ------------------------------------------

  // REGISTRY WERT GETT GESCHRIWWEN
  regist:=TRegistry.Create;
  try
    regist.RootKey:=HKEY_CURRENT_USER;
    regist.OpenKey('Software\Easy Start Timer\StartTime', true);
    regist.WriteInteger('Time',round(Form1.sTrackBar1.Position));
  finally
    regist.free;
  end;
  // ------------------------------------------

  // LOADER GETT KOPEIERT
  PLACED:=GetApplicationDirectory;
  PLACE:= 'C:\Easy Start Loader.exe';
  copyfile(PChar(PLACED),PChar(PLACE),false);
  // ------------------------------------------

  // Loader gett an den autostart gesaat.
  auto:=TRegistry.Create;
  try
    auto.RootKey:=HKEY_LOCAL_MACHINE;
    auto.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', true);
    auto.writestring('Easy Start Loader','C:\Easy Start Loader.exe');
  finally
    auto.free;
  end;
  // ------------------------------------------
 
  for K:=1 to C do
  begin
    DATFILE[K]:='';
  end;
  Form1.sMemo1.Text:= Form1.sMemo1.Text + 'Activated ! Look Log for more Details.' + #13#10;
end;

procedure TForm1.Image4Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    sPanel1.caption := OpenDialog1.Filename;
end;

procedure TForm1.Image3Click(Sender: TObject);
var TMP:string;
begin
  if (Form1.sPanel1.Caption <> '') and (Form1.sPanel1.Caption <> TMP) then
  begin
    TMP:=Form1.sPanel1.Caption;
    Form1.sMemo1.Text:= Form1.sMemo1.Text + Form1.sPanel1.Caption + #13#10;
    DATFILE[I]:=Form1.sPanel1.Caption;
    inc(C);
    inc(I);
  end;
end;

procedure TForm1.sTrackBar1Change(Sender: TObject);
begin
  Form1.Label1.Caption:=FloatToStr(Form1.sTrackBar1.Position);
end;

procedure TForm1.Image5Click(Sender: TObject);
var regist, auto, key: TRegistry;
    J:integer;
begin
  // Registry Werter gin gelöscht
  regist:=TRegistry.Create;
  try
    regist.RootKey:=HKEY_CURRENT_USER;
    regist.OpenKey('Software\Easy Start Timer\StartTime', true);
    regist.DeleteValue('Time');
  finally
    regist.free;
  end;

  key:=TRegistry.Create;
  try
    key.RootKey:=HKEY_CURRENT_USER;
    key.OpenKey('Software', true);
    key.DeleteKey('Easy Start Timer\Starttime');
    key.DeleteKey('Easy Start Timer');
  finally
    key.free;
  end;

  auto:=TRegistry.Create;
  try
    auto.RootKey:=HKEY_LOCAL_MACHINE;
    auto.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', true);
    auto.DeleteValue('Easy Start Loader');
  finally
    auto.free;
  end;

  // Dateien gin gelöscht.
  Deletefile('C:\EasyStartTimer.bat');
  Deletefile('C:\Easy Start Loader.exe');
  for J:=1 to C do
  begin
    DATFILE[J]:='';
  end;
  C:=0;
  Form1.sMemo1.Text:= Form1.sMemo1.Text + 'Deactivated ! Look Log for more Details.' + #13#10;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  I:=1;
  C:=0;
end;



end.

SirThornberry 16. Jun 2009 22:21

Re: Wo ist der Fehler ?
 
Könntest du bitte dem Thema einen aussagekräftigen Titel geben? Danke :)

Was mir als erstes in deinem Quelltext auffällt ist das du innerhalb der Klasse TForm1 auf die Variable Form1 zugreifst obwohl alles danach aussieht das du von der aktuellen TForm1 die Daten ändern willst. Lass das vorangestellte TForm1 einfach weg wenn du auf die Klasse selbst zugreifst denn niemand versichert dir das die Instanz immer Form1 heißt.

PsTo 16. Jun 2009 22:31

Re: Wo ist der Fehler ?
 
Zitat:

Zitat von SirThornberry
Könntest du bitte dem Thema einen aussagekräftigen Titel geben? Danke :)

Was mir als erstes in deinem Quelltext auffällt ist das du innerhalb der Klasse TForm1 auf die Variable Form1 zugreifst obwohl alles danach aussieht das du von der aktuellen TForm1 die Daten ändern willst. Lass das vorangestellte TForm1 einfach weg wenn du auf die Klasse selbst zugreifst denn niemand versichert dir das die Instanz immer Form1 heißt.

tschuldigung, mir war kein besseren titel eingefallen.

Das mit dem TForm werd ich mir merken, danke :)
werde den code am ende sowieso noch einmal ganz überarbeiten.
wollte ihn deshalb auch nicht posten, weil er noch nicht sauber ist.
halt "blockiert" mich momentan das mit dem mainmenu.

edit: meinst du das TForm1 vor einer prozedur oder Form1 vor einer komponente ?
Falls du das TForm1 vor einer prozedur meinst, das kommt automatisch von delphi aus.

Satty67 16. Jun 2009 22:36

Re: Wo ist der Fehler ?
 
Sind ja noch keine Aktionen im MainMenu definiert. Nur falls doch irgendein Event verbunden ist... schmeiße Mainmenu nochmal vom Formular runter und setze es anschließend neu auf das Formular.

wegen TForm1, das war anders gemeint:
Delphi-Quellcode:
procedure TForm1.TuWas(a : integer);
begin
  Form1.sPanel.Caption := 'test'; // <- Unsicher

  sPanel.Caption := 'test'; // <- Sicher
  //weil intern so behandelt;
  self.sPanel.Caption := 'test';
end;

quendolineDD 16. Jun 2009 22:38

Re: Wo ist der Fehler ?
 
Er meinte die Verwendung von TForm in den Prozeduren. Weil dies wird nicht beim Ändern des Formnamens gleich von Delphi mitgeändert.
Ich persönlich kann in dem Quelltext nichts finden, was dein Problem erklärt.

Lannes 16. Jun 2009 22:48

Re: Wo ist der Fehler ?
 
Hallo,

eventuell durch den SkinManager :gruebel:

PsTo 16. Jun 2009 23:07

Re: Wo ist der Fehler ?
 
Zum TForm, habs verstanden, klingt auch logisch :) dankesehr.

Zum skin, nein, ist nicht möglich, da ich die MainMenu komponente von delphi genommen habe ;)

Zum Event, ich hatte vorher ein event in einem untermenu drin gemacht, aber das ist jetzt weg weil ich die komponente schon neu reingemacht hatte. deshalb heisst er im code jetzt auch "test".

Edit: gibt es keine alternative zum mainmenu ?

divBy0 17. Jun 2009 08:30

Re: Wo ist der Fehler ?
 
Auf den ersten Blick ist mir im Code auch nichts aufgefallen. Das TMainMenu funktioniert schon, daran kann es nicht liegen. Nimm' doch mal das Skin-Dingens raus.

PsTo 17. Jun 2009 14:17

Re: Wo ist der Fehler ?
 
Hab mal ein test program geschrieben mit opendialog und mainmenu, da funktionierts einwandfrei.

edit: neue erkenntis. Lannes hatte recht
wenn ich den skinmanager rausnehme, dann geht das mainmenu.
Hier mal ein screenshot vom object inspector des managers
http://img16.myimg.de/xyyxxce110f.jpg
ist da eventuell etwas falsch eingestellt ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:46 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz