Autor |
Beitrag |
read
      
Beiträge: 57
Win XP prof.
Delphi7 + Delphi2 Developer
|
Verfasst: Fr 10.12.04 12:58
..oder Logikfehler?
Hallo zusammen, ich hätte mal 'ne Frage
und zwar lasse ich beim Programmstart überprüfen, ob eine bestimmte Datei vorhanden ist
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.FormCreate(Sender: TObject); var newfile: String; begin newfile :=ExtractFileDrive(Application.exeName); label2.Caption :=(newfile); if not FileExists(label2.Caption+'\eupec\Config\Mitarbeiter.csv') then begin ShowMessage('Installation wurde nicht korrekt ausgeführt oder Datei beschädigt') end; |
soweit sogut...das läuft auch alles
will ich das ganze erweitern..nämlich, wenn die Datei vorhanden ist das er mir ein anderes Fenster öffnet
Delphi-Quelltext 1: 2: 3: 4: 5:
| else beginn form1.Hide; form2.show; end; |
bekomme ich eine Fehlermeldung:"Im Projekt Projekt1.exe ist eine Exception der Klasse EAccessViolation aufgetreten.Meldung Zugriffsverletzung bei Adresse......"
was mach ich falsch????
Bin für jede Hilfe dankbar
Marco
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt.
_________________ Es gibt Tage da verliert man, und dann gibt es Tage da gewinnen die anderen
Zuletzt bearbeitet von read am Fr 10.12.04 13:52, insgesamt 1-mal bearbeitet
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 10.12.04 13:05
Mach das mal im FormActivate oder im FormShow.
|
|
Stübi
      
Beiträge: 331
Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
|
Verfasst: Fr 10.12.04 13:06
Hallo
Hast du es so erweitert:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.FormCreate(Sender: TObject); var newfile: String; begin newfile :=ExtractFileDrive(Application.exeName); label2.Caption :=(newfile); if not FileExists(label2.Caption+'\eupec\Config\Mitarbeiter.csv') then begin ShowMessage('Installation wurde nicht korrekt ausgeführt oder Datei beschädigt') end; else beginn form1.Hide; form2.show; end; |
denn dort dürfte kein ; stehen
Gruss Stübi
_________________ Neun von zehn Stimmen in meinen Kopf sagen, dass ich nicht verrückt sei. Die zehnte summt die Tetrismelodie.
|
|
read 
      
Beiträge: 57
Win XP prof.
Delphi7 + Delphi2 Developer
|
Verfasst: Fr 10.12.04 13:10
Hallo Stübi
... nein, das Semikolon hab ich schon weggelassen. Es steht halt nur deswegen im Quelltext, da er jetzt ja erst einmal dort endet
@jasocul
welchen Unterschied würde das denn bringen? - sorry falls es 'ne dumme Frage ist
hab's mit OnShow probiert...slebes resultat 
_________________ Es gibt Tage da verliert man, und dann gibt es Tage da gewinnen die anderen
Zuletzt bearbeitet von read am Fr 10.12.04 13:15, insgesamt 1-mal bearbeitet
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 10.12.04 13:10
@stübi:
Dann hätte der Compiler schon meckern müssen.
Das Problem dürfte folgendes sein:
Im FormCreate ist die HauptForm noch nicht wirklich da. Sie wird ja gerade erst erzeugt. Wenn dann ein andere Form angezeigt werden soll, kann es eine Schutzverletzung geben.
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 10.12.04 13:14
read hat folgendes geschrieben: |
welchen Unterschied würde das denn bringen? - sorry falls es 'ne dumme Frage ist |
Du musst folgendes bedenken:
Das OnActivate wird auch aufgerufen, wenn das Programm im Hintergrund war (mehrere Anwendungen aktiv).
Das OnShow kann auch durch andere Vorgänge angestoßen werden.
Ich habe das immer so gelöst, dass ich im FormCreate eine Variable (FirstTime) auf True gesetzt habe und diese dann im entsprechenden anderen Ereignis (OnActivate) Abfrage und dann auf False setze.
|
|
MartinPb
      
Beiträge: 698
|
Verfasst: Fr 10.12.04 13:21
Der Fehler ist korrekt. Du stellest die Anweisung in OnCreate des Form1. Das sagt mir, daß das das Programm gerade gestartet wird. Zu dieser Zeit ist das Objekt Form2 noch garnicht da. Wahrscheinlich geht das Programm hier der Reihe nach: zuerst OnCreate des Form1 und dann das OnCreate des Form2. Da du aber bereits in OnCrate des Form1 Form2 aufrufst, geht der Schuß ins leere. Du mußt zuerst ein Formular erstellen befor du es aufrufen kannst.
Was du machen kannst ist die Reihenfolge in der Projektdatei (MeinProjekt.DPR) ändern. So ist es wahrscheinlich:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Application.Run; end. |
So muß es sein:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| begin Application.Initialize; Application.CreateForm(TForm2, Form2); Application.CreateForm(TForm1, Form1); Application.Run; end. |
Hier wird zuerst das OnCreate des Form2 ausgeführt.
_________________ Gruß
Martin
|
|
read 
      
Beiträge: 57
Win XP prof.
Delphi7 + Delphi2 Developer
|
Verfasst: Fr 10.12.04 13:23
Hallo Peter
Habe den Quelltext erst in OnShow gepackt...selbes Problem
und jetzt ins OnActivate....neueste Fehlermeldung:"Eigenschaft Visible kan in OnShow oder OnHide nicht verändert werden"........?????????????
gruß
Marco
_________________ Es gibt Tage da verliert man, und dann gibt es Tage da gewinnen die anderen
|
|
bug0815
      
Beiträge: 62
Win2000, Xp, Vista
Delphi 2006, 2009
|
Verfasst: Fr 10.12.04 13:25
Die Formulare werden immer in der Reihenfolge erzeugt, wie sie im Projektquelltext stehen. Dadurch ergibt sich das Problem, dass die Form die aufgerufen werden soll noch nicht existiert.
Projectquelltext:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| program beispiel;
uses Forms, fe_login in 'fe_main.pas' , fe_info in 'fe_login.pas' , {$R *.res}
begin Application.Initialize; Application.Title := 'Beispiel'; Application.HelpFile := ''; Application.CreateForm(TMain, Main); <span style="font-style: italic">*1</span> Application.CreateForm(TLogin, Login); <span style="font-style: italic">*2</span> Application.Run; end. |
In diesen Beispiel könnte die Form Main*1 während des Creates nicht die Form Login*2 aufrufen, da diese noch nicht erzeugt worden ist.
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 10.12.04 13:26
read hat folgendes geschrieben: | Habe den Quelltext erst in OnShow gepackt...selbes Problem
und jetzt ins OnActivate....neueste Fehlermeldung:"Eigenschaft Visible kan in OnShow oder OnHide nicht verändert werden"........?????????????
|
Dann probier mal Martins Lösung, die sollte nach meiner Einschätzung funtkionieren.
Bei mir war es dann doch noch etwas anders, da ich meine Formen erst zur Laufzeit erzeuge.
|
|
read 
      
Beiträge: 57
Win XP prof.
Delphi7 + Delphi2 Developer
|
Verfasst: Fr 10.12.04 13:35
Hallo Martin
die Sache bringt mich leider auch net so richtig weiter - hab's grad ausprobiert - da ich dann von form2 net zu form1 zurückkehren kann
vielleicht mal kurz worum's dabei geht...das Programm(form1) soll eigentlich ständig laufen...sollte es aber aus welchen Gründen auch immer beendet worden sein, soll beim starten sich ein Fenster(form2) öffnen, in welchem der Name eines Mitarbeiters eingegeben wird um das ganze dan mit Datum und Uhrzeit in ein Tabelle zu schreiben
während der laufzeit form1 wird das ganze per Button oder/und Zeitsteuerung gesteuert.
es geht mir halt nur darum das man beim Programmstart "gezwungen" wird dieses fenster zu sehen und zu "bearbeiten"
ich hoffe es ist halbwegs verständlich
gruß
marco
_________________ Es gibt Tage da verliert man, und dann gibt es Tage da gewinnen die anderen
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 10.12.04 13:40
Nur mal ein Test: Lass mal das Form1.Hide weg. Wenn das funktioniert, könntest du auch die Form2 so umstellen, dass du sie mit Form2.ShowModal zeigst. Solange die dann angezeigt wird, kann man sowieso nicht zu Form1 wechseln.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 10.12.04 13:50
Hallo!
Bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Delphi-Forum.de Richtlinien:
Richtlinien hat folgendes geschrieben: | 1.2 Beiträge
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...]
|
Einfach oben bei Deinem ersten Beitrag auf "Edit" klicken und den Titel ändern. Dank Dir!
Grüße
Christian 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
read 
      
Beiträge: 57
Win XP prof.
Delphi7 + Delphi2 Developer
|
Verfasst: Fr 10.12.04 13:50
Haare ausrauf
nee klappt leider auch net...also ich hab jetzt einfach mal das Form1.hide weggelassen geht leider auch net
bin grad am überlegen, ob ich's net anders mache
habe ja 'nen Button, mit welchem ich die form2 ohne Problem aktivieren kann... vielleicht mach ich's ja so, das beim Start erstmal alle anderen Funktionen gesperrt sind, bis dieser Button betätigt wird
danke Euch allen trotzdem für Eure Mühe und Hilfe
Gruß
Marco
_________________ Es gibt Tage da verliert man, und dann gibt es Tage da gewinnen die anderen
|
|
read 
      
Beiträge: 57
Win XP prof.
Delphi7 + Delphi2 Developer
|
Verfasst: Fr 10.12.04 13:54
Hi Christian...
....sorry, kommt net mehr vor
gruß
Marco
_________________ Es gibt Tage da verliert man, und dann gibt es Tage da gewinnen die anderen
|
|
Stübi
      
Beiträge: 331
Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
|
Verfasst: Fr 10.12.04 14:07
@read and jasocul:
Ist mir eingefallen als ich unterwegs nach Hause war dass meine Antwort falsch war.
Anderer Ansatz: Mit Hide wird die Form meines Wissens unsichtbar gemacht, wie kann man eine Form die noch gar nicht sichtbar ist schon wieder unsichtbar machen? Folglich würde ja OnShow, OnActivate und OnCreate alle nicht gehen, weil (schon wieder) meines Wissens erst nach OnShow (oder während) die Form angezeigt wird. Könnte man die Form nicht auch einfach visible auf False setzten?
Gruss Stübi
_________________ Neun von zehn Stimmen in meinen Kopf sagen, dass ich nicht verrückt sei. Die zehnte summt die Tetrismelodie.
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 10.12.04 14:10
@stübi:
Deswegen hatte ich ihm geschrieben, dass er das Form1.Hide mal rausnehmen soll.
@read:
Vielleicht solltest du das nochmal in den Ereignissen OnActivate und OnShow testen, falls du das noch nicht versucht hast.
|
|
read 
      
Beiträge: 57
Win XP prof.
Delphi7 + Delphi2 Developer
|
Verfasst: Fr 10.12.04 14:13
@stübi
wieso, form1 ist doch bereits sichtbar....bzw wird es ja mit OnCreate oder OnShow dargestellt (OnShow müßte man meines wissens nach doch mit "wenn dargestellt" übersetzen)
gruß
Marco
@peter
hab ich auch schon probiert  ... mit selben ergebnissen
gruß
Marco
_________________ Es gibt Tage da verliert man, und dann gibt es Tage da gewinnen die anderen
|
|
Stübi
      
Beiträge: 331
Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
|
Verfasst: Fr 10.12.04 14:21
OnShow würde ich mit "bei Zeigen" oder "wärend zeigen" bezeichnen, wenn du in einem OnShow-Ereigniss eine Breakpoint setzt's ist die Form noch nicht sichtbar. Du müsstes rausfinden wann alle 3 Ereigniss fertig sind und dann deine Prüfung machen. Oder nicht mit Hide verstecken sondern mit Visible und False.
Sonst ändere mal bei deinem Projekt wo alles erzeugt wird (weiss grad nicht wie es heisst) die Create um deiner 2 Forms, so dass Form 2 zuerst kreiert wird und Form 1 erst danach. (Form2 soltest du aber noch wärend dem Programmieren auf visible := False setzten)
Gruss stübi
_________________ Neun von zehn Stimmen in meinen Kopf sagen, dass ich nicht verrückt sei. Die zehnte summt die Tetrismelodie.
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 10.12.04 14:28
Ich habe gerade nochmal eines meiner alten Projekte rausgekramt. Dort habe ich es im OnActivate gemacht. Dort wird eine zweite Form angezeigt (mit Show). Die hat als FormStyle fsStayOnTop und ist ansonsten ein normales Fenster. Es ist in der Erstellungsliste auch erst nach der Hauptform aufgeführt.
Das funktioniert bei mir völlig problemlos. Ich befürchte, dass du den Fehler an der falschen Stelle suchst. Nimm mal zum Test eine neue Form, die nichts beinhaltet und versuche diese anzeigen zu lassen.
Wenn das nicht weiter hilft, musst du das Projekt mal zur Verfügung stellen, damit man das durchchecken kann.
|
|