Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Probleme beim Zugreifen auf 2. Form (https://www.delphipraxis.net/175525-probleme-beim-zugreifen-auf-2-form.html)

Acuaplano 28. Jun 2013 15:20

AW: Probleme beim Zugreifen auf 2. Form
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1219946)
Sorry Lazarus habe ich nicht. Die ProcessMessages-Aufrufe kommen mir allerdings recht überflüssig vor.

Die hab' ich auch nur zum Test reingepackt... ich werd' nachher einfach mal versuchen ein komplett neues Projekt zu erstellen und den Code dann dareinkopieren. Vielleicht ist es ja ein Bug von Lazarus aus.

Acuaplano 28. Jun 2013 16:15

AW: Probleme beim Zugreifen auf 2. Form
 
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 :?

p80286 28. Jun 2013 16:41

AW: Probleme beim Zugreifen auf 2. Form
 
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

Acuaplano 28. Jun 2013 18:33

AW: Probleme beim Zugreifen auf 2. Form
 
Liste der Anhänge anzeigen (Anzahl: 1)
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...

Olli73 28. Jun 2013 20:16

AW: Probleme beim Zugreifen auf 2. Form
 
Zitat:

Zitat von Acuaplano (Beitrag 1219949)
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)

Acuaplano 28. Jun 2013 20:33

AW: Probleme beim Zugreifen auf 2. Form
 
Zitat:

Zitat von Olli73 (Beitrag 1219969)
Zitat:

Zitat von Acuaplano (Beitrag 1219949)
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.

Sir Rufo 28. Jun 2013 20:36

AW: Probleme beim Zugreifen auf 2. Form
 
Welche Fehlermeldung und in welcher Zeile taucht die auf (gesamte Methode bis dahin posten)

Olli73 28. Jun 2013 20:42

AW: Probleme beim Zugreifen auf 2. Form
 
Zitat:

Zitat von Acuaplano (Beitrag 1219949)
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.

Die einzige logische Erklärung die mir für dein Problem einfällt: TForm1.create wird aufgerufen bevor Form2 automatisch erstellt wird. Dieses verhalten würde mich zwar arg wundern, aber das Ergebnis wäre genau das was du jetzt hat; denn Form2 würde danach auf eine zweite Instanz von TForm2 zeigen, die aber unsichtbar ist.

Wie sieht denn die Projektdatei aus?

Acuaplano 28. Jun 2013 20:47

AW: Probleme beim Zugreifen auf 2. Form
 
Zitat:

Zitat von Sir Rufo (Beitrag 1219972)
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 :D

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

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! :D
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! :thumb:

Uwe Raabe 28. Jun 2013 21:00

AW: Probleme beim Zugreifen auf 2. Form
 
Zitat:

Zitat von Acuaplano (Beitrag 1219975)
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:46 Uhr.
Seite 2 von 3     12 3      

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