Autor Beitrag
read
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57

Win XP prof.
Delphi7 + Delphi2 Developer
BeitragVerfasst: 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

ausblenden 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

ausblenden 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 user profile iconChristian 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 10.12.04 13:05 
Mach das mal im FormActivate oder im FormShow.
Stübi
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 331

Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
BeitragVerfasst: Fr 10.12.04 13:06 
Hallo

Hast du es so erweitert:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57

Win XP prof.
Delphi7 + Delphi2 Developer
BeitragVerfasst: 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 :cry:

_________________
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: 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:

ausblenden 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
begin
  Application.Initialize;
  Application.CreateForm(TForm2, Form2); // getauscht
  Application.CreateForm(TForm1, Form1); // getauscht
  Application.Run;
end.


Hier wird zuerst das OnCreate des Form2 ausgeführt.

_________________
Gruß
Martin
read Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57

Win XP prof.
Delphi7 + Delphi2 Developer
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62

Win2000, Xp, Vista
Delphi 2006, 2009
BeitragVerfasst: 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:
ausblenden 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' {Main},
  fe_info in 'fe_login.pas' {Login},
  //..und noch weitere Units//
{$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>
  //..und noch weitere Formulare
  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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57

Win XP prof.
Delphi7 + Delphi2 Developer
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57

Win XP prof.
Delphi7 + Delphi2 Developer
BeitragVerfasst: Fr 10.12.04 13:50 
Haare ausrauf :D

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57

Win XP prof.
Delphi7 + Delphi2 Developer
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 331

Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57

Win XP prof.
Delphi7 + Delphi2 Developer
BeitragVerfasst: 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 :cry: ... mit selben ergebnissen

gruß

Marco

_________________
Es gibt Tage da verliert man, und dann gibt es Tage da gewinnen die anderen
Stübi
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 331

Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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.