![]() |
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; |
Re: Dynamisch erstellte Form per gedrückter Maustaste versch
*sichs nochmal genau anguckt*
Du hasts in der Falschen Methode drin. Das muss natürlich in den Konstruktor von TMyForm rein... Versuch Quelltexte nicht nur zu kopieren, sondern auch zu kapieren. Versuch zu verstehen, was sie machen, dann passieren solche Fehler nicht... //Nachtrag: BTW: Dein Code wird übersichtlicher, wenn du für jede neue Klasse eine neue Unit nimmst... mfg Christian |
Re: Dynamisch erstellte Form per gedrückter Maustaste versch
Ehm ich hab doch keine TMyForm... ich hab eine Form1 und den rest erstelle ich dynamisch...
|
Re: Dynamisch erstellte Form per gedrückter Maustaste versch
Zitat:
Beschäftige dich mal etwas mit den OOP-Grundlagen... mfg Christian |
Re: Dynamisch erstellte Form per gedrückter Maustaste versch
Ja ich weiß, dass ich mich damit tiefgreifender befassen müsste, nur fehlt mir dazu leider etwas die Zeit, da ich zur Zeit mich in der Uni eher um Java und andere Dinge kümmern muss, deswegen wärs ganz nett, wenn ihr etwas darüber hinwegsehen würdet und mir bisl helft ^^
Hab nämlich immer noch nicht den schimmer was grad falsch läuft. |
Re: Dynamisch erstellte Form per gedrückter Maustaste versch
Zitat:
Hier also mal ein helfdendes Beispiel:
Delphi-Quellcode:
Die Zuweisung an das entsprechende Event muss in den Konstruktor rein. Da, wo 'mach was' steht...
TTest = class(TSonstwas) // hier definieren wir die Klasse(=Bauplan)
private ... public constructor Create; // hier deklarieren wir den Konstruktor der Klasse ... end; ... constructor TTest.Create; // hier implementieren wir den Konstruktor begin inherited Create; // mach was end; ... //irgendwo in der Formularklasse procedure TForm1.Button1Click(...); var Test: Test; // hier definieren wir eine Variable vom Typ der Klasse begin Test := TTest.Create; // erst jetzt erzeugen wir eine konkrete Instanz der Klasse(==> 'dynamisch erstellt'); dabei wird der konstruktor aufgerufen end; mfg Christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:29 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