![]() |
Dynamisch erstellte Form per gedrückter Maustaste verschiebe
Hallo,
ich hab eine Form dynamisch erstellt und hier im Forum folgenden Code gefunden:
Delphi-Quellcode:
Dieser Funktion, funktioniert bei meinen Anwendungen auch perfekt, nur leider wenn ich der dynamisch erstellten Form die OnMouseDown zuweisen will, kann ich nur eine OnMouseDown einer anderen Form verwenden... wenn ich aber das tue wird die andere Komponente nur verschoben.
ReleaseCapture;
Perform(wm_syscommand, $f012, 0); Wie kann ich mir ne eigene Procedure bauen, die das Problem umgeht? Thx Logic |
Re: Dynamisch erstellte Form per gedrückter Maustaste versch
Hallo :hi:
du kannst alle Methdoen zuweisen, die die entsprechende Signatur haben. Also einfach die Parameter entsprechend anpassen... mfg Christian |
Re: Dynamisch erstellte Form per gedrückter Maustaste versch
Mhh
Also ich verwende für ein schon vorhandenes Form ja folgende Procedure für die Aufgabe.
Delphi-Quellcode:
wie kann ich der nun sagen, dass die nen anderen Fenster verschieben soll?
procedure TForm2.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; Perform(wm_syscommand, $f012, 0); end; Weil wenn ich ne eigene baue gehört die ja zu keiner Form mehr direkt. Thx ^^ |
Re: Dynamisch erstellte Form per gedrückter Maustaste versch
Hallo!
Du must Dir in der Klasse Deiner dynamisch generierten Form eine Prozedur definieren, die Du als Eventhandler dem OnMouseDown Deiner Form zuweist. Beispiel: Deklaration:
Delphi-Quellcode:
Implementation:
TMyForm = Class (TForm)
procedure FormMouseDown(Sender : TObject; Button : TMouseButton; Shift : TShiftState; X, Y : Integer); public constructor Create (AOwner : TComponent); override; end;
Delphi-Quellcode:
So als grober Überblick.
procedure TMyForm.FormMouseDown(Sender : TObject;
Button : TMouseButton; Shift : TShiftState; X, Y : Integer); begin ReleaseCapture; Perform(wm_syscommand, $f012, 0); end; constructor TForm1.Create(AOwner: TComponent); begin inherited; OnMouseDown := FormMouseDown end; Hope it helps onlinekater |
Re: Dynamisch erstellte Form per gedrückter Maustaste versch
Aaalso...
- jede Forum ist erstmal ne Klasse(=Bauplan) - dadurch, dass du das Formular erzeugst, erstellst du ein konkretes Formular-Objekt - TControl.Perform is ne Methode(in dem Fall eine des Formulars(TForm erbt von TControl)) - Weist du also eine Methode eines anderen Formulars deinem als Ereignisbehandlungsroutine zu, dann wird AnderesFormular.Perforn ausgeführt und nicht DeinFormular.Perform - erstelle also eine weitere Methode für die Klasse deines neuen formulars und weise die dem Event zu Bei Fragen: fragen... //Roter Kasten: Och menno. zu langsam. Egal. Hab noch n paar Background-Infos... mfg Christian |
Re: Dynamisch erstellte Form per gedrückter Maustaste versch
Danke an euch beide erstmal!
Also ich erzeuge mit folgendem Code (siehe weiter unten) meine Form und u.a. ein bild, dass dann das OnMouseDown haben sollen. D.h. ich füge die Deklaration in meine Unit, genauso wie die Implementierung ein. Bzw. ändere beim Erstellen TForm auf TMyForm um... nur leider meckert mir da Delphi: Zitat:
Delphi-Quellcode:
Der record sieht folgendermaßen aus:
procedure makeZettel(nummer:integer);
begin zettel.zettel:=TForm.Create(Application); zettel.zettel.Color:=Form2.Color; zettel.zettel.BorderStyle:=Form2.BorderStyle; zettel.zettel.TransparentColor:=Form2.TransparentColor; zettel.zettel.TransparentColorValue:=Form2.TransparentColorValue; zettel.zettel.Width:=Form2.Width; zettel.zettel.Height:=Form2.Height; zettel.zettel.Name:='f_'+IntToStr(nummer); zettel.hintergrund:=TImage.Create(zettel.zettel); zettel.hintergrund.Picture:=Form2.Image1.Picture; zettel.hintergrund.Top:=Form2.Image1.Top; zettel.hintergrund.Left:=Form2.Image1.Left; zettel.hintergrund.Width:=Form2.Image1.Width; zettel.hintergrund.Height:=Form2.Image1.Height; zettel.hintergrund.Parent:=zettel.zettel; zettel.hintergrund.Name:='bild'; zettel.hintergrund.Visible:=true; [...] zettel.zettel.Visible:=true; end;
Delphi-Quellcode:
type T_Forms = record
zettel : TForm; hintergrund : TImage; subject, nummer : TLabel; text : TMemo; close : TButton; end; |
Re: Dynamisch erstellte Form per gedrückter Maustaste versch
Wär gut, wenn du auch die Stellen posten könntest, wo die Fehler auftreten...
mfg Christian |
Re: Dynamisch erstellte Form per gedrückter Maustaste versch
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin lines:=TStringList.Create; forms:=TStringList.Create; count:=0; inherited; OnMouseDown := FormMouseDown <- end;
Delphi-Quellcode:
public
constructor Create (AOwner : TComponent); override; <- end; |
Re: Dynamisch erstellte Form per gedrückter Maustaste versch
Scheint so, als hättest du einen Konstruktor deklariert, aber nicht implementiert. Solltest du doch eine Implementierung haben, zeig die mal...
Außerdem kennt der Compiler, wie er ja sagt, FormMouseDown nicht. Hast du das denn deklariert und implementiert? BTW: inherited kommt immer an den Anfang von Create(und bei Desoroy immer ans Ende). mfg Christian |
Re: Dynamisch erstellte Form per gedrückter Maustaste versch
Also so siehts bei mir aus:
Delphi-Quellcode:
Hab inherited jetzt an den Anfang gemacht, aber der Fehler ändert sich ned
type
TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; IdHTTP1: TIdHTTP; Panel1: TPanel; Button2: TButton; Button6: TButton; Button3: TButton; lb_forms: TListBox; CoolTrayIcon1: TCoolTrayIcon; PopupMenu1: TPopupMenu; delete1: TMenuItem; N1: TMenuItem; Beenden1: TMenuItem; lb_notes: TListBox; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure lb_notesDblClick(Sender: TObject); private { Private declarations } public { Public declarations } end; TMyForm = Class (TForm) procedure FormMouseDown(Sender : TObject; Button : TMouseButton; Shift : TShiftState; X, Y : Integer); public constructor Create (AOwner : TComponent); override; end; type T_Forms = record zettel : TForm; hintergrund : TImage; subject, nummer : TLabel; text : TMemo; close : TButton; end; var Form1: TForm1; lines, forms:TstringList; count:integer; anzahl_notes:integer; Zettel: T_Forms; implementation uses Unit2; {$R *.dfm} procedure TMyForm.FormMouseDown(Sender : TObject; Button : TMouseButton; Shift : TShiftState; X, Y : Integer); begin ReleaseCapture; Perform(wm_syscommand, $f012, 0); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:09 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