AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Unendliche Formen erzeugen (wenn nötig)
Thema durchsuchen
Ansicht
Themen-Optionen

Unendliche Formen erzeugen (wenn nötig)

Ein Thema von Pseudemys Nelsoni · begonnen am 21. Aug 2003 · letzter Beitrag vom 22. Aug 2003
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#11

Re: Unendliche Formen erzeugen (wenn nötig)

  Alt 21. Aug 2003, 16:22
hallo rayman, ich bekomme eine zugriffsverletzung bei ausführung des codes. Wenn ich den genau betrachte werden sofort 10 neue forms geöffnet, oder seh ich das falsch?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
rayman

Registriert seit: 31. Jul 2003
Ort: Lohsdorf
40 Beiträge
 
Delphi 6 Enterprise
 
#12

Re: Unendliche Formen erzeugen (wenn nötig)

  Alt 21. Aug 2003, 16:30
Ja

Ich hab eigentlich nur eine Schleife drum gemacht, damit alle Formuare erzeugt werden. Du kannst es ja so machen, wenn bei jedem Buttonclick nur ein Fenster geöffnet werden soll:
Delphi-Quellcode:
var Form1: TForm1;
    myForms: array of TForm; // das Feld wird global deklariert ...

procedure TForm1.FormCreate(Sender: TObject);
var n:integer;
begin
for n:=0 to 10 do begin
  myForm[n]:=TForm.Create; // Bei Create mit Form gefüllt ...
  .....
  ...
  ..
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var n:integer;
                             // und bei jedem Click kommt ein neues
                             // Fenster dazu
begin
n:=0;
while n>=0 do if not myForm[n].Visible then begin
  myForm[n].Show;
  myForm[n].Top:=...
  ...
  n:=-1;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#13

Re: Unendliche Formen erzeugen (wenn nötig)

  Alt 21. Aug 2003, 16:32
danke
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
johny

Registriert seit: 12. Aug 2003
Ort: Koblenz
32 Beiträge
 
#14

Re: Unendliche Formen erzeugen (wenn nötig)

  Alt 21. Aug 2003, 23:22
Hallo Silent,
ich hoffe, du hast nichts dagegen, wenn ich deinen Thread noch ein wenig erweitere.

Diese Möglichkeit mehrere Fenster zu öffnen hat mir auch ein Stück weitergeholfen. Nur möchte ich das Fenster gerne per Drag&Drop verschieben können, wenn ich auf ein darauf angezeigtes Shape klicke. Bei einer 'normalen' Form geht das hiermit:

Delphi-Quellcode:
{ = DragAndDrop = }

var
 xPos, yPos: integer;

procedure TForm_Workspace_Canvas.Shape_BannerMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 xPos := x; // x-Koordinate erfassen
 yPos := y; // y-Koordinate erfassen
end;

procedure TForm_Workspace_Canvas.Shape_BannerMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 if HiWord(GetAsyncKeyState(VK_LBUTTON)) > 0 then
 begin
  Form_Workspace_Canvas.Left := Form_Workspace_Canvas.Left + X - xPos; // Verschieben
  Form_Workspace_Canvas.Top := Form_Workspace_Canvas.Top + Y - yPos; // Verschieben
 end;
end;
Aber wie kann ich diese Prozeduren einbinden, wenn das Fenster erst zur Laufzeit erzeugt wird:

Delphi-Quellcode:
procedure TForm_Workspace_Main.Menu_NewClick(Sender: TObject);
var
 Form_Workspace_Canvas : TForm;
 Shape_Banner : TShape;

begin

 // Form erzeugen
 Form_Workspace_Canvas := TForm.CreateNew(Application);
 Form_Workspace_Canvas.Left := 205;
 Form_Workspace_Canvas.Top := 35;
 Form_Workspace_Canvas.Height := 725;
 Form_Workspace_Canvas.Width := 815;
 Form_Workspace_Canvas.BorderStyle := bsNone;
 Form_Workspace_Canvas.Show;

 // Shape auf der Form erzeugen
 Shape_Banner := TShape.Create(Form_Workspace_Canvas);
 with Shape_Banner do
 begin
  Parent := Form_Workspace_Canvas;
  Left := 0;
  Top := 0;
  Width:= 807;
  Height:= 9;
  Brush.Color := clGray;
  Brush.Style := bsSolid;
  Name := 'Shape_Banner';
 end;

end;
  Mit Zitat antworten Zitat
Benutzerbild von Aya
Aya

Registriert seit: 24. Jul 2003
Ort: Kassel
138 Beiträge
 
Delphi 6 Professional
 
#15

Re: Unendliche Formen erzeugen (wenn nötig)

  Alt 21. Aug 2003, 23:33
Hi,

@Johny:
Delphi-Quellcode:
{ = DragAndDrop = } 

var
xPos, yPos: integer;

procedure TForm_Workspace_Canvas.Shape_BannerMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
xPos := x; // x-Koordinate erfassen
yPos := y; // y-Koordinate erfassen
end;

procedure TForm_Workspace_Canvas.Shape_BannerMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if HiWord(GetAsyncKeyState(VK_LBUTTON)) > 0 then
begin
  Form_Workspace_Canvas.Left := Form_Workspace_Canvas.Left + X - xPos; // Verschieben
  Form_Workspace_Canvas.Top := Form_Workspace_Canvas.Top + Y - yPos; // Verschieben
end;
end;

procedure TForm_Workspace_Main.Menu_NewClick(Sender: TObject);
var
Form_Workspace_Canvas : TForm;
Shape_Banner : TShape;

begin

// Form erzeugen
Form_Workspace_Canvas := TForm.CreateNew(Application);
Form_Workspace_Canvas.Left := 205;
Form_Workspace_Canvas.Top := 35;
Form_Workspace_Canvas.Height := 725;
Form_Workspace_Canvas.Width := 815;
Form_Workspace_Canvas.BorderStyle := bsNone;
Form_Workspace_Canvas.Show;

// Shape auf der Form erzeugen
Shape_Banner := TShape.Create(Form_Workspace_Canvas);
with Shape_Banner do
begin
  Parent := Form_Workspace_Canvas;
  Left := 0;
  Top := 0;
  Width:= 807;
  Height:= 9;
  Brush.Color := clGray;
  Brush.Style := bsSolid;
  Name := 'Shape_Banner';
  OnMouseDown:=Shape_BannerMouseDown; //Neu
  OnMouseMove:=Shape_BannerMouseMove; //Neu
end;

end;
Habe einfach deinen Code zusammenkopiert und 2 Zeilen eingefügt.. falls da also noch andere fehler sind, ich bin unschuldig

@Silent:
Ich würde das ganze in etwa so lösen:

Delphi-Quellcode:
var //Global!
  MyForms: Array of TForm;

procedure AddNewForm(Caption: String);
begin
  SetLength(MyForms,Length(MyForms)+1);
  MyForms[High(MyForms)]:=TForm.Create(self);
  MyForms[High(MyForms)].Parent:=self;
  MyForms[High(MyForms)].Width:=150;
  MyForms[High(MyForms)].Height:=150;
  MyForms[High(MyForms)].Caption:=Caption;
end;
Au'revoir,
Aya~
I aim for my endless dreams and I know they will come true!
S: String = #86^)^3^)^4#58#32^(^4^4^0#58#47#47^7^7^7#46^+^/^3^(^)^'^!^9^!#46^$^%;
  Mit Zitat antworten Zitat
johny

Registriert seit: 12. Aug 2003
Ort: Koblenz
32 Beiträge
 
#16

Re: Unendliche Formen erzeugen (wenn nötig)

  Alt 22. Aug 2003, 00:49
Hallo Aya,

ich habe deinen Vorschlag ausprobiert, nur leider wurde das falsche Fenster verschoben. Deshalb habe ich zur Fehlersuche noch mal ein neues Projekt erstellt dessen MainForm nur einen Button hat, der ein neues Fenster erzeugt, dass dann verschoben werden soll.
Das führt aber leider zu einem Fehler. Einen möglichen Grund hat Christian Seehase in einem anderen Beitrag bereits genannt.

Incompatible types: 'method pointer and regular procedure'

Zitat von Christian Seehase:
an der von Dir genannten Stelle erwartet der Compiler eine Methode.
Da Du aber eine Prozedure übergibts...
Dennoch vielen Dank, jetzt bin ich wieder ein wenig weiter gekommen. Da mir aber so allmählich die Augen zufallen *gähn* werde ich die Fehlersuche wohl etwas verschieben ...

Hier noch einmal der aktuelle Quellcode - sollte es jemanden interessieren

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm_Workspace_Canvas = class(TForm)
    Button_New: TButton;
    procedure Button_NewClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form_Workspace_Canvas: TForm_Workspace_Canvas;

implementation

{$R *.dfm}

var
 xPos, yPos: integer;

procedure Shape_BannerMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 xPos := x;
 yPos := y;
 Form_Workspace_Canvas.AlphaBlendValue := 100;
 Form_Workspace_Canvas.AlphaBlend := True;
end;

procedure Shape_BannerMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 if HiWord(GetAsyncKeyState(VK_LBUTTON)) > 0 then
 begin
  Form_Workspace_Canvas.Left := Form_Workspace_Canvas.Left + X - xPos;
  Form_Workspace_Canvas.Top := Form_Workspace_Canvas.Top + Y - yPos;
 end;
end;

procedure Shape_BannerMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 Form_Workspace_Canvas.AlphaBlendValue := 255;
 Form_Workspace_Canvas.AlphaBlend := False;
end;

procedure TForm_Workspace_Canvas.Button_NewClick(Sender: TObject);
var
 Form_Workspace_Canvas : TForm;
 Shape_Banner : TShape;
 Shape_Body : TShape;

begin

 Form_Workspace_Canvas := TForm.CreateNew(Application);
 Form_Workspace_Canvas.Left := 205;
 Form_Workspace_Canvas.Top := 35;
 Form_Workspace_Canvas.Height := 725;
 Form_Workspace_Canvas.Width := 815;
 Form_Workspace_Canvas.BorderStyle := bsNone;
 Form_Workspace_Canvas.Show;

 Shape_Banner := TShape.Create(Form_Workspace_Canvas);
 Shape_Body := TShape.Create(Form_Workspace_Canvas);

 with Shape_Banner do
 begin
  Parent := Form_Workspace_Canvas;
  Left := 0;
  Top := 0;
  Width:= 807;
  Height:= 9;
  Brush.Color := clGray;
  Brush.Style := bsSolid;
  Name := 'Shape_Banner';
  OnMouseDown := Shape_BannerMouseDown; // => Fehler!
  OnMouseMove := Shape_BannerMouseMove; // => Fehler!
  OnMouseUp := Shape_BannerMouseUp; // => Fehler!
 end;

 with Shape_Body do
 begin
  Parent := Form_Workspace_Canvas;
  Left := 0;
  Top := 8;
  Width:= 807;
  Height:=690;
  Brush.Color := clWhite;
  Brush.Style := bsSolid;
  Name := 'Shape_Body';
 end;

end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von Aya
Aya

Registriert seit: 24. Jul 2003
Ort: Kassel
138 Beiträge
 
Delphi 6 Professional
 
#17

Re: Unendliche Formen erzeugen (wenn nötig)

  Alt 22. Aug 2003, 02:16
Hi,

du hast "meinen" Code falsch kopiert...
du mußt Shape_BannerMouseMove (etc.) zu einer Procedure von Form1 machen, also bei Form1 im z.B. Private bereich deklarieren.

Au'revoir,
Aya~
I aim for my endless dreams and I know they will come true!
S: String = #86^)^3^)^4#58#32^(^4^4^0#58#47#47^7^7^7#46^+^/^3^(^)^'^!^9^!#46^$^%;
  Mit Zitat antworten Zitat
johny

Registriert seit: 12. Aug 2003
Ort: Koblenz
32 Beiträge
 
#18

Re: Unendliche Formen erzeugen (wenn nötig)

  Alt 22. Aug 2003, 09:34
Zitat von Aya:
Hi,

du hast "meinen" Code falsch kopiert...
du mußt Shape_BannerMouseMove (etc.) zu einer Procedure von Form1 machen, also bei Form1 im z.B. Private bereich deklarieren.

Au'revoir,
Aya~
Oh ja, da hatte ich beim ausprobieren ein wenig gelöscht und das ein oder andere verändert.
Wenn ich die Ereignisse aber zu einer Prozedur von Form1 mache, wird beim Klick auf den Banner der 2. Form die Erste verschoben - nicht aber die zweite.

---

Delphi-Quellcode:
var //Global!
  MyForms: Array of TForm;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetLength(MyForms,Length(MyForms)+1);
  MyForms[High(MyForms)]:=TForm.Create(self);
  MyForms[High(MyForms)].Parent:=self;
  MyForms[High(MyForms)].Width:=150;
  MyForms[High(MyForms)].Height:=150;
  MyForms[High(MyForms)].Caption:=Caption;
  MyForms[High(MyForms)].Show;
end;
Also wenn ich die zweite Form so erzeuge, ist sie nur innerhalb der Ersten verschiebbar.
Bei meinem Programm sollten die Formen aber ähnlich der Delphi-Oberfläche angeordnet sein - eine Menüleiste, eine Werkzeugleiste und eine Arbeitsfläche.

Mit dem Programm habe ich mich wohl doch ein wenig übernommen. Ich mache besser erst einmal mit einfacheren Sachen weiter, bevor ich wieder darauf zurückkomme.

Dennoch vielen Dank für deine Mühe, das ein oder andere habe ich auch hier wieder dazugelernt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz