Units zusammenführen
-
- Beiträge: 143
- Registriert: Mo 30. Mär 2020, 12:37
Units zusammenführen
Hallo, Ich bin "neu" mit Lazarus unterwegs und mit dem Forum - schlimmer geht es wohl nicht.
Nun habe ich ein paar kleine Units geschrieben und möchte die nun in einem Programm zusammenfassen. Die Units selbst kann ich durch "öffnen" im Programm aufnehmen - nur wird das zur Unit gehörende Formular nicht mitgenommen. Wie geht das denn? Kann jemand helfen?
Gruß und Danke
Nun habe ich ein paar kleine Units geschrieben und möchte die nun in einem Programm zusammenfassen. Die Units selbst kann ich durch "öffnen" im Programm aufnehmen - nur wird das zur Unit gehörende Formular nicht mitgenommen. Wie geht das denn? Kann jemand helfen?
Gruß und Danke
-
- Beiträge: 6907
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Units zusammenführen
Sind deine Units unter uses gelistet ?
Befindet sich ganz zu oberst von deinem Hauptform.
Befindet sich ganz zu oberst von deinem Hauptform.
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, EditBtn, FileUtil,
[color=#0000FF]deineUnit1, deineUnit2[/color];
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
Re: Units zusammenführen
Hallo, da sollte man schon etwas genauer wissen, was du bisher hast, bzw. wie du die Units und Forms erstellt hast.
Units können zu einem Projekt zusammengefasst werden.
Die Unit muss Kenntniss von der 'Form' haben. Dies geschieht normalerweise durch den Eintrag von
{$R *.lfm}
unterhalb von 'Implementation'. Die Form hat den selben Dateinamen wie die Unit, aber mit der Dateiendung '.lfm'.
(also z.B. 'test.pas' für die Unit und für die Form dann 'test.lfm').
In Lazarus kann man mit F12 zwischen Unit und Form wechseln, wenn alles richtig gemacht wurde.
Eventuell hilft dir das schon etwas weiter.
Der Tipp von Mathias ist nur dann richtig, wenn es sich um andere Form-Units handelt (Nicht zu dieser Unit gehörend). Bei der zur Form gehörenden Unit wäre das so nicht richtig.
(Ein 'Sorry' in die Schweiz wegen meiner Klugschei..erei
)
Units können zu einem Projekt zusammengefasst werden.
Die Unit muss Kenntniss von der 'Form' haben. Dies geschieht normalerweise durch den Eintrag von
{$R *.lfm}
unterhalb von 'Implementation'. Die Form hat den selben Dateinamen wie die Unit, aber mit der Dateiendung '.lfm'.
(also z.B. 'test.pas' für die Unit und für die Form dann 'test.lfm').
In Lazarus kann man mit F12 zwischen Unit und Form wechseln, wenn alles richtig gemacht wurde.
Eventuell hilft dir das schon etwas weiter.
Der Tipp von Mathias ist nur dann richtig, wenn es sich um andere Form-Units handelt (Nicht zu dieser Unit gehörend). Bei der zur Form gehörenden Unit wäre das so nicht richtig.
(Ein 'Sorry' in die Schweiz wegen meiner Klugschei..erei

Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
-
- Beiträge: 143
- Registriert: Mo 30. Mär 2020, 12:37
Re: Units zusammenführen
Vielen Dank erst einmal für die Antworten. Ich bin sehr froh, daß es "Antworten" sind und nicht etwa "schau in der Suchfunktion - hatten wir schon 1000 mal beantwortet" (oder so ähnlich)
Tja, was habe ich gemacht? eigentlich nur eine Unit geschrieben z.B. für ein LogIn. Das Formular "Form1" kam automatisch dazu und ich habe es dann auch entsprechend mit Editfeldern und Labels gestaltet.
In einer weiteren Unit ist z.B. ein Menü enthalten (TMainMenü) und in einer z.B. dritten Unit (mit dazugehörenden Formular) soll dann der erste Menüpunkt behandelt werden.....
Wie gesagt - die Units kann ich zusammenfassen bekomme aber die Formulare nicht dazu (die Uses habe ich aktualisiert)
Tja, was habe ich gemacht? eigentlich nur eine Unit geschrieben z.B. für ein LogIn. Das Formular "Form1" kam automatisch dazu und ich habe es dann auch entsprechend mit Editfeldern und Labels gestaltet.
In einer weiteren Unit ist z.B. ein Menü enthalten (TMainMenü) und in einer z.B. dritten Unit (mit dazugehörenden Formular) soll dann der erste Menüpunkt behandelt werden.....
Wie gesagt - die Units kann ich zusammenfassen bekomme aber die Formulare nicht dazu (die Uses habe ich aktualisiert)
- af0815
- Lazarusforum e. V.
- Beiträge: 6768
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Units zusammenführen
Man fasst auch units mit verschiedenen visuellen Elementen im normalfall nicht zusammen. Die IDE (Lazarus) verwaltet eine visuell editierbare Komponente pro unit. ZB. kann man mehre Forms nicht zu einer Unit zusammenfassen.
Muss man auch nicht, das Loginformular kann jederzeit vom Hauptformular aufgerufen werden und auch von diesen erzeugt bzw. zerstört werden. Das dritte Formular kann auch vom Hauptformular gesteuert werden, die Lebenszeit dieses Formular kann man je nach den Erfordernissen anpassen. Dazu gibt es unter den Projektoptionen den Bereich Forms. Dort kann man sagen ob die Formulare automatisch beim Programmstart oder selbst erzeugt werden. Das Formular das unter Auto-Create ganz oben steht ist das Hauptformular, dem beim Start die Kontrolle übergeben wird.
Muss man auch nicht, das Loginformular kann jederzeit vom Hauptformular aufgerufen werden und auch von diesen erzeugt bzw. zerstört werden. Das dritte Formular kann auch vom Hauptformular gesteuert werden, die Lebenszeit dieses Formular kann man je nach den Erfordernissen anpassen. Dazu gibt es unter den Projektoptionen den Bereich Forms. Dort kann man sagen ob die Formulare automatisch beim Programmstart oder selbst erzeugt werden. Das Formular das unter Auto-Create ganz oben steht ist das Hauptformular, dem beim Start die Kontrolle übergeben wird.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- kupferstecher
- Beiträge: 431
- Registriert: Do 17. Nov 2016, 11:52
Re: Units zusammenführen
@TE: Du meinst aber nicht, wie man das zur Unit passende Formular anzeigt? Das wäre mit der F12-Taste während die zugehörige Unit im Editor geöffnet ist.
Schau mal nach dem Projektinspektor (Menü Projekt -> Projektinspektor). Dort sollte die Unit eingetragen werden. Außerdem muss nicht nur die Unit-Datei am richtigen Ort (z.B. Projektordner) sein, sondern auch die passende Formulardatei (.lfm). Wenn die Dateien an einem anderen Ort liegen, kann der Ort über die Projektoptionen unter "Pfade" eingetragen werden.
Also ganz einfach:
Unit und Formulardatei in das Projektverzeichnis kopieren.
Im Projektinspektor die Unit hinzufügen.
Ein Doppelklick im Projektinspektor öffnet die Unit im Editorfenster.
Dann F12 drücken und das Formular wird angezeigt.
Schau mal nach dem Projektinspektor (Menü Projekt -> Projektinspektor). Dort sollte die Unit eingetragen werden. Außerdem muss nicht nur die Unit-Datei am richtigen Ort (z.B. Projektordner) sein, sondern auch die passende Formulardatei (.lfm). Wenn die Dateien an einem anderen Ort liegen, kann der Ort über die Projektoptionen unter "Pfade" eingetragen werden.
Also ganz einfach:
Unit und Formulardatei in das Projektverzeichnis kopieren.
Im Projektinspektor die Unit hinzufügen.
Ein Doppelklick im Projektinspektor öffnet die Unit im Editorfenster.
Dann F12 drücken und das Formular wird angezeigt.
-
- Beiträge: 143
- Registriert: Mo 30. Mär 2020, 12:37
Re: Units zusammenführen
.........habe ich noch nicht wirklich verstanden.
Muß ich erst mal versuchen nachzuvollziehen. Danke erst mal!
Muß ich erst mal versuchen nachzuvollziehen. Danke erst mal!

- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Units zusammenführen
Jedes Formular hat seine eigene Unit.Joachim Raap hat geschrieben:.........habe ich noch nicht wirklich verstanden.
Muß ich erst mal versuchen nachzuvollziehen. Danke erst mal!
Das Programm hat ein Hauptformular (Application.MainForm).
Welches das Hauptformular ist, wird festgelegt unter Projekt -> Projekteinstellungen -> Formulare. Das erste Formular, daß in der Liste der automatisch erzeugten Formulare steht ist dieses Hauptformular.
Wenn man ein anderes Formular anzeigen will, so kann man daß z.B. in einem OnClick EventHandler eines Buttons machen, indem man folgenden Code ausführt:
Code: Alles auswählen
procedure TMainForm.Button1Click(Sender: TObject);
// Für Fall 2 (siehe unten)
var
aForm : TForm2;
begin
// Für den Fall, daß das Formular automatisch erzeugt wurde (was ich eigentlich nicht empfehle)
Form2.Show();
// Für den 2. Fall, daß das Formular nicht automatisch erzeugt wurde, muss dieses zuerst erzeugt werden.
// dafür muß die unit des zweiten Formulares hinter dem implementation keyword in der Unit des Hauptformulares eingebunden werden mit "uses unit2;"
aForm := TForm2.Create(Application); // Formular 2 erzeugen und die Application als Owner übergeben. Dadurch wird es automatisch wieder frei gegeben
aForm.Show();
// oder
aForm.Visible := True;
// oder wenn das Formular Modal sein soll (also sozusagen als einziges im Vordergrund stehender Dialog sein soll)
aForm.ShowModal();
end;
-
- Beiträge: 6907
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Units zusammenführen
Die Idee finde ich nicnt so gut. Bei jedem Buttonclick wird ein neues Form erzeugt.
Ich würde es nach Showmodal wieder zerstörren.
Ich würde es nach Showmodal wieder zerstörren.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Units zusammenführen
Man kann ja auch die vorgefertigte Variable Form2 verwenden.Mathias hat geschrieben:Die Idee finde ich nicnt so gut. Bei jedem Buttonclick wird ein neues Form erzeugt.
Ich würde es nach Showmodal wieder zerstörren.
Code: Alles auswählen
procedure TForm1.Button1Click(Sender : TObject);
begin
if not Assigned(Form2) then Form2 := TForm2.Create(Application);
form2.Show();
end;
Im Fall von ShowModal gebe ich dir Recht. Da sollte dann nach ShowModal aForm.Free aufgerufen werden.