![]() |
Unendliche Formen erzeugen (wenn nötig)
hi,
ich habe einen irc client und möchte auch per dcc was senden/empfangen können...dasproblem ist, bei jedem neuen transfer muss auch automatisch ein neues fenster erzeugt werden, wie kann ich das machen? |
Re: Unendliche Formen erzeugen (wenn nötig)
du musst einfach eine weitere Variable vom Typ TForm1 (oder wie es bei dir heißt) erstellen. das könntest du per array machen
unendlich viele wirst du nicht erzeugen können, aber schon viele!;) |
Re: Unendliche Formen erzeugen (wenn nötig)
erstmal danke für den tip, wie ich das realisiere weiss ich noch nicht, aber mal ne andere frage...nicht unendlich? mIRC kann doch auch unendlich je nach transfers erstellen oder?
|
Re: Unendliche Formen erzeugen (wenn nötig)
Hallo,
du könntest mit:
Code:
dir immer wieder ein neues Formular per code erzeugen.
var myForm: TForm;
myForm := TForm.CreateNew(Application); myForm.Width := 200; myForm.Width := 200; myForm.Show; Natürlich solltest du alle gewünschten Eigenschaften nach deinen bedürfnissen noch anpassen. Mfg Matthias |
Re: Unendliche Formen erzeugen (wenn nötig)
moin mathias, danke für den code mal schauen. btw: kann ich damit mehrere erzeugen? ich meine "myForm" darf doch nur 1mal existieren oder?
|
Re: Unendliche Formen erzeugen (wenn nötig)
Zitat:
weil unendlich > 9999999999999999^999999999999999999999999! und außerdem braucht das glaub ich ja auch eine bestimmte menge an speicherplatz! |
Re: Unendliche Formen erzeugen (wenn nötig)
Hallo,
Zitat:
Code:
Mfg Matthias
var myForm: Array[0..10] of TForm;
|
Re: Unendliche Formen erzeugen (wenn nötig)
Nimm doch einfach einen dynamischen array, dann beschränkt nur noch der vorhandene Speicherplatz die Anzahl der Fenster die du öffnen möchtest.
|
Re: Unendliche Formen erzeugen (wenn nötig)
hallo, irgendwie funzt das:
Code:
aber nicht :(
procedure TForm1.Button1Click(Sender: TObject);
var myForm: Array[1..10] of TForm; begin myForm := TForm.CreateNew(Application); myForm.Width := 200; myForm.Width := 200; myForm.Show; end; |
Re: Unendliche Formen erzeugen (wenn nötig)
Delphi-Quellcode:
!
procedure TForm1.Button1Click(Sender: TObject);
var myForm: Array[1..10] of TForm; n: integer; begin for n:=0 to 10 do begin myForm[n] := TForm.CreateNew(Application); myForm[n].Width := 200; myForm[n].Height := 100; myForm[n].Show; end; end; |
Re: Unendliche Formen erzeugen (wenn nötig)
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? :coder:
|
Re: Unendliche Formen erzeugen (wenn nötig)
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; |
Re: Unendliche Formen erzeugen (wenn nötig)
danke :)
|
Re: Unendliche Formen erzeugen (wenn nötig)
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:
Aber wie kann ich diese Prozeduren einbinden, wenn das Fenster erst zur Laufzeit erzeugt wird:
{ = 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;
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; |
Re: Unendliche Formen erzeugen (wenn nötig)
Hi,
@Johny:
Delphi-Quellcode:
Habe einfach deinen Code zusammenkopiert und 2 Zeilen eingefügt.. falls da also noch andere fehler sind, ich bin unschuldig ;)
{ = 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; @Silent: Ich würde das ganze in etwa so lösen:
Delphi-Quellcode:
Au'revoir,
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; Aya~ |
Re: Unendliche Formen erzeugen (wenn nötig)
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:
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. |
Re: Unendliche Formen erzeugen (wenn nötig)
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~ |
Re: Unendliche Formen erzeugen (wenn nötig)
Zitat:
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:
Also wenn ich die zweite Form so erzeuge, ist sie nur innerhalb der Ersten verschiebbar.
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; 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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:39 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