Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Membre éprouvé Avatar de Caribensila
    Homme Profil pro PIERRE-LUC REAUD
    Inscrit en
    septembre 2010
    Messages
    278
    Détails du profil
    Informations personnelles :
    Nom : Homme PIERRE-LUC REAUD
    Âge : 63
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : septembre 2010
    Messages : 278
    Points : 472
    Points
    472

    Par défaut Déplacer un contrôle en run-time

    Salut,

    Petit snippet qui permet à l'utilisateur de déplacer un contrôle (ici un TPanel) en exécution et de l'amener au premier plan :

    Code :
    1
    2
    3
    4
    5
    procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,Y: Integer);
    begin
      ReleaseCapture;
      Panel1.Perform(WM_SysCommand,$F012,0);
    end;

  2. #2
    Expert Confirmé Sénior Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    10 025
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2006
    Messages : 10 025
    Points : 12 830
    Points
    12 830

    Par défaut

    Pourquoi ne pas utiliser la constante dédiée SC_MOVE ?

    ReleaseCapture, hum, c'est plus élégant que WM_LBUTTONUP

    Code :
    1
    2
    3
    4
    5
    6
    procedure TFrmTest.Panel1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
         Panel1.Perform(WM_LButtonUp, 0, 0);
         Panel1.Perform(WM_SYSCOMMAND, SC_MOVE + 2, 0);
    end;
    dans la même veine, pour faire utiliser un Panel simulant un TSplitter, suffit de déplacer dans le sens contraire de l'Align

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TFrmTest.PanelSplitHorizontalMouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
         SendMessage(PanelSplitHorizontal.handle, WM_LButtonUp, 0, 0);
         SendMessage(PanelTop.handle, WM_NCLButtonDown, HTBOTTOM, 0);
    end;
     
    procedure TFrmTest.PanelSplitVerticalMouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
         SendMessage(PanelSplitVertical.handle, WM_LButtonUp, 0, 0);
         SendMessage(PanelLeft.handle, WM_NCLButtonDown, HTRight, 0);
    end;
    C'est un vieux code de mon maître d'apprentissage, les Splitter délimitant un Zone Mère MDI provoquait en D4 des erreurs d'affichage (on voyait dans zone MDI une sorte "d'écho" des splitters (double dessin)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

    Halte à la ségrégation des Cinémas, VO sur Paris, VF en Banlieue, Abonnement résilié !

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •