oh man... das ist mir jetzt schon richtig peinlich ... es geht nicht.
Ich schreib einfach nochmal alles genau auf. Ich machs genau so wie ihr sagt, aber es geht so einfach nicht. Ihr denkt jetzt bestimmt das ich zu blöd oder so bin...
Zitat:
vielleicht hat unit7 unit1 nicht in der uses-Liste. Aber dann müsste Delphi schon beim kompilieren mackern. Schau trotzdem mal bei unit7 nach uses und dann kuck, ob da irgendwas von unit1 steht.
Zitat:
usw., usw., usw.... Je nachdem welche
Unit Du in welcher verfügbar haben willst!
HTH!
Ich habe alle units in der uses liste.... hier nochmal der code von form1 und form2.
Form1:
Code:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, jpeg, ExtCtrls,unit2, ComCtrls, ImgList, ShellAPI;
type
wuerfelRecord = record
zahl: integer;
selected: boolean;
benutzt: boolean;
end;
{usw.}
TForm1 = class(TForm)
MainMenu1: TMainMenu;
Datei1: TMenuItem;
Beenden1: TMenuItem;
N1: TMenuItem;
{usw.}
ProgressBar1: TProgressBar;
ProgressBar2: TProgressBar;
ProgressBar3: TProgressBar;
{usw.}
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
{+variablen von der hauptform}
implementation
uses Unit3, Unit4, Unit6, Unit7, Unit8;
{$R *.dfm}
Form2:
Code:
unit Unit7;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm7 = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form7: TForm7;
implementation
uses Unit1,Unit2;
{$R *.dfm}
So... jetzt erzähl ich nochmal ganz genau wie was läuft (der ärger ist vielleicht herauszuhören, ich ärger mich über mich selber!
)
In form1 ist in der FormShow-prozedur (diese prozedur wird aufgerufen wenn form1.visible:=true gesetzt wird) eine bedingung.
Code:
if spieler[1].steuerung=false then {computersteuerung beim ersten spieler?}
begin
form7.enabled:=true;
form7.visible:=true;
form1.enabled:=false;
end;
So, dadurch, das form7.visible gesetzt wird, tritt in form7 die form7.formshow-prozedur ein (durch das visible machen):
Code:
procedure TForm7.FormShow(Sender: TObject);
begin
form1.Enabled:=false;
{SetWindowPos(
Handle, HWND_TOPMOST, 0 , 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);}
label1.Caption:='Bitte warten sie, bis der Computer (' + spieler[r].name + ') seine Züge getätigt hat.';
end;
Das diese prozedur eintritt, seh ich daran das label1.caption sich oben entsprechend ändert.
An diesem Punkt ist aber form1 immernoch aktiv!
Ich habe unit1 in der uses liste, ihr könnt es ja alle oben sehen.
So. Dann hab ich mal testweise einen button in die form7 eingefügt. Dieser macht nix anderes als beim klick form1.enabled:=false zu setzen.
Und siehe da, es funktioniert! Form1 ist nichtmehr anwählbar!
Und jetzt das paradoxum: Wenn ich diesen button (button1) in der FormShow-prozedur von form7 klicken lasse (button1.click)
dann ist form1 immernoch aktiviert!!
Mehr gibt es nicht zu sagen. Das ist genau das was ich gemacht habe, nicht weniger, nicht mehr. Mit form4 passiert genau das gleiche, und da geht es. Der gleiche code, einfach genau das gleiche.
Kann es sein das es vielelicht ein problem gibt das form1 nicht sofort nach dem enablen auf disabled gesetzt werden kann? (formshow)
@Hansa:
Zitat:
eine Form:
Code:
procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.Enabled := true;
Form1.Show;
Form2.Enabled := false;
end;
nächste Form:
Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Enabled := true;
Form2.Show;
Form1.Enabled := false;
end;
Das kann ich nicht nutzen für mein spiel irgendwie. 1. funktioniert das disabeln durch buttons ja (siehe oben) und ich brauchs ja in der formshow-prozedur. Und dann brauch ich form7.show; ja nicht machen, weil die automatisch aufgerufen wird, weil form7.visible:=true gesetzt wird.
So, jetzt lacht mich aus... ich weiss wirklich nicht was bei mir kaputt ist und ich mach euch schon wieder viel zu viel arbeit...