![]() |
Zitat:
Wenn Du in Form2 was von Form1 brauchst, z.B. ein Button, dann brauchst Du diese Variable. Siehe mein anderes Posting wie man es macht, damit Variablen auch in anderen Units verfügbar sind. Du schreibst z.B. in Form2:
Delphi-Quellcode:
Daher darfst Du auf keinen Fall diese Variablen entfernen :!: :warn:
Form1.Button.Enabled := False;
Grüsse, Daniel :hi: |
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:
Zitat:
Form1:
Code:
Form2:
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}
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:
So, dadurch, das form7.visible gesetzt wird, tritt in form7 die form7.formshow-prozedur ein (durch das visible machen):
if spieler[1].steuerung=false then {computersteuerung beim ersten spieler?}
begin form7.enabled:=true; form7.visible:=true; form1.enabled:=false; end;
Code:
Das diese prozedur eintritt, seh ich daran das label1.caption sich oben entsprechend ändert.
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; 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:
So, jetzt lacht mich aus... ich weiss wirklich nicht was bei mir kaputt ist und ich mach euch schon wieder viel zu viel arbeit... :cry: |
Zitat:
Das würde anders aussehen. //z.B. in jeder Sparte das gleiche schreiben usw.... Poste doch einfach mal die gesamte Unit. Oder am besten das ganze Projekt, dann kann man(n) es selbst ausprobieren. Ausserdem ist mir folgendes aufgefallen:
Delphi-Quellcode:
Bei den uses im interface Teil, also ganz oben, hast Du auch Form2 drin. Mach es da weg, nur im implementation Teil, also unten.
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} Grüsse, Daniel :hi: |
Zitat:
|
Das uses unit1 ganz oben hab ich rausgenommen. Da hab ich keine ahnung wie das da hin kam. Jedenfalls hat sich nichts geändert.
Ich hab das ganze projekt mal hochgeladen. Es ist teilweise mit kommentaren, aber ich glaube kaum das überhaupt jemand da durchsieht :oops: . Um das "problem" zu < erzuegen > musst du (oder andere :)) nach dem start des programmes den spieler 1 einen namen geben (spieler 2 auch) und dann bei spieler 1 steuerung auf computer stellen. Dann muss nämlich der computer die erste runde machen, und in der unit1 bei form1.formshow steht ganz am ende der aufruf von form7. Das messagefenster hab ich auchnoch eingebaut.... seht aber selber. Es zeigt an das form1 disabled ist, was aber garnicht stimmt. Sagt mir wenn was unverständlich ist. Ich hab einfach mal alles gepackt was in meinem projektordner drin war, weil ich nicht weiss wleche dateien alle zum kompilieren benötigt werden (dfm.dpr,dof,cfg,pas,dcu,res?). Desshalb ist es leider auch gepackt 3mb gross. Ich habs als selbstentpackendes rar-archiv gepackt, desshalb ist es eine exe (viele haben kein winrar). Nur das ihr wisst, es ist kein virus drin oder so! (ich geh nur von mir aus, ich geh auch lieber auf nummer sicher bei exen) ![]() [edit] nagut, ich geh jetzt erstmal drüber schlafen. Ich will euch an demselbigen natürlich auch nicht hindern :) . Die Sache muss ja nicht zu morgen fertig sein, bloss ihr wisst selber wie es ist wenn man unbedingt ein problem lösen will, und man nur über das nachdenkt :lol: :wink: n8, und danke für die grossartige hilfe bis jetzt, das engagement (bestimmt falsch geschrieben < g >) hier im forum ist echt super! mfg Helmut [/edit] |
Zitat:
Alle anderen braucht man nicht, die werden beim komplizieren erzeugt. Das passiert bei jedem dann. Dann sind es auch nur noch ca. 400Kb. Grüsse, Daniel :hi: |
ah, grade noch gesehen deinen post.
ok, werde morgen nochmal neu hochladen. Aber es wird keine grosse grössenersparniss geben. Die grösse liegt an den videos in meinem programm, und winrar kann besonders textdateien wie dpr usw. zu 90% komprimieren. Die videos kann ich jetzt auch nicht so auf die schnelle rausnehmen, weil die schon fest implementiert sind. :( |
Hi,
so ich habe es gefunden. Das Problem ist die Zeile
Delphi-Quellcode:
Die mit // Kommentierte.
procedure TForm7.FormShow(Sender: TObject);
begin form1.Enabled:=false; {button1.Click;} {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.'; //if form1.enabled=true then showmessage('form1 aktiv!!') else showmessage('form1 nicht aktiv!!') end; Nimm sie da raus, und schriebe sie in der OnPaint-Prozedur von Form1 rein! Dann gehts, wenn ich es richtig verstanden habe. OnShow war einfach zu früh. OnPaint kommt erst danach. Siehe auch: ![]() Grüsse, Daniel :hi: |
Hi,
Zitat:
Gruß Hansa |
Zitat:
Delphi-Quellcode:
Also kann man den enabled-status in formshow nicht sofort nach dem erzeugen benutzen? Das soll erstmal einer wissen....
procedure TForm7.FormShow(Sender: TObject);
begin [color=#ff0008]form1.Enabled:=false;[/color] //das hat nicht funktioniert label1.Caption:='Bitte warten sie, bis der Computer (' + spieler[r].name + ') seine Züge getätigt hat.'; end; Aber jetzt klappt es ja, vielen dank nochmal für die Hilfe! mfg Helmut |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:22 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