AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Probleme beim Zugreifen auf 2. Form

Ein Thema von Acuaplano · begonnen am 28. Jun 2013 · letzter Beitrag vom 28. Jun 2013
Antwort Antwort
Seite 1 von 2  1 2   
Acuaplano

Registriert seit: 8. Mai 2013
29 Beiträge
 
#1

AW: Probleme beim Zugreifen auf 2. Form

  Alt 28. Jun 2013, 16:15
Ich hab's eben nochmal mit einem neuen Projekt probiert und entweder ist mein Lazarus verbuggt oder ich mache was falsch:
Neues Projekt erstellt - 2 Formulare - Zweites Formular in's erste eingebunden - Button und Labels darauf platziert und gleiches Problem: tut sich nix

Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Unit2;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.Label1.Caption := 'Form2';
  Label1.Caption := 'Form1';

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Form2 := TForm2.Create(self);
  Form2.Show;
end;

end.
Delphi-Quellcode:
unit Unit2;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm2 }

  TForm2 = class(TForm)
    Label1: TLabel;
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form2: TForm2;

implementation


{$R *.lfm}

end.
Irgendwas muss ich doch falsch gemacht haben
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Probleme beim Zugreifen auf 2. Form

  Alt 28. Jun 2013, 16:41
Wo ist das Problem:
Delphi-Quellcode:
program Project2;

uses
  Forms,
  Unit1 in 'Unit1.pas{Form1},
  Unit2 in 'Unit2.pas{Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.

(* *************************************** *)
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  label1.Caption:='Labello1';
  form2.label1.Caption:='labello2';
  form2.show;
end;

end.
(* ********************************************************* *)
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Label1: TLabel;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

end.
funktioniert!
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Acuaplano

Registriert seit: 8. Mai 2013
29 Beiträge
 
#3

AW: Probleme beim Zugreifen auf 2. Form

  Alt 28. Jun 2013, 18:33
Jetzt bin ich komplett verwirrt o.O

Wär nett wenn jemand das hier ausprobieren könnte. Falls es an meiner Lazarus-Version liegt (die ich übrigens eben gepatcht hab), sollten sich beide Labels ändern...
Angehängte Dateien
Dateityp: zip Test 2 Formulare.zip (4,40 MB, 2x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
778 Beiträge
 
#4

AW: Probleme beim Zugreifen auf 2. Form

  Alt 28. Jun 2013, 20:16
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Form2 := TForm2.Create(self);
Du hast aber schon dafür gesorgt, dass Form2 nicht bereits auch automatisch erstellt wird? (Ich habe keine Ahnung, ob Lazarus sich da standardmäßig so verählt wie Delphi, d.h. die Forms selber erstellt)
  Mit Zitat antworten Zitat
Acuaplano

Registriert seit: 8. Mai 2013
29 Beiträge
 
#5

AW: Probleme beim Zugreifen auf 2. Form

  Alt 28. Jun 2013, 20:33
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Form2 := TForm2.Create(self);
Du hast aber schon dafür gesorgt, dass Form2 nicht bereits auch automatisch erstellt wird? (Ich habe keine Ahnung, ob Lazarus sich da standardmäßig so verählt wie Delphi, d.h. die Forms selber erstellt)
Also wenn ich die Zeile lösche gibt's ne Fehlermeldung. Von daher würde ich einfach mal sagen, dass Lazarus die Forms nicht selber erstellt.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Probleme beim Zugreifen auf 2. Form

  Alt 28. Jun 2013, 20:36
Welche Fehlermeldung und in welcher Zeile taucht die auf (gesamte Methode bis dahin posten)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Acuaplano

Registriert seit: 8. Mai 2013
29 Beiträge
 
#7

AW: Probleme beim Zugreifen auf 2. Form

  Alt 28. Jun 2013, 20:47
Welche Fehlermeldung und in welcher Zeile taucht die auf (gesamte Methode bis dahin posten)
"Projekt project1 hat Exception-Klasse >External:SIGSEGV< ausgelöst.
Bei Adresse 41B771"

Dann zeigt er mir ne Stelle in 'nem Assembler-Fenster an, wobei ich aber nicht sehr viel damit anfangen kann. Ich kann ja trotzdem einfach mal die Zeile zitieren:
Code:
(FORMS_TCUSTOMFORM_$__SHOW (19)<- Zeile im Assembler)
0041B771 8b09                     mov   (%ecx),%ecx
Sieht ja für mich einfach aus, dass er da auf ne Form zugreifen will, die nicht vorhanden ist... aber ich halt mich da lieber raus

Edit:
@Olli: Das ist ja mal eine interessante These!

Delphi-Quellcode:
program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces,
  Forms,Unit1, Unit2;

{$R *.res}

begin
  Application.Initialize;
  RequireDerivedFormResource := True;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.
Jetzt merk ich's auch... Form2 sollte ja eigentlich schon erstellt sein. Aber müsste es dann nicht ein Namenskonflikt geben?

Edit2: JAAA!
Es muss wirklich so gewesen sein. Ich hab jetzt nen Button eingefügt, der die andere Form erstellt und es funktioniert endlich! Vielen Dank für die Hilfe!

Geändert von Acuaplano (28. Jun 2013 um 20:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#8

AW: Probleme beim Zugreifen auf 2. Form

  Alt 28. Jun 2013, 21:00
Jetzt merk ich's auch... Form2 sollte ja eigentlich schon erstellt sein. Aber müsste es dann nicht ein Namenskonflikt geben?
Wieso denn? In TForm1.FormCreate weist du der Variablen Form2 einer Instanz von TForm2 zu. Danach wird in der Projekt-Datei der gleichen Variablen eine weitere Instanz von TForm2 zugewiesen. Da gibt es keinen Namenskonflikt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
778 Beiträge
 
#9

AW: Probleme beim Zugreifen auf 2. Form

  Alt 28. Jun 2013, 21:03
@Olli: Das ist ja mal eine interessante These!
Delphi-Quellcode:
  ...
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  ...
Wusst ich es doch, dass da beide automatisch erstellt werden.

Jetzt merk ich's auch... Form2 sollte ja eigentlich schon erstellt sein. Aber müsste es dann nicht ein Namenskonflikt geben?
Wie schon geschrieben: Du änderst quasi nur den "Zeiger" Form2 von der ersten auf die zweite Instanz, die erste hängt dann in der Luft, kann also nicht mehr angesprochen werden, weil du die Speicheradresse nicht mehr kennst (wenn du dir sie nicht sonst irgendwo gemerkt hast oder ermitteln kanst).
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
778 Beiträge
 
#10

AW: Probleme beim Zugreifen auf 2. Form

  Alt 28. Jun 2013, 21:09
Edit2: JAAA!
Es muss wirklich so gewesen sein. Ich hab jetzt nen Button eingefügt, der die andere Form erstellt und es funktioniert endlich! Vielen Dank für die Hilfe!
"erstellt"? Entweder nur show aufrufen oder (bei erstellen/create) das automatische Erstellen entfernen, sonst hast du immer noch 2 Instanzen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz