AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Dynamisch erstellte Form per gedrückter Maustaste verschiebe
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamisch erstellte Form per gedrückter Maustaste verschiebe

Ein Thema von Logic · begonnen am 20. Mär 2007 · letzter Beitrag vom 21. Mär 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Logic
Logic

Registriert seit: 28. Nov 2003
132 Beiträge
 
Delphi 7 Personal
 
#1

Dynamisch erstellte Form per gedrückter Maustaste verschiebe

  Alt 20. Mär 2007, 12:21
Hallo,

ich hab eine Form dynamisch erstellt und hier im Forum folgenden Code gefunden:

Delphi-Quellcode:
  ReleaseCapture;
  Perform(wm_syscommand, $f012, 0);
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.

Wie kann ich mir ne eigene Procedure bauen, die das Problem umgeht?

Thx
Logic
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#2

Re: Dynamisch erstellte Form per gedrückter Maustaste versch

  Alt 20. Mär 2007, 12:49
Hallo
du kannst alle Methdoen zuweisen, die die entsprechende Signatur haben. Also einfach die Parameter entsprechend anpassen...

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von Logic
Logic

Registriert seit: 28. Nov 2003
132 Beiträge
 
Delphi 7 Personal
 
#3

Re: Dynamisch erstellte Form per gedrückter Maustaste versch

  Alt 20. Mär 2007, 13:14
Mhh

Also ich verwende für ein schon vorhandenes Form ja folgende Procedure für die Aufgabe.

Delphi-Quellcode:
procedure TForm2.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  Perform(wm_syscommand, $f012, 0);
end;
wie kann ich der nun sagen, dass die nen anderen Fenster verschieben soll?
Weil wenn ich ne eigene baue gehört die ja zu keiner Form mehr direkt.

Thx ^^
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#4

Re: Dynamisch erstellte Form per gedrückter Maustaste versch

  Alt 20. Mär 2007, 13:17
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:
TMyForm = Class (TForm)
    procedure FormMouseDown(Sender : TObject;
                            Button : TMouseButton;
                            Shift : TShiftState;
                            X,
                            Y : Integer);
  public
    constructor Create (AOwner : TComponent); override;
end;
Implementation:
Delphi-Quellcode:
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;
So als grober Überblick.

Hope it helps

onlinekater
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#5

Re: Dynamisch erstellte Form per gedrückter Maustaste versch

  Alt 20. Mär 2007, 13:22
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
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von Logic
Logic

Registriert seit: 28. Nov 2003
132 Beiträge
 
Delphi 7 Personal
 
#6

Re: Dynamisch erstellte Form per gedrückter Maustaste versch

  Alt 20. Mär 2007, 13:36
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:
[Error] notes.pas(181): Undeclared identifier: 'FormMouseDown'
[Error] notes.pas(47): Unsatisfied forward or external declaration: 'TMyForm.Create'
Delphi-Quellcode:
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;
Der record sieht folgendermaßen aus:

Delphi-Quellcode:
type T_Forms = record
                  zettel : TForm;
                  hintergrund : TImage;
                  subject, nummer : TLabel;
                  text : TMemo;
                  close : TButton;
                end;
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#7

Re: Dynamisch erstellte Form per gedrückter Maustaste versch

  Alt 20. Mär 2007, 13:39
Wär gut, wenn du auch die Stellen posten könntest, wo die Fehler auftreten...

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von Logic
Logic

Registriert seit: 28. Nov 2003
132 Beiträge
 
Delphi 7 Personal
 
#8

Re: Dynamisch erstellte Form per gedrückter Maustaste versch

  Alt 20. Mär 2007, 13:55
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;
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#9

Re: Dynamisch erstellte Form per gedrückter Maustaste versch

  Alt 20. Mär 2007, 14:00
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
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von Logic
Logic

Registriert seit: 28. Nov 2003
132 Beiträge
 
Delphi 7 Personal
 
#10

Re: Dynamisch erstellte Form per gedrückter Maustaste versch

  Alt 20. Mär 2007, 14:07
Also so siehts bei mir aus:

Delphi-Quellcode:
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;
Hab inherited jetzt an den Anfang gemacht, aber der Fehler ändert sich ned
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:10 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