Mehrere Formen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Michael19692
Beiträge: 18
Registriert: Mi 14. Mai 2014, 21:08
OS, Lazarus, FPC: Win8 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit

Mehrere Formen

Beitrag von Michael19692 »

Hallo an alle,

Also ich bin absoluter Neuling in Sachen Programmierung. Also nicht wundern wenn ich mich nicht immer korrekt ausdrücke.
Meine Frage ist wie schaffe ich es, dass wenn ich über einen Button Form2 öffne diese genau an der Stelle geöffnet wird, wo die MainForm (Form1) sich befindet. Und noch wichtiger, sollte ich Form2 verschoben haben auf dem Bildschirm Form1 sich dort wieder öffnet wo Form2 positioniert war.

Code: Alles auswählen

 
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
uses
  Unit2;
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.Hide;
  Form2.Show;
end;
 
 
procedure TForm1.Button2Click(Sender: TObject);
begin
     Close;
end;
 
 
 
end.      
 

Code: Alles auswählen

 
unit Unit2;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm2 }
 
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form2: TForm2;
 
implementation
 
{$R *.lfm}
 
{ TForm2 }
uses Unit1;
 
procedure TForm2.Button1Click(Sender: TObject);
begin
  Form2.Close;
  Form1.Show;
end;
 
end.   
 
Für eure Hilfe schon mal Danke im voraus.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Mehrere Formen

Beitrag von Michl »

Kannst die Formproperties Top, Left, Width und Height von Form1 denen der Form2 zuweisen und umgekehrt.

z.B.:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.Top:=Form1.Top;
  Form2.Left:=Form1.Left;
  Form2.Height:=Form1.Height;
  Form2.Width:=Form1.Width;
  Form1.Hide;
  Form2.Show;
end;
Ein paar Infos mit dem Umgang mit Formularen gibts hier: http://wiki.freepascal.org/Form_Tutoria ... _Formulars
Zuletzt geändert von Michl am Do 15. Mai 2014, 09:11, insgesamt 2-mal geändert.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Benutzeravatar
theo
Beiträge: 10860
Registriert: Mo 11. Sep 2006, 19:01

Re: Mehrere Formen

Beitrag von theo »

Zwei kieine Hinweise: Die Mehrzahl vom englischen "Form" lautet auf deutsch: "Formulare" und auf englisch "Forms". "Formen" ist falsch.

Zweitens: Ich nehme mal an, dass du das mit den sich gegenseitig ersetzenden Forularen zum experimentieren machst.
In einer richtigen Anwendung wäre das nicht schön, hat was von einem Taschenspielertrick.
Möchtest du damit vielleicht etwas bestimmtes erreichen? Wenn ja was? Vielleicht geht es auch eleganter.

Michael19692
Beiträge: 18
Registriert: Mi 14. Mai 2014, 21:08
OS, Lazarus, FPC: Win8 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit

Re: Mehrere Formen

Beitrag von Michael19692 »

Hallo Michl,

supi das war der richtige Ansatz. In der Unit2 das ganze noch umgekehrt eingegeben.
Danke.

Noch eine Frage, warum wird mir in Form2 in der Taskleiste kein Icon angezeigt? Wegen dem Hide von Form1 in der Unit1?

Gruß
Michael

Michael19692
Beiträge: 18
Registriert: Mi 14. Mai 2014, 21:08
OS, Lazarus, FPC: Win8 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit

Re: Mehrere Formen

Beitrag von Michael19692 »

Hallo Theo,

Ich versuche mich an einer einfachen Adressverwaltung. Als Datenbank nehme ich im Moment eine DBase Datenbank. Mir ist klar das es nicht Zeitgemäß ist, doch mir jetzt auch noh SQL unter Firebird anzutun. Puh. Ein Schritt nach dem anderen.
In Form1 sollen 3 bis 4 Suchfelder sein. Vorname, Name, Ort und Telefon. Drunter ein Readonly Grid mit den Suchergebnissen. Unter dm Grid die Buttons Suchen, Details und Neu. Mit den Buttons Neu kommt man in die Eingabemaske. Also Name Vorname Starsse usw. als EditModus. Über den Button Detail auf der Form1 soll man auch auf Form2 gelangen aber nur im Readonlye Modul. Unter Details sieht man halt weitere Infos die im Grid auf Form1 nicht gezeigt werden.

Soweit meine Vorstellung. Ich hoffe man versteht was ich meine.

Gruß
Michael

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: Mehrere Formen

Beitrag von Aliobaba »

Michael19692 hat geschrieben:.... Als Datenbank nehme ich im Moment eine DBase Datenbank. Mir ist klar das es nicht Zeitgemäß ist, doch mir jetzt auch noh SQL unter Firebird anzutun. Puh. Ein Schritt nach dem anderen.
Hallo Michael19692,

bin auch Anfänger. Probier doch 'mal die Zeos Komponenten mit "SQLite". Hab ich auch hinbekommen und ist gar nicht soo schwer! Lade Dir einige Beispiele aus dem Netz und baue diese nach Deinen Wünschen um. Meine "blöden" Anfängerfragen (Suchfunktion nach Aliobaba!!) kannst du ja hier im Forum nachlesen 8) ; vielleicht helfen sie Dir ja auch!

Aliobaba

mein Bastlergebnis: http://www.mymemorydb.n-bay.de/
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Mehrere Formen

Beitrag von Michl »

Michael19692 hat geschrieben:Noch eine Frage, warum wird mir in Form2 in der Taskleiste kein Icon angezeigt? Wegen dem Hide von Form1 in der Unit1?
Ja.

Ich würde Dir empfehlen, Dir Gedanken darüber machen, ob es wirklich notwendig ist, von Form2 Deine MainForm (Form1) aufzurufen oder ob es nicht besser ist, nach dem Schließen von Form2 wieder zu Form1 zurückzukehren - siehe geposteten Link oder
theo hat geschrieben: Ich nehme mal an, dass du das mit den sich gegenseitig ersetzenden Formularen zum experimentieren machst.
In einer richtigen Anwendung wäre das nicht schön, hat was von einem Taschenspielertrick.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Michael19692
Beiträge: 18
Registriert: Mi 14. Mai 2014, 21:08
OS, Lazarus, FPC: Win8 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit

Re: Mehrere Formen

Beitrag von Michael19692 »

Hallo Aliobaba,

danke für das Angebot. Werde mir mal Deine Posts anschauen. Zum Thema SQL Lite. Ich hab mir das ein oder andere mal durchgelesen. Ist eine intressante Option. Allerdings an dem Anfang an dem ich stehe, lass ich mir da noch Zeit.

Gruß
Michael.

Antworten