Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Error bei Einbindung von einer projektextern erstellten Unit (https://www.delphipraxis.net/176804-error-bei-einbindung-von-einer-projektextern-erstellten-unit.html)

thomassolymosi 27. Sep 2013 13:21

Error bei Einbindung von einer projektextern erstellten Unit
 
Hallo Leute,

ich habe schon viel von euren Tipps in den letzten 4 Wochen, in denen ich mit Lazarus angefangen habe, profitiert. Jetzt habe ich aber noch ein Problem, wo ich nicht weiterkomme:

Ich hab ein Hauptprojekt, habe in diesem auch mehrere Formen erstellt (projektintern). Jetzt dachte ich mir aber, dass ich mal eine Form in einem neuen Pojekt erstelle und es dann anschließend in meinen Hauptprojektordner reinkopiere, unter uses... angebe. Ich habe es auch über den Projektinspektor hinzugefügt und es müsste eigentlich alles problemlos klappen. Lazarus erkennt auch die Form und die Unit.

Wenn ich dann aber über meinen Button die Form aufrufen möchte (FormX.show; ) (das mit dem show schlägt mir Lazarus auch von allein vor, wenn ich FormX. eingebe und kurz warte, daraus schließe ich, dass alle nötigen verknüpfungen eigentlich da sein müssten.), dann kommt die Fehlermeldung: "external SIGSEGV In Datei: '.\include\customform.inc' in Zeile 2190" und dann springt er automatisch zur Stelle:
procedure TCustomForm.Show;
begin
Visible := True;
BringToFront;
end;
und unterstreicht die "Zeile Visible := True"

Hm, was ist nun falsch? Visible ist von anfang an auf False gestellt (also von FormX).

Vielen Dank für eure Unterstützung. LG, Thomas

Perlsau 27. Sep 2013 23:33

AW: Error bei Einbindung von einer projektextern erstellten Unit
 
Vielleicht läßt du Visible := True; einfach mal weg, denn Show setzt ja bereits Visible auf True.

Bernhard Geyer 28. Sep 2013 07:27

AW: Error bei Einbindung von einer projektextern erstellten Unit
 
Hast du das Formular auch erzeugt? Von der IDE (jedenfalls kenn ich das von Delphi) werden neue Formulare automatisch erzeugt (Eintrag in dpr).
Wenn du ein existierendes Formular hinzufügst wird das nicht geschehen und du greifst auf ein nicht initialisiertes Objekt zu.

Perlsau 28. Sep 2013 07:41

AW: Error bei Einbindung von einer projektextern erstellten Unit
 
Mir ist dennoch nicht so recht klar, was er eigentlich macht:

Zitat:

Zitat von thomassolymosi (Beitrag 1230134)
Wenn ich dann aber über meinen Button die Form aufrufen möchte (FormX.show; )

Demnach ruft er in OnKlick eines Buttons FormX.Show auf. Der beigestellte Code besagt aber was ganz anderes:
Delphi-Quellcode:
procedure TCustomForm.Show;
begin
  Visible := True;
  BringToFront;
end;
Ist TCustomForm jetzt plötzlich FormX oder eine Procedure seiner Hauptunit, auf der sich der erähnte Button befindet? Ich steig' da nicht durch :?:

Ansonsten hast du natürlich vollkommen recht: Ohne vorheriges (am besten in OnCreate) FormX := TFormX.Create; gibt's keine Instanz.

@thomassolymosi
Gehen wir mal davon aus, daß TCustomForm die Klasse deines Hauptformulars ist, dann rufst du im Buttonklick das hinzugefügte und erzeugte (instanziierte) Formular FormX mit oben in fettem Blau dargestellten Code auf. Visible = True und BringToFront sind unnötig, weil Visible bei Show automatisch auf True gesetzt wird und ebenso automatisch das angezeigte Formular im Vordergrund steht.

thomassolymosi 30. Sep 2013 08:32

AW: Error bei Einbindung von einer projektextern erstellten Unit
 
Hi, vielen Dank für eure schnellen Antworten!
Mein Fehler war es, dass ich die Form vorher nicht created habe, so wie ihr es geschrieben habt. Jetzt läuft alles wunderbar =) Ich habe mir schon gedacht, dass es nur was ganz kleines ist.
Zu deiner Frage, Perlsau: Deer Code, den ich gepostet habe, befand sich in dem Quellcode Customform.inc von Lazarus selbst. Also ist das (vllt.!?) eine Unterprozedur die ich mit "FormX.show;" aufrufe und an der stelle hat er mir dann ein Error rausgespuckt.

Vielen Dank! LG, Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:55 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