Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources et autres ressources pour la rubrique Delphi.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 24/05/2011, 00h43   #1
Caribensila
Membre expérimenté
 
Avatar de Caribensila
 
Homme PIERRE-LUC REAUD
programmateur ( programmeur amateur ;)
Inscription : septembre 2010
Messages : 277
Détails du profil
Informations personnelles :
Nom : Homme PIERRE-LUC REAUD
Âge : 62
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : programmateur ( programmeur amateur ;)
Secteur : Santé

Informations forums :
Inscription : septembre 2010
Messages : 277
Points : 537
Points : 537
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;
Caribensila est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 09h58   #2
ShaiLeTroll
Expert Confirmé Sénior
 
Avatar de ShaiLeTroll
 
Homme
Développeur C++\Delphi
Inscription : juillet 2006
Messages : 9 187
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

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

Informations forums :
Inscription : juillet 2006
Messages : 9 187
Points : 13 231
Points : 13 231
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é !
ShaiLeTroll est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h22.


 
 
 
 
Partenaires

Hébergement Web