AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Zwei Komponenten auf einmal verschieben (zur Laufzeit)
Thema durchsuchen
Ansicht
Themen-Optionen

Zwei Komponenten auf einmal verschieben (zur Laufzeit)

Ein Thema von davar · begonnen am 26. Feb 2005 · letzter Beitrag vom 19. Mär 2005
Antwort Antwort
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
283 Beiträge
 
Delphi 10.3 Rio
 
#1

Re: Zwei Komponenten auf einmal verschieben (zur Laufzeit)

  Alt 19. Mär 2005, 21:06
Hallo!

Ich stöbere grad bissl in der DP rum und da komm ich grad auf diesen Thread und sehe diesen Quelltext:

Delphi-Quellcode:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
const sc_dragmove = $f012;
begin
  ReleaseCapture;
  TWinControl(Edit1).perform(wm_syscommand,sc_dragmove, 0);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
Label1.Left := Edit1.Left;
Label1.Top := Edit1.Top - Label1.Height;
end;
Hab ich sofort ausprobiert. Funzt! Ich kann auch statt TWinControl(Edit1).... TWinControl(Sender)... schreiben. Funzt auch.

Nun interessiert mich, ob es eine Möglichkeit gibt, statt Image1MouseDown auch ComponentMouseDown zu schreiben, wobei ich damit meine, ob es ne Möglichkeit gibt, das ganze zu verallgemeinern. Ich weiß, das es zum Beispiel so hier geht:

Delphi-Quellcode:
unit main;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    ListBox1: TListBox;
    Label1: TLabel;
    Edit1: TEdit;
    procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormPaint(Sender: TObject);
    procedure Edit1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
const sc_dragmove = $f012;
begin
  ReleaseCapture;
  TWinControl(Sender).perform(wm_syscommand,sc_dragmove, 0);
  //Statt Sender kann im Konkreten Fall auch Panel1 stehen
  //Der OriginalQuelltext verschiebt so ein TEdit
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  if Sender is TPanel then begin
  Label1.Left := TWinControl(Sender).Left;
  Label1.Top := TWinControl(Sender).Top - Label1.Height;
  end;
end;

procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   Panel1MouseDown(Sender,Button,Shift,X,Y);
end;

end.
Ich suche aber eine Möglichkeit, eine Komponente zur Laufzeit auf das Formular zu bringen und dann verschieben zu können. Möglichst ohne Erweiterung der Komponenten. Wenn ich beim Schreiben so drüber nachdenke geht das dann wohl doch nur mit Zuweisung der MouseDown Methode an OnMouseDown, wenn die Kompo auf der Form erzeugt wird. Weiterhin dürfte es dann auch nicht mehr allzu schwierig sein, einen Rahmen um die selektierte Kompo zu zeichnen. Der Hintergrund meiner Anfrage -> Lazarus Projekt -> FormDesigner. Den Quelltext dort kapier ich bloß nich. Das ganze sollte dann mit FCL und LCL genau so funzen.

Delphifan2004
  Mit Zitat antworten Zitat
Antwort Antwort


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