![]() |
Wo ist der Fehler ?
Sobald ich in meinem programm ein Opendialog ausführe, und dieses in einem label anzeige, und danach auf MainMenu gehe und klicke, schliesst sich das programm
Delphi-Quellcode:
weiss jemand hilfe? finde den fehler nicht
procedure TForm1.Image4Click(Sender: TObject);
begin Form1.OpenDialog1.Execute; Form1.sPanel1.Caption:=Form1.OpenDialog1.Filename; end; [edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit] |
Re: Wo ist der Fehler ?
besser ist:
Delphi-Quellcode:
Was ist denn in MainMenu deklariert?
procedure TForm1.Image4Click(Sender: TObject);
begin if OpenDialog1.Execute then sPanel1.Caption := OpenDialog1.Filename; end; |
Re: Wo ist der Fehler ?
Zitat:
Also das Mainmenu ist unverändert, und beinhaltet nur zwei Menuteile mit paar unterordnern, wobei keines dieser ein event enthält |
Re: Wo ist der Fehler ?
Schließt sich das Programm mit einer Fehlermeldung? Und wenn ja, mit welcher?
Ansonsten, wie ist das MainMenu implementiert? |
Re: Wo ist der Fehler ?
Zitat:
Das Mainmenu allgemein geht aber (auch nach dem drücken anderer buttons im code), es ist nur nach dem opendialog wo es sich schliesst. Also Habe mainmenu nur als komponente in die form genommen, unter type oder im code wird mainmenu nirgendwo benutzt. |
Re: Wo ist der Fehler ?
Poste mal den ganzen Quelltext. Bisher ist nicht ersichtlich woher die unerwartete Reaktion stammt.
|
Re: Wo ist der Fehler ?
Also die anderen proceduren gehen. die blocken mainmenu nicht, das habe ich schon durchgetestet.
Ebenfalls seltsam ist, dass ich eben meinmenu neu reingemacht habe, ohne unterseiten, da gings, und mit unterseiten gehts wieder nicht mehr. sollte es am schluss wirklich keine lösung mehr geben, werde ich trotzdem mal quellcode reinmachen. die prozedur image4click beinhaltet jedoch nur die beiden zeilen, und n dieser liegt es demnach. edit: der fehler liegt weder am untermenu des mainmenu, oder am opendialog.execute :S |
Re: Wo ist der Fehler ?
Hast du vielleicht eine Actionlist auf der Form, die mit dem Mainmenu verknüpft ist?
Welche Delphiversion benutzt du? |
Re: Wo ist der Fehler ?
Zitat:
ich nutze delphi 7 |
Re: Wo ist der Fehler ?
Schau am besten mal in der OH nach, da ist die TActionlist gut erklärt.
Aber wenn du keine drauf hast, kann es daran nicht liegen. Zeig doch einfach mal den Code. |
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. |
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. |
Re: Wo ist der Fehler ?
Zitat:
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. |
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; |
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. |
Re: Wo ist der Fehler ?
Hallo,
eventuell durch den SkinManager :gruebel: |
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 ? |
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.
|
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 ![]() ist da eventuell etwas falsch eingestellt ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:47 Uhr. |
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