Autor |
Beitrag |
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: So 29.09.02 18:33
Hi Profs
Folgendes problem versuche ich zu lösen Form1 ist
Quelltext
die anderen Form(s) From2, Form3, usw. sind
Quelltext 1:
| FormStyle:=fsStayOnTop; |
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| TForm1.Button1Click(Sender: TObject); begin {hier muss die Abfrage rein ob Form2 oder Form3 schon gestartet ist z.B.}
If {From2 nicht vorhanden} then Form2:=TForm2.Create(self); end; |
alle versuche mit
Quelltext 1: 2:
| if Active(form if activechild |
usw. funcen nicht oder nicht richtig
anbei noch ne zweite Frage
beim minimieren der Form2 form3 usw. werden die formen standardmässig an die Taskleiste angedockt ich möchte es aber oben an form1 menuleiste andocken welche möglichkeiten gibt es auch da hab ich schon einiges versucht wie onMinimize oder
Quelltext 1:
| if Form2.windowstate=wsMinimize then top:=34; |
aber auch das will nicht so richtig funcen
wer kann da helfen?
Gruss ALF
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: So 29.09.02 20:56
Hallo,
ich denke dieses kleine Beispiel wird dir helfen:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| function TfrmMain.Form2Exists: BOOLEAN; VAR i : LongInt; begin Result := FALSE; FOR i := MDIChildCount - 1 DOWNTO 0 DO IF (MDIChildren[i] IS tFrom2) THEN Result := TRUE; end; // Form2 Exists |
So schwer ist es ja nicht
Gruß
Klabautermann
|
|
CenBells
      
Beiträge: 1547
Win 7
Delphi XE5 Pro
|
Verfasst: Mo 30.09.02 10:25
Guten Morgen allerseits.
Ich glaube, wenn aman viele Fenster hat ist folgende Abfrage schneller
Quelltext 1: 2: 3: 4: 5: 6: 7:
| If not Assigned(Form2) then begin Form2 := TForm2.create(self) {andere anweisungen} end;
Form2.show; Form2.bringtofront; |
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Mo 30.09.02 10:51
Hi
Ireniceus hat folgendes geschrieben: | If not Assigned(Form2) then begin
Form2 := TForm2.create(self)
{andere anweisungen}
end;
|
Das funktioniert aber leider nur beim ersten Mal, oder wenn du nach dem Schliessen und Freigeben von Form2 selbst dafür sorgst, das Form2 wieder nil ist.
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
CenBells
      
Beiträge: 1547
Win 7
Delphi XE5 Pro
|
Verfasst: Mo 30.09.02 11:19
Zitat: | Das funktioniert aber leider nur beim ersten Mal, oder wenn du nach dem Schliessen und Freigeben von Form2 selbst dafür sorgst, das Form2 wieder nil ist. |
Ja, schon, aber das ist doch eigentlich guter stil, wenn man sich um seinen "Speicher" kümmert. Vor allem in DLL s und so.
So wie ich die Frage allerdings verstanden hab, sollen die fenster aber nicht geschlossen werden, während das programm läuft. Und wenn doch, dann macht man halt im onclose event
Form2.release;
Und endlich bin ich bei 50 angelangt *G*
Gruß
ken
|
|
ALF 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Mo 30.09.02 16:14
Hi Profs
Tut mir leid wenn ich nerve aber alle versuche hatte ich schon ausprobiert
For schleife wird trotzt geöffneter From2, Form3 usw.gar nicht durchlaufen!
der zweite Vorschlag läauft nur ein einziges mal obwohl ich in der
onclose anweisung 'Free' drinstehen habe
meine vermutung ist, weil die Form(s) From2, Form3 usw. nicht
.Formstyle:=fsMDIChild
sind, können sie auch nicht mit der MDIChildcount abfrage gesucht werden oder bin ich da Falsch? oder ist es uninteressant welche Formstyle
die anderen Form(s) haben.
hat also nix geholfen da ich das alles schon durch habe
Für weitere Hilfe würde ich mich freuen da auch die 'F1' taste nicht mehr her gibt als ihr mir gepostet habt
es sei den mein Programm ist falsch Programiert
Gruss Alf
|
|
CenBells
      
Beiträge: 1547
Win 7
Delphi XE5 Pro
|
Verfasst: Mo 30.09.02 16:42
Zitat: | der zweite Vorschlag läauft nur ein einziges mal obwohl ich in der
onclose anweisung 'Free' drinstehen habe |
deshalb habe ich ja auch noch geschrieben, das du im onclose
release;
aufrufen musst.
Hättest dir das mal alles durchgelesen
Gruß
Ken[/quote]
|
|
ALF 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Mo 30.09.02 17:05
Hi Profs
sorry aber auch mit release func nicht
ich sag doch, wahrscheinlich ist mein Programmcode falsch oder so
ich weiss es nicht wo der fehler liegt
ich poste mal bischen Proc(s)
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| program Project1;
uses Forms, Unit1 in 'Unit1.pas', {Form1} Unit2 in 'Unit2.pas', {From2} Unit3 in 'Unit3.pas', {Form3} CrTbl in 'CrTbl.pas'; {Calls und Proceduren} {$R *.RES}
begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. |
Unit1 sieht so aus;
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus, FileCtrl, Db, DBTables;
type TForm1 = class(TForm) GroupBox1: TGroupBox; Panel1: TPanel; ...... ......
procedure FormCreate(Sender: TObject); procedure Verlustmeldung1Click(Sender: TObject); procedure Table1AfterPost(DataSet: TDataSet); ........ ........
private
{ Private-Deklarationen } public
{ Public-Deklarationen } end;
var Form1: TForm1; Present: TDateTime; Year, Month, Day: Word; ...... ......
implementation
uses Unit2, Unit3;
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject); begin
Present:=Now; ...... ......
end;
procedure TForm1.Verlustmeldung1Click(Sender: TObject); var i: longint; begin {hier muss die Abfrage rein ob Form2 schon vorhanden ist} {if not exists form2 then create Form2}
{ for i:=mdichildcount-1 downto 0 do if (mdichildren[i]) is tForm2 then else TForm2.create(self);}
//die For anweisung wird überhaupt nicht ausgeführt //egal wie ich sie umformuliere selbst 'ActiveMDIChild' func nicht //dabei spielt es noch nicht mal ne rolle ob Form2 oder Form3 usw. //created ist if not Assigned(Form2) then Form2:=TForm2.create(self); // diese starte einmal und dann nicht wieder obwohl in // Form2 onClose release drinsteht
end; |
die Unit 2 hat nun folgendes,
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56:
| unit Unit2;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, ExtCtrls, FileCtrl, DB, DBTables;
type TForm2 = class(TForm) GroupBox1: TGroupBox; GroupBox2: TGroupBox; ...... ...... procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); ........ ........
var Form2: TForm2; RTag, RMonat, RJahr: integer; ....... ....... .......
implementation
uses Unit1, CrTbl, Unit3;
Procedure Pruefe; forward;
{$R *.DFM}
procedure TForm2.FormCreate(Sender: TObject); var FindDatei: Tsearchrec; DateiItem: TmenuItem; begin
FormStyle:=fsStayOnTop; Position:=poOwnerFormCenter; WindowState:=wsNormal;
......... ..........
Show; BringToFront;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin form2.release; {release; free;} end; |
ich gehe nun davon aus das ich irgendwo, an der falschen stelle, den code geschrieben habe, so das die for schleife in Form1 nicht durchgeführt wird weil sie kein MDIChild findet.
Die frage ist nun wo?????????
wer kann helfen
Gruss Alf
|
|
CenBells
      
Beiträge: 1547
Win 7
Delphi XE5 Pro
|
Verfasst: Di 01.10.02 20:30
darf das fenster denn nur einmal starten?
dann mach doch im onclose von form 2 nicht (!!!) free oder release, sondern mache in unit1
Quelltext 1: 2: 3: 4: 5: 6:
| if not Assigned(Form2) then Form2:=TForm2.create(self) else begin Form2.show; Form2.bringtofront; end; |
Gruß
Ken
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Mi 02.10.02 09:45
Hi
Ich denke das wird auch net viel bringen, da auch nach dem Release Form2 anscheinend <> nil ist. Ich bin da auch schon drüber gestolpert habe dann einfach folgendes gemacht:
Quelltext 1: 2: 3: 4:
| procedure TForm2.FormDestroy(Sender: TObject); begin Form2 := nil; end; |
Und damit funktioniert das.
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
ALF 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Do 03.10.02 11:46
Hi Leute
Danke für die Info bin zum Glück noch selber dahinter gekommen
mit Form2:=nil;
Gruss Alf
|
|
|