Arbeiten mit Formen zur Laufzeit erstellt

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Arbeiten mit Formen zur Laufzeit erstellt

Beitrag von Hercules »

Hallo an alle, einen schönen Guten Morgen.

Ich hoffe dass Ihr alle ein schönes Osterfest hattet. :D
Vor kurzer Zeit hatte ich das Problem, wie man Formen zur Laufzeit herstellt.
Dank Eurer Hilfe habe ich das dann auch in den Griff bekommen (fast).
Ich kann jetzt beliebig viele Formen auf einem Hauptformular erstellen.
Wie das aussieht habe ich mal in einer Grafik im Anhang abgestellt.
Da ich aber nach der Erstellung auch mit den Formularen arbeiten möchte (ändern, löschen, u.s.w.),
habe ich bei der Erstellung jeder Form ein Memo verpasst wo ich was reinschreiben kann und dem
Memo und auch der neu erstellten Form eine OnClick-Ereignis-Routine hinzugefügt, um dann reagieren zu können.
Das funktioniert zwar soweit ganz gut, die Routinen werden bei so einem Ereignis auch aufgerufen,
aber leider kann ich nicht abfragen, in welcher Form oder in welchem Memo das Ereignis statt gefunden hat.
Wenn ich z.B. den Form.Namen abfrage, dann bekomme ich immer den Namen der zuletzt erstellten Form,
auch wenn ich eine bereits bestehende Form anklicke. :oops:
Kann mir jemand sagen, was ich da falsch mache, oder geht das vielleicht gar nicht mit Lazarus?

Mit freundlichen Grüßen Hercules.
Und eine schönen Tag noch. :D
Dateianhänge
Beispiel.bmp
Beispiel.bmp (1.71 MiB) 2195 mal betrachtet

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

Re: Arbeiten mit Formen zur Laufzeit erstellt

Beitrag von Michl »

Im OnClick-Eventhandler vom TMemo (bei dir MemoOnClick) wird der Sender mit übergeben. Damit ist auswertbar, welches Memo das Event gefeuert hat. Bsp.:

Code: Alles auswählen

procedure TForm1.MemoOnClick(Sender: TObject);
begin
  if not Assigned(Sender) then Exit;
  if not (Sender is TMemo) then Exit;
  ShowMessage(TMemo(Sender).Name)// Name des TMemos
  if not Assigned(TMemo(Sender).Parent) then Exit;
  ShowMessage(TMemo(Sender).Parent.Name)// Name des Parents (in deinem Fall, der Name des Formulars)
end

Code: Alles auswählen

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

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Arbeiten mit Formen zur Laufzeit erstellt

Beitrag von Hercules »

Hallo Michl,
ich bin begeistert. Habe Deine Lösung ausprobiert: Spitze, es funktioniert.
Das Gute dabei ist noch: Ich habe es auch kapiert. :D
Man lernt halt nie aus.
Vielen, vielen Dank!
Hercules.

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Arbeiten mit Formen zur Laufzeit erstellt

Beitrag von Mathias »

Ich habe den Code von Hercules ausprobiert, aber so wie es scheint, gehen die MDI-Fenster nur unter Windows.
Unter Linux kommen nur farbige Rechtecke ohne Rahmen.
Starte ich es aber unter Wine, dann kommen die Fenster richtig. Aber des Design(Skin) der Fenster sieht typisch Windows aus.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  form: TForm;
begin
  form := TForm.Create(Self);
  form.ActiveMDIChild;
 
  form.Left := 100;
  form.Top := 100;
  form.Color := Random($ffffff);
  form.BorderStyle := bsSizeable;
  form.BorderIcons := [biSystemMenu, biMinimize, biMaximize];
 
 
  //  form.Menu := MainMenu1;
  form.Visible := True;
  form.Parent := Self;
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Arbeiten mit Formen zur Laufzeit erstellt

Beitrag von Hercules »

Hallo Mathias,
ich habe schon sehr viel Hilfe in diesem Forum bekommen und würde auch gern mal helfen.
Leider hab ich mit Linux nichts am Hut. Ich werd mal meinen Sohnemann fragen, der macht mit Linux.
Ich melde mich, wenn er einen Tipp hat, ich melde mich auch wenn er keinen Tipp hat. :(
Wird heute allerdings nichts mehr, melde mich morgen.....
Hercules.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Arbeiten mit Formen zur Laufzeit erstellt

Beitrag von Timm Thaler »

Mathias hat geschrieben:Ich habe den Code von Hercules ausprobiert, aber so wie es scheint, gehen die MDI-Fenster nur unter Windows.


Da war doch was... Mal schnell in der Purebasic Hilfe zum MDI-Gadgets geschaut... Unterstützte OS: Windows

Ja, anscheinend sind MDIs eine Spezialität von Windows, die es auf anderen Systemen so nicht gibt. Unter Windows sind sie auch am Aussterben, habe ich den Eindruck.

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Arbeiten mit Formen zur Laufzeit erstellt

Beitrag von Mathias »

Unter Windows sind sie auch am Aussterben, habe ich den Eindruck.

Unter Windows kenne ich auch keine Anwendung mehr, welche so etwas hat, eigentlich Schade, ich fand es eine gute Sache.
So viel ich weis, wurde dies mit Win 3.0 eingeführt, der Programm-Manager war ein sehr gutes Beispiel dafür.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

SchwabenTom
Beiträge: 49
Registriert: So 4. Jan 2015, 21:34
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Arbeiten mit Formen zur Laufzeit erstellt

Beitrag von SchwabenTom »

Mathias hat geschrieben:Unter Windows kenne ich auch keine Anwendung mehr, welche so etwas hat


Photoshop (?)

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Arbeiten mit Formen zur Laufzeit erstellt

Beitrag von Timm Thaler »

Mathias hat geschrieben:Unter Windows kenne ich auch keine Anwendung mehr, welche so etwas hat...


Ich hatte mal eine geschrieben - und hab sie inzwischen auch umgestellt.

War schon praktisch, wenn man z.B. Code vergleichen wollte. Jetzt muß man immer mehrere Programminstanzen aufmachen und nebeneinanderstellen.

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Arbeiten mit Formen zur Laufzeit erstellt

Beitrag von Hercules »

Hallo Mathias,
tut mir leid, dass ich solange nichts von mir habe hören lassen, obwohl ich noch versprochen habe, mich am nächsten Tag zu melden.
Leider haben wir (Sohnemann und ich ) mit Linux die gleichen Schwierigkeiten wie Du, wenn er meine Routine unter Linux verwenden will.
Bei uns sind alle Rechtecke weiß und nicht farbig. Schade, ich hätte Dir jetzt gerne etwas mehr gesagt.
Sohnemann ist von Lazarus nicht mehr so begeistert, ich konnte ihn deshalb nicht weiter löchern und ich selbst habe mit Linux nichts weiter zu tun.
Sohnemann schwört auf Linux.
Mach's erst mal Gut.....
Hercules. :(

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Arbeiten mit Formen zur Laufzeit erstellt

Beitrag von Mathias »

Wen man nach Linux und MDI googelt, kommt nichts gescheites, somit ist dies keine übliche Sache.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten