Autor Beitrag
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: So 29.09.02 18:33 
Hi Profs

Folgendes problem versuche ich zu lösen Form1 ist
ausblenden Quelltext
1:
FormStyle:=fsMDIForm					

die anderen Form(s) From2, Form3, usw. sind
ausblenden Quelltext
1:
FormStyle:=fsStayOnTop;					


ausblenden 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
ausblenden 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
ausblenden Quelltext
1:
if Form2.windowstate=wsMinimize then top:=34;					

aber auch das will nicht so richtig funcen

wer kann da helfen?

Gruss ALF
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: So 29.09.02 20:56 
Hallo,

ich denke dieses kleine Beispiel wird dir helfen:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Mo 30.09.02 10:25 
Guten Morgen allerseits.

Ich glaube, wenn aman viele Fenster hat ist folgende Abfrage schneller
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: 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* :D :D

Gruß
ken
ALF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: 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 :wink:

Gruß
Ken[/quote]
ALF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: 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)




ausblenden 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;


ausblenden volle Höhe Quelltext
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,

ausblenden volle Höhe Quelltext
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: 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:
ausblenden Quelltext
1:
2:
3:
4:
procedure TForm2.FormDestroy(Sender: TObject);
begin
  Form2 := nil;
end;

Und damit funktioniert das. 8)

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
ALF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: 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