AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Panel bewegen und groesse auf Form ändern ?

Ein Thema von taktaky · begonnen am 2. Jul 2008 · letzter Beitrag vom 3. Jul 2008
Antwort Antwort
taktaky
(Gast)

n/a Beiträge
 
#1

Panel bewegen und groesse auf Form ändern ?

  Alt 2. Jul 2008, 22:20
Hallo,

ich möchte ein Image oder einen Panel auf meine verschielbar machen und
seine Abmessung (Width und height) direkt mit der Maus ändern


Wie kann sowas schaffen ?
  Mit Zitat antworten Zitat
SearchBot

Registriert seit: 27. Jun 2004
Ort: N-W vom Bodensee
272 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Panel bewegen und groesse auf Form ändern ?

  Alt 2. Jul 2008, 22:46
Hallo,

vielleicht geht es mit den Events onMouseEnter, dann auf Mousebutton prüfen (onMouseDown) und Flag setzen für onMouseMove. So irgendwie würde ich es versuchen.
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#3

Re: Panel bewegen und groesse auf Form ändern ?

  Alt 3. Jul 2008, 07:15
Delphi-Quellcode:
    if (Button=mbLeft) and (sender is TImage) then
    begin
        ReleaseCapture;
        (sender as TImage).Parent.Perform(WM_NCLBUTTONDOWN,HTcaption,0);
    end;
mit dem vergrößern ist das nicht ganz so einfach, dazu gibt es aber z.b. TSizeCtrl von www.angusj.com/delphi oder du implementierst es selbst...auch hier ist evtl ein blick in die SelImage-Klasse nicht verkehrt.

ein anderer Ansatz wäre z.b. so (hier nur für die Ecken, aber die kanten sollten auch kein Problem sein...):

Delphi-Quellcode:
type
  TEdge=(eNone,eTopLeft,eTopRight,eBottomLeft,eBottomRight);
  TForm1 = class(TForm)
...
  private
    { Private-Deklarationen }
    r1,r2,r3,r4:TRect;
    edge:TEdge;
...
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if ptinRect(r1,Point(x,y)) then edge:=eTopLeft else
  if PtInRect(r3,Point(x,y)) then edge:=eBottomRight else
  if ptinRect(r2,Point(x,y)) then edge:=eTopRight else
  if PtInRect(r4,Point(x,y)) then edge:=eBottomLeft else
    edge:=eNone;
  case edge of
    eNone:Panel1.Cursor:=crDefault;
    eTopLeft,eBottomRight:Panel1.Cursor:=crSizeNWSE;
    eTopRight,eBottomLeft: Panel1.Cursor:=crSizeNESW;
  end;
end;

procedure TForm1.Panel1Resize(Sender: TObject);
begin
  r1:=rect(0,0,5,5);
  r3:=rect(panel1.width-5,panel1.height-5,panel1.width,panel1.height);
  r2:=rect(r1.left,r3.top,r1.right,r3.bottom);
  r4:=rect(r3.left,r1.top,r3.right,r1.bottom);
end;

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if edge<>eNone then
  begin
    releaseCapture;
    case edge of
      eTopLeft:Panel1.PerForm(WM_SysCommand, $F004, 0);
      eTopRight:Panel1.PerForm(WM_SysCommand, $F007, 0);
      eBottomLeft:Panel1.PerForm(WM_SysCommand, $F005, 0);
      eBottomRight:Panel1.PerForm(WM_SysCommand, $F008, 0);
    end;
  end;
end;
HTH Frank
  Mit Zitat antworten Zitat
extrem

Registriert seit: 27. Mai 2008
72 Beiträge
 
#4

Re: Panel bewegen und groesse auf Form ändern ?

  Alt 3. Jul 2008, 07:19
Hi

Bei einem TPanel müsste auch folgendes funktionieren:
Delphi-Quellcode:
type
  TPanel= class(ExtCtrls.TPanel)
    procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

...


procedure TPanel.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);

  Params.Style := Params.Style or WS_SIZEBOX;
end;

procedure TPanel.WMNCHitTest(var Message: TWMNCHitTest);
begin
  inherited;
  if Message.Result = htClient then
    Message.Result := htCaption;
end;
  Mit Zitat antworten Zitat
taktaky
(Gast)

n/a Beiträge
 
#5

Re: Panel bewegen und groesse auf Form ändern ?

  Alt 3. Jul 2008, 15:01
Danke Frank

mit dem Vorschlag kann ich den Panel an seine 4 Ecken seine Groesse ändern

Ich wollte das Prinzip mit dem ein Shape leider hat ein Shape nicht alle Events !
Es fehlt die Event Onresize by Shape
Angehängte Dateien
Dateityp: zip panel_shape_resizable_179.zip (6,4 KB, 20x aufgerufen)
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Panel bewegen und groesse auf Form ändern ?

  Alt 3. Jul 2008, 15:41
Ich hab hier diese Function gefunden und dort jene Procedur,
nur leider verhalten die sich nicht so wie ich das gerne möchte.
Programmieren besteht nicht daraus sich im Internet fertigen
Quellcode zu suchen und daraus mit Hilfe anderer ein halbwegs laufendes
Programm zum laufen zu bringen.
Blackheart
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#7

Re: Panel bewegen und groesse auf Form ändern ?

  Alt 3. Jul 2008, 17:20
Zitat von taktaky:
Ich wollte das Prinzip mit dem ein Shape leider hat ein Shape nicht alle Events !
Es fehlt die Event Onresize by Shape
dann bau dir das event dazu ich würde ne klase ableiten, SetBounds überschreiben, darin inherited (also den code der Vorlageklasse) aufrufen und danach das event aufrufen, wenns definiert ist.

Delphi-Quellcode:
TMyShape=class(TShape)
  private
    fOnResize:TNotifyEvent;
  public
    procedure Setbounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  published
    property onResize:TNotifyEvent read fOnResize write fOnResize;
...

procedure TMyShape.Setbounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
  inherited;
  if assigned(fOnResize) then fOnResize(self);
end;
wie immer ungetested, nur ums Prinzip zu veranschaulichen.

Gruß Frank
  Mit Zitat antworten Zitat
extrem

Registriert seit: 27. Mai 2008
72 Beiträge
 
#8

Re: Panel bewegen und groesse auf Form ändern ?

  Alt 3. Jul 2008, 17:36
Da TShape von TControl abgeleited wurde, ist das onResize Ereignis schon vorhanden, man muss es nur als published deklarieren.
Delphi-Quellcode:
type
  TMyShape= class(TShape)
  published
    property onResize;
  end;
  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 09:44 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