![]() |
Probleme beim Zugreifen auf 2. Form
Heyho,
ich arbeite grad' an einem Tool für ein Spiel und brauche dafür 2 Formulare. Hat soweit gut funktioniert, bis ich mich dem 2. Formular gewidmet hab: Das 2. Formular konnte ich soweit einbinden, sodass es auch angezeigt wird. Genauso ließen sich auch einfache Sachen für das Interface im 2. Formular erstellen (Button wird gedrückt -> Edit-Feld wird angezeigt). Das eigentliche Problem ist aber, dass sich manche Sachen in der 2. Form einfach nicht aufrufen lassen wollen. Damit meine ich z.b. ein Label, dass ich darauf platziert hab und ich es, was ich auch mache, nicht zur Laufzeit verändern kann. In der 1. Form funktioniert dabei alles wunderbar. Anderes Beispiel: Ich wollte anfangs die Größe eines Panels zur Laufzeit verändern, was im 2. Formular wieder nicht ging. Oder hier noch'n seltsames Beispiel: Das Deaktivieren von Edit-Feldern funktioniert, wenn ich es durch einen RadioButton INNERhalb des 2. Formulars mache. Wenn ich jetzt aber versuche aus der 1. Unit bzw. Form darauf zuzugreifen passiert nix. Selbst wenn ich ne extra Funktion schreibe, die das selbe tut, aber in der 2. Form steht (TForm2.Test), geht es nicht. Kann da jemand vielleicht irgendwelche logischen Zusammenhänge erkennen? :D |
AW: Probleme beim Zugreifen auf 2. Form
Ja, aber zeig doch mal den Code-Teil, wo du die zweite Form zum Leben erweckst
(Erinnert mich ein wenig an "Wenn ich mit dem Finger auf den Arm drücke tut es weh, und auch am Bein, am Kopf, am Fuß, usw. Was ist da los?" A: "Der Finger ist gebrochen!") |
AW: Probleme beim Zugreifen auf 2. Form
Da gibt's nicht viel zu zeigen :D
Delphi-Quellcode:
procedure TForm2.Test2;
begin Form1.Label1.Caption := 'Test'; // Funktioniert end; ... procedure TDialogBox.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: integer); begin Form2.Label1.Caption := 'Test'; // Funktioniert nicht end; Zitat:
|
AW: Probleme beim Zugreifen auf 2. Form
Also wenn das wirklich so ist wie Du in Deinem Beispiel beschreibst, dann solltet Du eigentlich ein paar Fehlermeldungen "...unbekannt.." bekommen.
Der Zugriff von Form1 auf Form2 funktioniert nur wenn Form1 auch in den USES aufgenommen wurde. Gleiches gilt auch umgekehrt. Nur der Zugriff von Form1 auf Form2 und von Form2 auf Form1 kann wegen zirkulärer Bezüge nicht funktionieren. Also zeig bitte auch mal die USES Einträge. Gruß K-H P.S. Was heißt hier überhaupt "funktioniert nicht"? Der Compiler wirft mit Fehlermeldungen um sich, es erscheint ein BlueScreen, statt des erwarteten Ergebnisses schaltet sich das Radio ein....... |
AW: Probleme beim Zugreifen auf 2. Form
Unit1:
Delphi-Quellcode:
unit Unit1;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Unit2, ExtCtrls, Menus, StdCtrls, ActnList, Windows, Contnrs; type ... Unit2:
Delphi-Quellcode:
So sollte es doch auch in der Theorie funktionieren, oder nicht?
unit Unit2;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, Buttons, Windows; type { TForm2 } TForm2 = class(TForm) ... end; var Form2: TForm2; implementation uses Unit1; Edit: "Funktioniert nicht" heißt in diesem Fall einfach nur, dass nix passiert! Ich wär ja froh, wenn da wenigstens ne Fehlermeldung irgendwo auftauchen würde, aber es tut sich ja nichts Edit2: Und mit den Uses sollte es ja nichts zu tun haben. Ich kann ja das Label, egal aus welcher Unit, nicht verändern |
AW: Probleme beim Zugreifen auf 2. Form
So wird das nichts. Zip das ganze Projekt und hänge es hier an.
|
AW: Probleme beim Zugreifen auf 2. Form
Liste der Anhänge anzeigen (Anzahl: 1)
Zu Befehl.
Tut mir Leid dafür, dass da nichts kommentiert ist. Wollte das eigentlich zum Ende hin machen, aber ich hoffe das sollte nicht zu Schlimm sein. Hab da auch teilweise ein paar Zeilen eingefügt zum Testen eingefügt, falls da mal was sinnlos erscheint. Edit: Es muss zuerst eine neue Dialogbox im Graphen erstellt werden (Neue Dialogbox -> 1 Verzweigung), bevor was im anderen Fenster (2. Form) verändert werden kann. |
AW: Probleme beim Zugreifen auf 2. Form
Funktioniert doch.
Form2.Test2 wird in TForm1.DeleteClick ausgeführt. Ich erzeuge also über Neue DialogBox - 1 Verzweigung ein Neues Objekt und wähle dann über das Kontextmenü "Löschen" an. Danach steht im Label1 ein "No". Das alles mit der EXE im Zip. |
AW: Probleme beim Zugreifen auf 2. Form
Ja, es funktioniert mit Label1 auf Form1, aber nicht mit Label1 auf Form2 (dort wo links "brum" steht :D).
Es stehen beide Befehle zum ändern in der gleichen Prozedur und es funktionieren tut nur einer :? |
AW: Probleme beim Zugreifen auf 2. Form
Sorry Lazarus habe ich nicht. Die ProcessMessages-Aufrufe kommen mir allerdings recht überflüssig vor.
|
AW: Probleme beim Zugreifen auf 2. Form
Zitat:
|
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:
Irgendwas muss ich doch falsch gemacht haben :?
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. |
AW: Probleme beim Zugreifen auf 2. Form
Wo ist das Problem:
Delphi-Quellcode:
funktioniert!
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. Gruß K-H |
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... |
AW: Probleme beim Zugreifen auf 2. Form
Zitat:
|
AW: Probleme beim Zugreifen auf 2. Form
Zitat:
|
AW: Probleme beim Zugreifen auf 2. Form
Welche Fehlermeldung und in welcher Zeile taucht die auf (gesamte Methode bis dahin posten)
|
AW: Probleme beim Zugreifen auf 2. Form
Zitat:
Wie sieht denn die Projektdatei aus? |
AW: Probleme beim Zugreifen auf 2. Form
Zitat:
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:
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
(FORMS_TCUSTOMFORM_$__SHOW (19)<- Zeile im Assembler)
0041B771 8b09 mov (%ecx),%ecx Edit: @Olli: Das ist ja mal eine interessante These! :D
Delphi-Quellcode:
Jetzt merk ich's auch... Form2 sollte ja eigentlich schon erstellt sein. Aber müsste es dann nicht ein Namenskonflikt geben?
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. 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: |
AW: Probleme beim Zugreifen auf 2. Form
Zitat:
|
AW: Probleme beim Zugreifen auf 2. Form
Zitat:
Zitat:
|
AW: Probleme beim Zugreifen auf 2. Form
Zitat:
|
AW: Probleme beim Zugreifen auf 2. Form
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 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