AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Panel Verschiebung mit Eigenschaft Align := alTop
Thema durchsuchen
Ansicht
Themen-Optionen

Panel Verschiebung mit Eigenschaft Align := alTop

Ein Thema von Muchacho · begonnen am 28. Okt 2009 · letzter Beitrag vom 28. Okt 2009
Antwort Antwort
Muchacho

Registriert seit: 9. Okt 2009
60 Beiträge
 
Delphi 2010 Enterprise
 
#1

Panel Verschiebung mit Eigenschaft Align := alTop

  Alt 28. Okt 2009, 22:58
Hallo,

Es liegen auf einem großen Panel 20 andere schmale Panel, alle mit der Eigenschaft Align := alTop

Mit :
Delphi-Quellcode:
procedure TFrmMain.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 if Sender is TPanel then
   if ssLeft in Shift then
   begin
     ReleaseCapture;
     (Sender as TPanel).Perform(WM_SYSCOMMAND,$F012,0);
   end;
end;
kann ich diese Panels beliebig verschieben.

Jedoch bei ablegen bleiben Sie ganz einfach an diese Stelle liegen
wo ich meine Maus loslasse, statt sich brav einzuordnen (wg. alTop).

Wie schaffe ich das, dass ich ein Panel bei ablegen nahtlos zwischen zwei anderen Panel einordnet?

Ich habe zuerst gedacht, das wg. Align := alTop wird das ohne weiteres gelingen, - funktioniert aber nicht.

Für jede Hilfe wäre ich dankbar

Gruß

Muchacho
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Panel Verschiebung mit Eigenschaft Align := alTop

  Alt 28. Okt 2009, 23:23
Hallo Muchacho,

du musst nach dem Ablegen des Panels ein erneutes Ausrichten der Controls beim Parent veranlassen:

Delphi-Quellcode:
procedure TFrmMain.PanelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  Panel: TPanel;
begin
if Sender is TPanel then
   if ssLeft in Shift then
   begin
     ReleaseCapture;
     Panel := TPanel(Sender);
     Panel.BringToFront; // zu verschiebendes Panel nach vorne bringen
     Panel.Perform(WM_SYSCOMMAND,$F012,0);
     Panel.Parent.Realign; // Ausrichten der Controls beim Parent erzwingen
   end;
end;
Ich habe noch einen Aufruf der Methode BringToFront eingefügt, damit das bewegte Panel auch während des Verschiebens immer sichtbar ist und nicht hinter anderen Panels verschwindet. Als Auslöser für das Verschieben würde ich - wie im Quelltext angedeutet - eher MouseDown vorsehen, da es wirklich nur beim Drücken einer Maustaste ausgelöst wird.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Muchacho

Registriert seit: 9. Okt 2009
60 Beiträge
 
Delphi 2010 Enterprise
 
#3

Re: Panel Verschiebung mit Eigenschaft Align := alTop

  Alt 28. Okt 2009, 23:39
Wunderbar Hawkeye!!!

Du bist genial !

Gruß

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