Ajouter un bouton à la barre de légende de votre formulaire


Ajouter un bouton à la barre de légende de la forme
j'ai créé un composant qui vous permet d'ajouter des boutons à la barre de légende de votre formulaire. Voici le code.
& & & & Code & & & & __
unité de TitleButton
interface

& nbsp & nbsp Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs
const
& nbsp WM_MOUSELEAVE=$B014
type
& nbsp TChangedProperty=(cpdown,cpallowallup,cpgroupindex)
type
& nbsp & nbsp TTitleButton = class(Tcomponent)
& nbsp & nbsp privé
& nbsp & nbsp & nbsp fbuttonrect:trect
& nbsp & nbsp & nbsp fpressed,ffocused:boolean
& nbsp & nbsp & nbsp fbuttoncaption:string
& nbsp & nbsp & nbsp fwidth:integer
& nbsp & nbsp & nbsp fleft:entier
& nbsp & nbsp & nbsp fvisible:boolean
& nbsp & nbsp & nbsp fhintshow:boolean
& nbsp & nbsp & nbsp fhint:thintwindow
& nbsp & nbsp & nbsp fhinttext:string
& nbsp & nbsp & nbsp fgroupindex:integer
& nbsp & nbsp & nbsp fdown:boolean
& nbsp & nbsp & nbsp fallowallup:boolean
& nbsp & nbsp & nbsp fparent:Tform
& nbsp & nbsp & nbsp fparentwidth:integer
& nbsp & nbsp & nbsp ficonwidth:integer
& nbsp & nbsp & nbsp fcallinheritedevent:boolean
& nbsp & nbsp & nbsp fdefaultwidth:integer
& nbsp & nbsp & nbsp fdefaultheight:integer
& nbsp & nbsp & nbsp ffont:Tfont
& nbsp & nbsp & nbsp ficon:Ticon
& nbsp & nbsp & nbsp fborder3d,fborderthickness:integer
& nbsp & nbsp & nbsp fbuttondown:tnotifyevent
& nbsp & nbsp & nbsp fbuttonmove:tmousemoveevent
& nbsp & nbsp & nbsp fbuttonup:tnotifyevent
& nbsp & nbsp & nbsp pmsghandler:Twndmethod
& nbsp & nbsp & nbsp ppaint:Tnotifyevent
& nbsp & nbsp & nbsp presize:tnotifyevent
& nbsp & nbsp & nbsp gtmp1,gtmp2,gtmp3:boolean
& nbsp & nbsp & nbsp procédure initializevariables
& nbsp & nbsp & nbsp procédure IconChange(Sender:tobject)
& nbsp & nbsp & nbsp procédure setbuttonwidth(awidth:entier)
& nbsp & nbsp & nbsp procédure setbuttonleft(aleft:integer)
& nbsp & nbsp & nbsp procédure setbuttoncaption(acaption:string)
& nbsp & nbsp & nbsp procédure setbuttonfont(afont:tfont)
& nbsp & nbsp & nbsp procédure setbuttonvisible(avisible:boolean)
& nbsp & nbsp & nbsp procédure seticon(aicon:ticon)
& nbsp & nbsp & nbsp procédure setdown(fbas:boolean)
& nbsp & nbsp & nbsp procédure setallowallup(aallowallup:boolean)
& nbsp & nbsp & nbsp procédure setgroupindex(agroupindex:entier)
& nbsp & nbsp & nbsp procédure de la méthode updateproperties(achangedproperty:TChangedProperty)
& nbsp & nbsp protégé
& nbsp & nbsp & nbsp procédure messagehandler(var message:tmessage)
& nbsp & nbsp & nbsp procédure CaptionPaint(var message:tmessage)
& nbsp & nbsp & nbsp procédure CaptionMouseMove(var message:tmessage)
& nbsp & nbsp & nbsp procédure CaptionMouseDown(var message:tmessage)
& nbsp & nbsp & nbsp procédure CaptionMouseUp(var message:tmessage)
& nbsp & nbsp & nbsp procédure CaptionRightMouseDown(var message:tmessage)
& nbsp & nbsp & nbsp procédure CaptionDoubleClick(var message:tmessage)
& nbsp & nbsp & nbsp procédure CaptionActivate(var message:tmessage)
& nbsp & nbsp & nbsp procédure CaptionHitTest(var message:Tmessage)
& nbsp & nbsp & nbsp procédure CaptionChange(var message:Tmessage)
& nbsp & nbsp & nbsp procédure ParentMouseMove(var message:tmessage)
& nbsp & nbsp & nbsp procédure ParentMouseUp(var message:tmessage)
& nbsp & nbsp & nbsp procédure ButtonUp(var message:tmessage)
& nbsp & nbsp & nbsp procédure ParentPaint(sender:tobject)
& nbsp & nbsp & nbsp procédure ParentResize(sender:tobject)
& nbsp & nbsp & nbsp procédure DisplaySettingChange(var message:tmessage)
& nbsp & nbsp & nbsp procédure chargé de remplacer
& nbsp & nbsp public
& nbsp & nbsp & nbsp constructor create(aowner:tcomponent) remplacer
& nbsp & nbsp & nbsp destructeur de détruire remplacer
& nbsp & nbsp publié
& nbsp & nbsp & nbsp propriété Width:integer lire fwidth écrire setbuttonwidth
& nbsp & nbsp & nbsp propriété Position:entier lire fleft écrire setbuttonleft
& nbsp & nbsp & nbsp propriété Légende:chaîne de lecture fbuttoncaption écrire setbuttoncaption
& nbsp & nbsp & nbsp propriété de la Police:Tfont lire ffont écrire SetButtonFont
& nbsp & nbsp & nbsp Icône de propriété:Ticon lire ficon écrire seticon
& nbsp & nbsp & nbsp propriété TipText:chaîne de lecture fhinttext écrire fhinttext
& nbsp & nbsp & nbsp propriété Visible:boolean lire fvisible écrire setbuttonvisible
& nbsp & nbsp & nbsp propriété AllowAllUp:boolean lire fallowallup écrire setallowallup
& nbsp & nbsp & nbsp propriété vers le Bas:boolean lire fdown écrire setdown
& nbsp & nbsp & nbsp propriété GroupIndex:integer lire fgroupindex écrire setgroupindex
& nbsp & nbsp & nbsp propriété OnMouseDown:tnotifyevent lire fbuttondown écrire fbuttondown
& nbsp & nbsp & nbsp propriété OnMouseMove:tmousemoveevent lire fbuttonmove écrire fbuttonmove
& nbsp & nbsp & nbsp propriété OnMouseUp:tnotifyevent lire fbuttonup écrire fbuttonup
& nbsp & nbsp fin
const
& nbsp TTB_SETBUTTONUP=WM_USER 1
procédure Register
application
constructeur TTitleButton.create(aowner:tcomponent)
begin
& nbsp hérité
& nbsp & nbsp fparent:=(propriétaire tform)
& nbsp & nbsp ffont:=tfont.créer
& nbsp & nbsp fhint:=thintwindow.create(self)
& nbsp & nbsp ficon:=ticon.créer
fin
destructeur TTitleButton.détruire
begin
& nbsp si affecté(ficon)
& nbsp & nbsp ficon.gratuit
& nbsp si affecté(ffont)
& nbsp & nbsp ffont.gratuit
& nbsp si affecté(fhint)
& nbsp & nbsp fhint.gratuit
& nbsp hérité
fin
procédure TTitleButton.chargé
begin
& nbsp hérité
& nbsp initializevariables
fin
procédure TTitleButton.La méthode updateproperties(achangedproperty:TChangedProperty)
var
& nbsp amsg:tmessage
begin
& nbsp amsg.Msg:=TTB_SETBUTTONUP
& nbsp amsg.WParam:=integer(auto)
& nbsp amsg.LParamlo:=fgroupindex
& nbsp amsg.LParamHi:=mot(achangedproperty)
& nbsp amsg.Résultat:=0
& nbsp fparent.effectuer(amsg.msg,amsg.wparam,amsg.lparam)
fin
procédure TTitleButton.initializevariables
begin
& nbsp si affecté(fparent.WindowProc)
& nbsp & nbsp pmsghandler:=fparent.WindowProc
& nbsp fparent.WindowProc:=messagehandler
& nbsp si ce n'(csdesigning dans componentstate)
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp si affecté(fparent.onpaint)
& ! & ! & ! & nbsp ppaint:=fparent.onpaint
& nbsp & nbsp & nbsp si affecté(fparent.onresize)
& ! & ! & ! & nbsp presize:=fparent.onresize
& nbsp & nbsp & nbsp fparent.onpaint:=parentpaint
& nbsp & nbsp & nbsp fparent.onresize:=parentresize
& nbsp fin
& nbsp fparentwidth:=fparent.la largeur
& nbsp zeromemory(@fbuttonrect,sizeof(fbuttonrect))
& nbsp fpressed:=false
& nbsp ffocused:=false
& nbsp fhintshow:=false
& nbsp ficonwidth:=16
& nbsp ficon.Transparent:=true
& nbsp ficon.OnChange:=IconChange
& nbsp fhint.Couleur:=clInfoBk
& nbsp fcallinheritedevent:=false
& nbsp fdefaultwidth:=GetSystemMetrics(SM_CXSIZE)
& nbsp si fwidth
& nbsp & nbsp fwidth:=fdefaultwidth
& nbsp fdefaultheight:=GetSystemMetrics(SM_CYSIZE)
& nbsp fborder3d:=GetSystemMetrics(SM_CYEDGE)
& nbsp fborderthickness:=GetSystemMetrics(SM_CYSIZEFRAME)
& nbsp gtmp3:=false
fin
procédure TTitleButton.IconChange(Sender:tobject)
begin
& nbsp parentpaint(fparent)
fin
procédure TTitleButton.messagehandler(var message:tmessage)
begin
& nbsp si csdesigning dans componentstate puis
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp si msg.Msg=TTB_SETBUTTONUP puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp ButtonUp(msg)
& ! & ! & ! & ! & nbsp si (attribué(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp else
& ! & ! & ! & nbsp pmsghandler(msg)
& nbsp & nbsp fin
& nbsp else
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp si msg.Msg=WM_NCPAINT puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionPaint(msg)
& ! & ! & ! & ! & nbsp si (attribué(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_NCLBUTTONDOWN puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionMouseDown(msg)
& ! & ! & ! & ! & nbsp si (attribué(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_NCMOUSEMOVE puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionMouseMove(msg)
& ! & ! & ! & ! & nbsp si (attribué(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_NCLBUTTONUP puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionMouseUp(msg)
& ! & ! & ! & ! & nbsp si (attribué(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_NCACTIVATE puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionActivate(msg)
& ! & ! & ! & ! & nbsp si (attribué(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_NCHITTEST puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionHitTest(msg)
& ! & ! & ! & ! & nbsp si (attribué(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_LBUTTONUP puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp ParentMouseUp(msg)
& ! & ! & ! & ! & nbsp si (attribué(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_MOUSEMOVE puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp ParentMouseMove(msg)
& ! & ! & ! & ! & nbsp si (attribué(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_NCRBUTTONDOWN puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionRightMouseDown(msg)
& ! & ! & ! & ! & nbsp si (attribué(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_NCLBUTTONDBLCLK puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionDoubleClick(msg)
& ! & ! & ! & ! & nbsp si (attribué(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_NCLBUTTONDBLCLK puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionDoubleClick(msg)
& ! & ! & ! & ! & nbsp si (attribué(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_SETTEXT puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionChange(msg)
& ! & ! & ! & ! & nbsp si (attribué(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_SETTINGCHANGE puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp DisplaySettingChange(msg)
& ! & ! & ! & ! & nbsp si (attribué(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=TTB_SETBUTTONUP puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp ButtonUp(msg)
& ! & ! & ! & ! & nbsp si (attribué(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_MOUSELEAVE puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp fhint.ReleaseHandle
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp else
& ! & ! & ! & nbsp pmsghandler(msg)
& nbsp fin
fin
procédure TTitleButton.CaptionPaint(var message:tmessage)
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp invalidaterect(fparent.poignée,@fbuttonrect,false)
fin
procédure TTitleButton.CaptionMouseMove(var message:tmessage)
var
& nbsp pt:tpoint
& nbsp tmpstate:tshiftstate
& nbsp fhintwidth:integer
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp gtmp1:=fpressed
& nbsp gtmp2:=ffocused
& nbsp pt.x:=msg.LParamLo-fparent.gauche
& nbsp pt.y:=msg.LParamHi-fparent.top
& nbsp si PtInRect(fbuttonrect,pt)
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp ffocused:=true
& nbsp & nbsp & nbsp fhintwidth:=fhint.Toile.TextWidth(fhinttext)
& nbsp & nbsp & nbsp si (fhintshow=false) et (longueur(trim(fhinttext))<>0) then
& ! & ! & ! & nbsp fhint.ActivateHint(rect(de la souris.cursorpos.x de la souris.cursorpos.y 10,souris.cursorpos.x fhintwidth 7,de la souris.cursorpos.y 25),fhinttext)
& nbsp & nbsp & nbsp fhintshow:=true
& nbsp & nbsp & nbsp si affecté(fbuttonmove)
& ! & ! & ! & nbsp fbuttonmove(fparent,tmpstate,pt.x,pt.y)
& nbsp & nbsp fin
& nbsp else
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp ffocused:=false
& nbsp & nbsp & nbsp fhint.ReleaseHandle
& nbsp & nbsp & nbsp fhintshow:=false
& nbsp & nbsp fin
& nbsp fcallinheritedevent:=true
fin
procédure TTitleButton.CaptionMouseDown(var message:tmessage)
var
& nbsp pt:tpoint
& nbsp tmp1:boolean
& nbsp callevent:boolean
begin
& nbsp callevent:=false
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp fhintshow:=false
& nbsp fhint.releasehandle
& nbsp setforegroundwindow(fparent.la poignée)
& nbsp tmp1:=fpressed
& nbsp pt.x:=msg.LParamLo-fparent.gauche
& nbsp pt.y:=msg.LParamhi-fparent.top
& nbsp si ptinrect(fbuttonrect,pt)
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp gtmp3:=true
& nbsp & nbsp & nbsp si fgroupindex=0, alors
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp callevent:=true
& nbsp & nbsp - nbsp & nbsp fin
& nbsp & nbsp & nbsp else
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp si ce n'(fdown)
& ! & ! & ! & ! & ! & nbsp si affecté(fbuttondown)
& ! & ! & ! & ! & ! & ! & nbsp fbuttondown(fparent)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp fpressed:=true
& nbsp & nbsp & nbsp ffocused:=true
& nbsp & nbsp & nbsp setcapture(fparent.la poignée)
& nbsp & nbsp fin
& nbsp else
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp fpressed:=false
& nbsp & nbsp & nbsp ffocused:=false
& nbsp & nbsp fin
& nbsp si (tmp1<>fpressed)
& nbsp & nbsp fcallinheritedevent:=false
& nbsp gtmp1:=fpressed
& nbsp gtmp2:=ffocused
& nbsp & nbsp parentpaint(fparent)

& nbsp si (callevent) et affecté(fbuttondown)
& nbsp & nbsp fbuttondown(fparent)
fin
procédure TTitleButton.CaptionMouseUp(var message:tmessage)
var
& nbsp pt:Tpoint
& nbsp tmp1,tmp2:boolean
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp releasecapture
& nbsp tmp1:=fpressed
& nbsp tmp2:=ffocused
& nbsp pt.x:=msg.LParamLo-fparent.gauche
& nbsp pt.y:=msg.LParamhi-fparent.top
& nbsp si (ptinrect(fbuttonrect,pt)) et (ffocused = true)
& nbsp & nbsp fpressed:=false
& nbsp else
& nbsp & nbsp ffocused:=false
& nbsp si ((tmp1<>fpressed) ou (tmp2<>ffocused)) et (fallowallup et fdown)
& nbsp & nbsp invalidaterect(fparent.poignée,@fbuttonrect,true)
& nbsp fcallinheritedevent:=true
fin
procédure TTitleButton.CaptionRightMouseDown(var message:tmessage)
var
& nbsp pt:tpoint
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp fhint.releasehandle
& nbsp pt.x:=msg.LParamlo-fparent.gauche
& nbsp pt.y:=msg.LParamHi-fparent.top
& nbsp si pas ptinrect(fbuttonrect,pt)
& nbsp & nbsp fcallinheritedevent:=true
& nbsp else
& nbsp & nbsp fcallinheritedevent:=false
fin
procédure TTitleButton.CaptionDoubleClick(var message:tmessage)
var
& nbsp pt:tpoint
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp pt.x:=msg.LParamlo-fparent.gauche
& nbsp pt.y:=msg.LParamhi-fparent.top
& nbsp si ce n'(ptinrect(fbuttonrect,pt))
& nbsp & nbsp fcallinheritedevent:=true
& nbsp else
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp fcallinheritedevent:=false
& nbsp & nbsp & nbsp fparent.effectuer(WM_NCLBUTTONDOWN,msg.wparam,msg.LParam)
& nbsp & nbsp fin
fin

procédure TTitleButton.CaptionActivate(var message:tmessage)
begin
& nbsp fcallinheritedevent:=true
& nbsp si pas visible
& nbsp & nbsp sortie
& nbsp invalidaterect(fparent.poignée,@fbuttonrect,false)
fin
procédure TTitleButton.CaptionHitTest(var message:Tmessage)
var
& nbsp tmp:boolean
& nbsp pt:tpoint
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp si fpressed puis
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp tmp:=ffocused
& nbsp & nbsp & nbsp pt.x:=msg.LParamlo-fparent.gauche
& nbsp & nbsp & nbsp pt.y:=msg.LParamhi-fparent.top
& nbsp & nbsp & nbsp si ptinrect(fbuttonrect,pt)
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp ffocused:=true
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp else
& ! & ! & ! & nbsp ffocused:=false
& ! & ! & ! & nbsp si ffocused<>tmp
& ! & ! & ! & ! & nbsp invalidaterect(fparent.poignée,@fbuttonrect,false)
& nbsp & nbsp fin
& nbsp si ffocused=false then
& nbsp & nbsp fhint.releasehandle
& nbsp gtmp1:=fpressed
& nbsp gtmp2:=ffocused
& nbsp fcallinheritedevent:=true
fin
procédure TTitleButton.CaptionChange(var message:Tmessage)
begin
& nbsp fcallinheritedevent:=true
& nbsp si pas fvisible puis
& nbsp & nbsp sortie
& nbsp invalidaterect(fparent.poignée,@fbuttonrect,false)
fin
procédure TTitleButton.ButtonUp(var message:tmessage)
var
& nbsp expéditeur:ttitlebutton
& nbsp tmp:boolean
begin
& nbsp tmp:=fdown
& nbsp fcallinheritedevent:=true
& nbsp expéditeur:=(tcomponent(msg.WParam) ttitlebutton)
& nbsp if (sender<>auto) et (msg.LParamLo=fgroupindex)
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp si tchangedproperty(msg.lparamhi)=cpdown puis
& ! & ! & ! & nbsp fdown:=false
& nbsp & nbsp & nbsp fallowallup:=expéditeur.fallowallup
& nbsp & nbsp & nbsp si tmp<>fdown puis
& ! & ! & ! & nbsp invalidaterect(fparent.poignée,@fbuttonrect,false)
& nbsp & nbsp fin
fin
procédure TTitleButton.ParentMouseMove(var message:tmessage)
var
& nbsp pt:tpoint
& nbsp tmppt:tpoint
& nbsp tmprect:trect
& nbsp tmpstate:Tshiftstate
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp ffocused:=false
& nbsp pt.x:=msg.lparamlo
& nbsp pt.y:=msg.lparamhi-fparent.top
& nbsp tmppt:=pt
& nbsp tmppt.x:=tmppt.x 4
& nbsp tmppt.y:=65536-tmppt.y-fparent.top
& nbsp tmprect:=fbuttonrect
& nbsp inflaterect(tmprect,1,1)
& nbsp si ptinrect(tmprect,tmppt)
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp ffocused:=true
& nbsp & nbsp & nbsp si affecté(fbuttonmove)
& ! & ! & ! & nbsp fbuttonmove(fparent,tmpstate,tmppt.x,tmppt.y)
& nbsp & nbsp & nbsp si (gtmp1<>fpressed) ou (gtmp2<>ffocused) then// si fpressed puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp invalidaterect(fparent.poignée,@fbuttonrect,false)
& ! & ! & ! & ! & nbsp gtmp1:=fpressed
& ! & ! & ! & ! & nbsp gtmp2:=ffocused
& ! & ! & ! & nbsp fin
& nbsp & nbsp fin
& nbsp si (gtmp1<>fpressed) ou (gtmp2<>ffocused) puis
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp invalidaterect(fparent.poignée,@fbuttonrect,false)
& nbsp & nbsp & nbsp gtmp1:=fpressed
& nbsp & nbsp & nbsp gtmp2:=ffocused
& nbsp & nbsp fin
& nbsp fhintshow:=false
& nbsp fhint.releasehandle
fin

procédure TTitleButton.ParentMouseUp(var message:tmessage)
var
& nbsp pt:tpoint
& nbsp tmp:tpoint
& nbsp tmprect:trect
& nbsp tmpcallevent:boolean
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp tmpcallevent:=false
& nbsp fhint.ReleaseHandle
& nbsp fhintshow:=true
& nbsp ReleaseCapture
& nbsp fpressed:=false
& nbsp pt.x:=msg.lParamlo
& nbsp pt.y:=msg.lParamhi-fparent.top
& nbsp tmp:=pt
& nbsp tmp.x:=tmp.x 4
& nbsp tmp.y:=65536-tmp.y
& nbsp tmp.y:=tmp.y-fparent.top
& nbsp tmprect:=fbuttonrect
& nbsp inflaterect(tmprect,0,2)
& nbsp si tmp.y<(fparent.top fparent.Hauteur)
& nbsp & nbsp pt:=tmp
& nbsp si (ptinrect(tmprect,pt)) et (ffocused) et (gtmp3) puis
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp si fgroupindex<>0 then
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp si fallowallup=true
& ! & ! & ! & ! & ! & nbsp fdown:=non(fdown)
& ! & ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & nbsp fdown:=true
& ! & ! & ! & ! & nbsp gtmp3:=false
& ! & ! & ! & ! & nbsp méthode updateproperties(cpdown)
& ! & ! & ! & ! & nbsp si ce n'(fdown) puis
& ! & ! & ! & ! & ! & nbsp tmpcallevent:=true
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp else
& ! & ! & ! & nbsp tmpcallevent:=true
& nbs & nbsp & nbsp parentpaint(fparent)
& nbsp & nbsp & nbsp si (tmpcallevent=true) et affecté(fbuttonup)
& ! & ! & ! & nbsp fbuttonup(fparent)
& nbsp & nbsp fin
& nbsp else
& nbsp & nbsp gtmp3:=false
& nbsp fcallinheritedevent:=true
fin
procédure TTitleButton.parentpaint(sender:tobject)
var
& nbsp ButtonCanvas:TCanvas
& nbsp textrect:trect
& nbsp iconrect:trect
& nbsp tmpwidth:integer
begin
& nbsp si fvisible=false then
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp si affecté(ppaint)puis
& ! & ! & ! & nbsp ppaint(expéditeur)
& nbsp & nbsp & nbsp sortie
& nbsp & nbsp fin
& nbsp si ce n'(csdesigning dans componentstate)
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp si fwidth
& ! & ! & ! & nbsp fwidth:=fdefaultwidth
& nbsp & nbsp & nbsp si fleft=0, alors
& ! & ! & ! & nbsp fleft:=fwidth 1
& nbsp & nbsp & nbsp fbuttonrect.à gauche:=fparent.largeur-fleft-(3*fdefaultwidth)-(fborder3d fborderthickness)
& nbsp & nbsp & nbsp fbuttonrect.droit:=fbuttonrect.gauche fwidth
& nbsp & nbsp & nbsp fbuttonrect.haut:=fborder3d fborderthickness
& nbsp & nbsp & nbsp fbuttonrect.en bas:=fbuttonrect.top fdefaultheight-(2*fborder3d)
& nbsp & nbsp & nbsp ButtonCanvas:=tcanvas.Créer
& nbsp & nbsp & nbsp ButtonCanvas.Poignée:=getwindowdc(fparent.la poignée)
& nbsp & nbsp & nbsp fillrect(buttoncanvas.Poignée,fbuttonrect,HBRUSH(COLOR_BTNFACE 1))
& nbsp & nbsp & nbsp tmpwidth:=fdefaultheight-2
& nbsp & nbsp & nbsp iconrect.à gauche:=fbuttonrect.gauche
& nbsp & nbsp & nbsp iconrect.haut:=fbuttonrect.top
& nbsp & nbsp & nbsp iconrect.droit:=iconrect.gauche tmpwidth
& nbsp & nbsp & nbsp iconrect.en bas:=fbuttonrect.top fdefaultheight-2*fborder3d
& nbsp & nbsp & nbsp si ficon.poignée<>0 then
& ! & ! & ! & nbsp subtractrect(textrect,fbuttonrect,iconrect)
& nbsp & nbsp & nbsp else
& ! & ! & ! & nbsp textrect:=fbuttonrect
& nbsp & nbsp & nbsp si (ffocused et fpressed) ou fdown puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp drawedge(ButtonCanvas.Poignée,fbuttonrect,EDGE_SUNKEN,BF_SOFT ou BF_RECT)
& ! & ! & ! & ! & nbsp textrect.à gauche:=textrect.gauche 2
& ! & ! & ! & ! & nbsp textrect.Haut:=textrect.Top 1
& ! & ! & ! & ! & nbsp textrect.droit:=textrect.droit-1
& ! & ! & ! & ! & nbsp iconrect.à gauche:=iconrect.gauche 3
& ! & ! & ! & ! & nbsp iconrect.haut:=iconrect.haut de la page 2
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp si (non(fpressed) ou non(ffocused)) et pas(fdown)
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp drawedge(ButtonCanvas.Poignée,fbuttonrect,EDGE_RAISED,BF_SOFT ou BF_RECT)
& ! & ! & ! & ! & nbsp textrect.à gauche:=textrect.gauche 1
& ! & ! & ! & ! & nbsp textrect.droit:=textrect.droit-1
& ! & ! & ! & ! & nbsp iconrect.haut:=iconrect.top 1
& ! & ! & ! & ! & nbsp iconrect.à gauche:=iconrect.gauche 2
& nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp ButtonCanvas.La brosse.Style:=bsclear
& nbsp & nbsp & nbsp ButtonCanvas.La police.attribuer(ffont)
& nbsp & nbsp & nbsp si ficon.Poignée<>0 then
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp drawiconex(buttoncanvas.poignée,iconrect.gauche 1,iconrect.top 1,ficon.poignée,tmpwidth-5,fdefaultheight-8,0,0,DI_NORMAL)
& ! & ! & ! & ! & nbsp si la longueur(trim(fbuttoncaption))>0, alors
& ! & ! & ! & ! & ! & nbsp DrawTextEx(ButtonCanvas.Poignée,PChar(fButtonCaption),Longueur(fbuttoncaption),textrect,DT_LEFT ou DT_SINGLELINE ou DT_VCENTER ou DT_END_ELLIPSIS ou DT_PATH_ELLIPSIS ou DT_MODIFYSTRING,nil)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp else
& ! & ! & ! & nbsp DrawText(ButtonCanvas.Poignée,PChar(fButtonCaption),Longueur(fbuttoncaption),textrect,DT_CENTER ou DT_SINGLELINE ou DT_VCENTER ou DT_END_ELLIPSIS ou DT_PATH_ELLIPSIS ou DT_MODIFYSTRING)
& nbsp & nbsp & nbsp ButtonCanvas.Gratuit
& nbsp & nbsp & nbsp si affecté(ppaint)
& ! & ! & ! & nbsp ppaint(expéditeur)
& nbsp & nbsp fin
fin
procédure TTitleButton.parentresize(sender:tobject)
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp si affecté(presize)
& ! & ! & ! & nbsp presize(expéditeur)
& nbsp & nbsp & nbsp sortie
& nbsp & nbsp fin
& nbsp parentpaint(expéditeur)
& nbsp si affecté(presize)
& nbsp & nbsp presize(auto)
fin

procédure TTitleButton.DisplaySettingChange(var message:tmessage)
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp fdefaultwidth:=GetSystemMetrics(SM_CXSIZE)
& nbsp si fwidth
& nbsp & nbsp fwidth:=fdefaultwidth
& nbsp fdefaultheight:=GetSystemMetrics(SM_CYSIZE)
& nbsp fborder3d:=GetSystemMetrics(SM_CYEDGE)
& nbsp fborderthickness:=GetSystemMetrics(SM_CYSIZEFRAME)
& nbsp parentpaint(fparent)
& nbsp msg.résultat:=0
fin
procédure TTitleButton.setbuttonwidth(awidth:entier)
begin
& nbsp si awidth>0, alors
& nbsp & nbsp fwidth:=awidth
& nbsp else
& nbsp & nbsp fwidth:=fdefaultwidth
& nbsp parentpaint(fparent)
fin
procédure TTitleButton.setbuttonleft(aleft:entier)
begin
& nbsp si (aleft
& nbsp & nbsp fleft:=aleft
& nbsp parentpaint(fparent)
fin
procédure TTitleButton.setbuttoncaption(acaption:string)
begin
& nbsp fbuttoncaption:=acaption
& nbsp parentpaint(fparent)
fin
procédure TTitleButton.setbuttonfont(afont:tfont)
begin
& nbsp ffont.attribuer(afont)
& nbsp parentpaint(fparent)
fin
procédure TTitleButton.seticon(aicon:ticon)
begin
& nbsp ficon.attribuer(aicon)
& nbsp parentpaint(fparent)
fin
procédure TTitleButton.setbuttonvisible(avisible:boolean)
begin
& nbsp fvisible:=avisible
& nbsp fparent.effectuer(WM_NCACTIVATE,integer(vrai),0)
fin

procédure TTitleButton.setdown(fbas:boolean)
var
& nbsp tmp:boolean
begin
& nbsp tmp:=fdown
& nbsp si csloading dans componentstate puis








Ajouter un bouton a la barre de legende de votre formulaire


Ajouter un bouton a la barre de legende de votre formulaire : Plusieurs milliers de conseils pour vous faciliter la vie.


Ajouter un bouton a la barre de legende de la forme
j'ai cree un composant qui vous permet d'ajouter des boutons a la barre de legende de votre formulaire. Voici le code.
& & & & Code & & & & __
unite de TitleButton
interface

& nbsp & nbsp Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs
const
& nbsp WM_MOUSELEAVE=$B014
type
& nbsp TChangedProperty=(cpdown,cpallowallup,cpgroupindex)
type
& nbsp & nbsp TTitleButton = class(Tcomponent)
& nbsp & nbsp prive
& nbsp & nbsp & nbsp fbuttonrect:trect
& nbsp & nbsp & nbsp fpressed,ffocused:boolean
& nbsp & nbsp & nbsp fbuttoncaption:string
& nbsp & nbsp & nbsp fwidth:integer
& nbsp & nbsp & nbsp fleft:entier
& nbsp & nbsp & nbsp fvisible:boolean
& nbsp & nbsp & nbsp fhintshow:boolean
& nbsp & nbsp & nbsp fhint:thintwindow
& nbsp & nbsp & nbsp fhinttext:string
& nbsp & nbsp & nbsp fgroupindex:integer
& nbsp & nbsp & nbsp fdown:boolean
& nbsp & nbsp & nbsp fallowallup:boolean
& nbsp & nbsp & nbsp fparent:Tform
& nbsp & nbsp & nbsp fparentwidth:integer
& nbsp & nbsp & nbsp ficonwidth:integer
& nbsp & nbsp & nbsp fcallinheritedevent:boolean
& nbsp & nbsp & nbsp fdefaultwidth:integer
& nbsp & nbsp & nbsp fdefaultheight:integer
& nbsp & nbsp & nbsp ffont:Tfont
& nbsp & nbsp & nbsp ficon:Ticon
& nbsp & nbsp & nbsp fborder3d,fborderthickness:integer
& nbsp & nbsp & nbsp fbuttondown:tnotifyevent
& nbsp & nbsp & nbsp fbuttonmove:tmousemoveevent
& nbsp & nbsp & nbsp fbuttonup:tnotifyevent
& nbsp & nbsp & nbsp pmsghandler:Twndmethod
& nbsp & nbsp & nbsp ppaint:Tnotifyevent
& nbsp & nbsp & nbsp presize:tnotifyevent
& nbsp & nbsp & nbsp gtmp1,gtmp2,gtmp3:boolean
& nbsp & nbsp & nbsp procedure initializevariables
& nbsp & nbsp & nbsp procedure IconChange(Sender:tobject)
& nbsp & nbsp & nbsp procedure setbuttonwidth(awidth:entier)
& nbsp & nbsp & nbsp procedure setbuttonleft(aleft:integer)
& nbsp & nbsp & nbsp procedure setbuttoncaption(acaption:string)
& nbsp & nbsp & nbsp procedure setbuttonfont(afont:tfont)
& nbsp & nbsp & nbsp procedure setbuttonvisible(avisible:boolean)
& nbsp & nbsp & nbsp procedure seticon(aicon:ticon)
& nbsp & nbsp & nbsp procedure setdown(fbas:boolean)
& nbsp & nbsp & nbsp procedure setallowallup(aallowallup:boolean)
& nbsp & nbsp & nbsp procedure setgroupindex(agroupindex:entier)
& nbsp & nbsp & nbsp procedure de la methode updateproperties(achangedproperty:TChangedProperty)
& nbsp & nbsp protege
& nbsp & nbsp & nbsp procedure messagehandler(var message:tmessage)
& nbsp & nbsp & nbsp procedure CaptionPaint(var message:tmessage)
& nbsp & nbsp & nbsp procedure CaptionMouseMove(var message:tmessage)
& nbsp & nbsp & nbsp procedure CaptionMouseDown(var message:tmessage)
& nbsp & nbsp & nbsp procedure CaptionMouseUp(var message:tmessage)
& nbsp & nbsp & nbsp procedure CaptionRightMouseDown(var message:tmessage)
& nbsp & nbsp & nbsp procedure CaptionDoubleClick(var message:tmessage)
& nbsp & nbsp & nbsp procedure CaptionActivate(var message:tmessage)
& nbsp & nbsp & nbsp procedure CaptionHitTest(var message:Tmessage)
& nbsp & nbsp & nbsp procedure CaptionChange(var message:Tmessage)
& nbsp & nbsp & nbsp procedure ParentMouseMove(var message:tmessage)
& nbsp & nbsp & nbsp procedure ParentMouseUp(var message:tmessage)
& nbsp & nbsp & nbsp procedure ButtonUp(var message:tmessage)
& nbsp & nbsp & nbsp procedure ParentPaint(sender:tobject)
& nbsp & nbsp & nbsp procedure ParentResize(sender:tobject)
& nbsp & nbsp & nbsp procedure DisplaySettingChange(var message:tmessage)
& nbsp & nbsp & nbsp procedure charge de remplacer
& nbsp & nbsp public
& nbsp & nbsp & nbsp constructor create(aowner:tcomponent) remplacer
& nbsp & nbsp & nbsp destructeur de detruire remplacer
& nbsp & nbsp publie
& nbsp & nbsp & nbsp propriete Width:integer lire fwidth ecrire setbuttonwidth
& nbsp & nbsp & nbsp propriete Position:entier lire fleft ecrire setbuttonleft
& nbsp & nbsp & nbsp propriete Legende:chaîne de lecture fbuttoncaption ecrire setbuttoncaption
& nbsp & nbsp & nbsp propriete de la Police:Tfont lire ffont ecrire SetButtonFont
& nbsp & nbsp & nbsp Icone de propriete:Ticon lire ficon ecrire seticon
& nbsp & nbsp & nbsp propriete TipText:chaîne de lecture fhinttext ecrire fhinttext
& nbsp & nbsp & nbsp propriete Visible:boolean lire fvisible ecrire setbuttonvisible
& nbsp & nbsp & nbsp propriete AllowAllUp:boolean lire fallowallup ecrire setallowallup
& nbsp & nbsp & nbsp propriete vers le Bas:boolean lire fdown ecrire setdown
& nbsp & nbsp & nbsp propriete GroupIndex:integer lire fgroupindex ecrire setgroupindex
& nbsp & nbsp & nbsp propriete OnMouseDown:tnotifyevent lire fbuttondown ecrire fbuttondown
& nbsp & nbsp & nbsp propriete OnMouseMove:tmousemoveevent lire fbuttonmove ecrire fbuttonmove
& nbsp & nbsp & nbsp propriete OnMouseUp:tnotifyevent lire fbuttonup ecrire fbuttonup
& nbsp & nbsp fin
const
& nbsp TTB_SETBUTTONUP=WM_USER 1
procedure Register
application
constructeur TTitleButton.create(aowner:tcomponent)
begin
& nbsp herite
& nbsp & nbsp fparent:=(proprietaire tform)
& nbsp & nbsp ffont:=tfont.creer
& nbsp & nbsp fhint:=thintwindow.create(self)
& nbsp & nbsp ficon:=ticon.creer
fin
destructeur TTitleButton.detruire
begin
& nbsp si affecte(ficon)
& nbsp & nbsp ficon.gratuit
& nbsp si affecte(ffont)
& nbsp & nbsp ffont.gratuit
& nbsp si affecte(fhint)
& nbsp & nbsp fhint.gratuit
& nbsp herite
fin
procedure TTitleButton.charge
begin
& nbsp herite
& nbsp initializevariables
fin
procedure TTitleButton.La methode updateproperties(achangedproperty:TChangedProperty)
var
& nbsp amsg:tmessage
begin
& nbsp amsg.Msg:=TTB_SETBUTTONUP
& nbsp amsg.WParam:=integer(auto)
& nbsp amsg.LParamlo:=fgroupindex
& nbsp amsg.LParamHi:=mot(achangedproperty)
& nbsp amsg.Resultat:=0
& nbsp fparent.effectuer(amsg.msg,amsg.wparam,amsg.lparam)
fin
procedure TTitleButton.initializevariables
begin
& nbsp si affecte(fparent.WindowProc)
& nbsp & nbsp pmsghandler:=fparent.WindowProc
& nbsp fparent.WindowProc:=messagehandler
& nbsp si ce n'(csdesigning dans componentstate)
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp si affecte(fparent.onpaint)
& ! & ! & ! & nbsp ppaint:=fparent.onpaint
& nbsp & nbsp & nbsp si affecte(fparent.onresize)
& ! & ! & ! & nbsp presize:=fparent.onresize
& nbsp & nbsp & nbsp fparent.onpaint:=parentpaint
& nbsp & nbsp & nbsp fparent.onresize:=parentresize
& nbsp fin
& nbsp fparentwidth:=fparent.la largeur
& nbsp zeromemory(@fbuttonrect,sizeof(fbuttonrect))
& nbsp fpressed:=false
& nbsp ffocused:=false
& nbsp fhintshow:=false
& nbsp ficonwidth:=16
& nbsp ficon.Transparent:=true
& nbsp ficon.OnChange:=IconChange
& nbsp fhint.Couleur:=clInfoBk
& nbsp fcallinheritedevent:=false
& nbsp fdefaultwidth:=GetSystemMetrics(SM_CXSIZE)
& nbsp si fwidth
& nbsp & nbsp fwidth:=fdefaultwidth
& nbsp fdefaultheight:=GetSystemMetrics(SM_CYSIZE)
& nbsp fborder3d:=GetSystemMetrics(SM_CYEDGE)
& nbsp fborderthickness:=GetSystemMetrics(SM_CYSIZEFRAME)
& nbsp gtmp3:=false
fin
procedure TTitleButton.IconChange(Sender:tobject)
begin
& nbsp parentpaint(fparent)
fin
procedure TTitleButton.messagehandler(var message:tmessage)
begin
& nbsp si csdesigning dans componentstate puis
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp si msg.Msg=TTB_SETBUTTONUP puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp ButtonUp(msg)
& ! & ! & ! & ! & nbsp si (attribue(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp else
& ! & ! & ! & nbsp pmsghandler(msg)
& nbsp & nbsp fin
& nbsp else
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp si msg.Msg=WM_NCPAINT puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionPaint(msg)
& ! & ! & ! & ! & nbsp si (attribue(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_NCLBUTTONDOWN puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionMouseDown(msg)
& ! & ! & ! & ! & nbsp si (attribue(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_NCMOUSEMOVE puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionMouseMove(msg)
& ! & ! & ! & ! & nbsp si (attribue(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_NCLBUTTONUP puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionMouseUp(msg)
& ! & ! & ! & ! & nbsp si (attribue(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_NCACTIVATE puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionActivate(msg)
& ! & ! & ! & ! & nbsp si (attribue(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_NCHITTEST puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionHitTest(msg)
& ! & ! & ! & ! & nbsp si (attribue(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_LBUTTONUP puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp ParentMouseUp(msg)
& ! & ! & ! & ! & nbsp si (attribue(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_MOUSEMOVE puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp ParentMouseMove(msg)
& ! & ! & ! & ! & nbsp si (attribue(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_NCRBUTTONDOWN puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionRightMouseDown(msg)
& ! & ! & ! & ! & nbsp si (attribue(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_NCLBUTTONDBLCLK puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionDoubleClick(msg)
& ! & ! & ! & ! & nbsp si (attribue(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_NCLBUTTONDBLCLK puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionDoubleClick(msg)
& ! & ! & ! & ! & nbsp si (attribue(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_SETTEXT puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp CaptionChange(msg)
& ! & ! & ! & ! & nbsp si (attribue(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_SETTINGCHANGE puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp DisplaySettingChange(msg)
& ! & ! & ! & ! & nbsp si (attribue(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=TTB_SETBUTTONUP puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp ButtonUp(msg)
& ! & ! & ! & ! & nbsp si (attribue(pmsghandler)) et (fcallinheritedevent)
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp sinon si le msg.Msg=WM_MOUSELEAVE puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp fhint.ReleaseHandle
& ! & ! & ! & ! & ! & nbsp pmsghandler(msg)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp else
& ! & ! & ! & nbsp pmsghandler(msg)
& nbsp fin
fin
procedure TTitleButton.CaptionPaint(var message:tmessage)
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp invalidaterect(fparent.poignee,@fbuttonrect,false)
fin
procedure TTitleButton.CaptionMouseMove(var message:tmessage)
var
& nbsp pt:tpoint
& nbsp tmpstate:tshiftstate
& nbsp fhintwidth:integer
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp gtmp1:=fpressed
& nbsp gtmp2:=ffocused
& nbsp pt.x:=msg.LParamLo-fparent.gauche
& nbsp pt.y:=msg.LParamHi-fparent.top
& nbsp si PtInRect(fbuttonrect,pt)
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp ffocused:=true
& nbsp & nbsp & nbsp fhintwidth:=fhint.Toile.TextWidth(fhinttext)
& nbsp & nbsp & nbsp si (fhintshow=false) et (longueur(trim(fhinttext))<>0) then
& ! & ! & ! & nbsp fhint.ActivateHint(rect(de la souris.cursorpos.x de la souris.cursorpos.y 10,souris.cursorpos.x fhintwidth 7,de la souris.cursorpos.y 25),fhinttext)
& nbsp & nbsp & nbsp fhintshow:=true
& nbsp & nbsp & nbsp si affecte(fbuttonmove)
& ! & ! & ! & nbsp fbuttonmove(fparent,tmpstate,pt.x,pt.y)
& nbsp & nbsp fin
& nbsp else
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp ffocused:=false
& nbsp & nbsp & nbsp fhint.ReleaseHandle
& nbsp & nbsp & nbsp fhintshow:=false
& nbsp & nbsp fin
& nbsp fcallinheritedevent:=true
fin
procedure TTitleButton.CaptionMouseDown(var message:tmessage)
var
& nbsp pt:tpoint
& nbsp tmp1:boolean
& nbsp callevent:boolean
begin
& nbsp callevent:=false
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp fhintshow:=false
& nbsp fhint.releasehandle
& nbsp setforegroundwindow(fparent.la poignee)
& nbsp tmp1:=fpressed
& nbsp pt.x:=msg.LParamLo-fparent.gauche
& nbsp pt.y:=msg.LParamhi-fparent.top
& nbsp si ptinrect(fbuttonrect,pt)
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp gtmp3:=true
& nbsp & nbsp & nbsp si fgroupindex=0, alors
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp callevent:=true
& nbsp & nbsp - nbsp & nbsp fin
& nbsp & nbsp & nbsp else
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp si ce n'(fdown)
& ! & ! & ! & ! & ! & nbsp si affecte(fbuttondown)
& ! & ! & ! & ! & ! & ! & nbsp fbuttondown(fparent)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp fpressed:=true
& nbsp & nbsp & nbsp ffocused:=true
& nbsp & nbsp & nbsp setcapture(fparent.la poignee)
& nbsp & nbsp fin
& nbsp else
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp fpressed:=false
& nbsp & nbsp & nbsp ffocused:=false
& nbsp & nbsp fin
& nbsp si (tmp1<>fpressed)
& nbsp & nbsp fcallinheritedevent:=false
& nbsp gtmp1:=fpressed
& nbsp gtmp2:=ffocused
& nbsp & nbsp parentpaint(fparent)

& nbsp si (callevent) et affecte(fbuttondown)
& nbsp & nbsp fbuttondown(fparent)
fin
procedure TTitleButton.CaptionMouseUp(var message:tmessage)
var
& nbsp pt:Tpoint
& nbsp tmp1,tmp2:boolean
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp releasecapture
& nbsp tmp1:=fpressed
& nbsp tmp2:=ffocused
& nbsp pt.x:=msg.LParamLo-fparent.gauche
& nbsp pt.y:=msg.LParamhi-fparent.top
& nbsp si (ptinrect(fbuttonrect,pt)) et (ffocused = true)
& nbsp & nbsp fpressed:=false
& nbsp else
& nbsp & nbsp ffocused:=false
& nbsp si ((tmp1<>fpressed) ou (tmp2<>ffocused)) et (fallowallup et fdown)
& nbsp & nbsp invalidaterect(fparent.poignee,@fbuttonrect,true)
& nbsp fcallinheritedevent:=true
fin
procedure TTitleButton.CaptionRightMouseDown(var message:tmessage)
var
& nbsp pt:tpoint
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp fhint.releasehandle
& nbsp pt.x:=msg.LParamlo-fparent.gauche
& nbsp pt.y:=msg.LParamHi-fparent.top
& nbsp si pas ptinrect(fbuttonrect,pt)
& nbsp & nbsp fcallinheritedevent:=true
& nbsp else
& nbsp & nbsp fcallinheritedevent:=false
fin
procedure TTitleButton.CaptionDoubleClick(var message:tmessage)
var
& nbsp pt:tpoint
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp pt.x:=msg.LParamlo-fparent.gauche
& nbsp pt.y:=msg.LParamhi-fparent.top
& nbsp si ce n'(ptinrect(fbuttonrect,pt))
& nbsp & nbsp fcallinheritedevent:=true
& nbsp else
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp fcallinheritedevent:=false
& nbsp & nbsp & nbsp fparent.effectuer(WM_NCLBUTTONDOWN,msg.wparam,msg.LParam)
& nbsp & nbsp fin
fin

procedure TTitleButton.CaptionActivate(var message:tmessage)
begin
& nbsp fcallinheritedevent:=true
& nbsp si pas visible
& nbsp & nbsp sortie
& nbsp invalidaterect(fparent.poignee,@fbuttonrect,false)
fin
procedure TTitleButton.CaptionHitTest(var message:Tmessage)
var
& nbsp tmp:boolean
& nbsp pt:tpoint
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp si fpressed puis
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp tmp:=ffocused
& nbsp & nbsp & nbsp pt.x:=msg.LParamlo-fparent.gauche
& nbsp & nbsp & nbsp pt.y:=msg.LParamhi-fparent.top
& nbsp & nbsp & nbsp si ptinrect(fbuttonrect,pt)
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp ffocused:=true
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp else
& ! & ! & ! & nbsp ffocused:=false
& ! & ! & ! & nbsp si ffocused<>tmp
& ! & ! & ! & ! & nbsp invalidaterect(fparent.poignee,@fbuttonrect,false)
& nbsp & nbsp fin
& nbsp si ffocused=false then
& nbsp & nbsp fhint.releasehandle
& nbsp gtmp1:=fpressed
& nbsp gtmp2:=ffocused
& nbsp fcallinheritedevent:=true
fin
procedure TTitleButton.CaptionChange(var message:Tmessage)
begin
& nbsp fcallinheritedevent:=true
& nbsp si pas fvisible puis
& nbsp & nbsp sortie
& nbsp invalidaterect(fparent.poignee,@fbuttonrect,false)
fin
procedure TTitleButton.ButtonUp(var message:tmessage)
var
& nbsp expediteur:ttitlebutton
& nbsp tmp:boolean
begin
& nbsp tmp:=fdown
& nbsp fcallinheritedevent:=true
& nbsp expediteur:=(tcomponent(msg.WParam) ttitlebutton)
& nbsp if (sender<>auto) et (msg.LParamLo=fgroupindex)
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp si tchangedproperty(msg.lparamhi)=cpdown puis
& ! & ! & ! & nbsp fdown:=false
& nbsp & nbsp & nbsp fallowallup:=expediteur.fallowallup
& nbsp & nbsp & nbsp si tmp<>fdown puis
& ! & ! & ! & nbsp invalidaterect(fparent.poignee,@fbuttonrect,false)
& nbsp & nbsp fin
fin
procedure TTitleButton.ParentMouseMove(var message:tmessage)
var
& nbsp pt:tpoint
& nbsp tmppt:tpoint
& nbsp tmprect:trect
& nbsp tmpstate:Tshiftstate
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp ffocused:=false
& nbsp pt.x:=msg.lparamlo
& nbsp pt.y:=msg.lparamhi-fparent.top
& nbsp tmppt:=pt
& nbsp tmppt.x:=tmppt.x 4
& nbsp tmppt.y:=65536-tmppt.y-fparent.top
& nbsp tmprect:=fbuttonrect
& nbsp inflaterect(tmprect,1,1)
& nbsp si ptinrect(tmprect,tmppt)
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp ffocused:=true
& nbsp & nbsp & nbsp si affecte(fbuttonmove)
& ! & ! & ! & nbsp fbuttonmove(fparent,tmpstate,tmppt.x,tmppt.y)
& nbsp & nbsp & nbsp si (gtmp1<>fpressed) ou (gtmp2<>ffocused) then// si fpressed puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp invalidaterect(fparent.poignee,@fbuttonrect,false)
& ! & ! & ! & ! & nbsp gtmp1:=fpressed
& ! & ! & ! & ! & nbsp gtmp2:=ffocused
& ! & ! & ! & nbsp fin
& nbsp & nbsp fin
& nbsp si (gtmp1<>fpressed) ou (gtmp2<>ffocused) puis
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp invalidaterect(fparent.poignee,@fbuttonrect,false)
& nbsp & nbsp & nbsp gtmp1:=fpressed
& nbsp & nbsp & nbsp gtmp2:=ffocused
& nbsp & nbsp fin
& nbsp fhintshow:=false
& nbsp fhint.releasehandle
fin

procedure TTitleButton.ParentMouseUp(var message:tmessage)
var
& nbsp pt:tpoint
& nbsp tmp:tpoint
& nbsp tmprect:trect
& nbsp tmpcallevent:boolean
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp tmpcallevent:=false
& nbsp fhint.ReleaseHandle
& nbsp fhintshow:=true
& nbsp ReleaseCapture
& nbsp fpressed:=false
& nbsp pt.x:=msg.lParamlo
& nbsp pt.y:=msg.lParamhi-fparent.top
& nbsp tmp:=pt
& nbsp tmp.x:=tmp.x 4
& nbsp tmp.y:=65536-tmp.y
& nbsp tmp.y:=tmp.y-fparent.top
& nbsp tmprect:=fbuttonrect
& nbsp inflaterect(tmprect,0,2)
& nbsp si tmp.y<(fparent.top fparent.Hauteur)
& nbsp & nbsp pt:=tmp
& nbsp si (ptinrect(tmprect,pt)) et (ffocused) et (gtmp3) puis
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp si fgroupindex<>0 then
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp si fallowallup=true
& ! & ! & ! & ! & ! & nbsp fdown:=non(fdown)
& ! & ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & nbsp fdown:=true
& ! & ! & ! & ! & nbsp gtmp3:=false
& ! & ! & ! & ! & nbsp methode updateproperties(cpdown)
& ! & ! & ! & ! & nbsp si ce n'(fdown) puis
& ! & ! & ! & ! & ! & nbsp tmpcallevent:=true
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp else
& ! & ! & ! & nbsp tmpcallevent:=true
& nbs & nbsp & nbsp parentpaint(fparent)
& nbsp & nbsp & nbsp si (tmpcallevent=true) et affecte(fbuttonup)
& ! & ! & ! & nbsp fbuttonup(fparent)
& nbsp & nbsp fin
& nbsp else
& nbsp & nbsp gtmp3:=false
& nbsp fcallinheritedevent:=true
fin
procedure TTitleButton.parentpaint(sender:tobject)
var
& nbsp ButtonCanvas:TCanvas
& nbsp textrect:trect
& nbsp iconrect:trect
& nbsp tmpwidth:integer
begin
& nbsp si fvisible=false then
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp si affecte(ppaint)puis
& ! & ! & ! & nbsp ppaint(expediteur)
& nbsp & nbsp & nbsp sortie
& nbsp & nbsp fin
& nbsp si ce n'(csdesigning dans componentstate)
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp si fwidth
& ! & ! & ! & nbsp fwidth:=fdefaultwidth
& nbsp & nbsp & nbsp si fleft=0, alors
& ! & ! & ! & nbsp fleft:=fwidth 1
& nbsp & nbsp & nbsp fbuttonrect.a gauche:=fparent.largeur-fleft-(3*fdefaultwidth)-(fborder3d fborderthickness)
& nbsp & nbsp & nbsp fbuttonrect.droit:=fbuttonrect.gauche fwidth
& nbsp & nbsp & nbsp fbuttonrect.haut:=fborder3d fborderthickness
& nbsp & nbsp & nbsp fbuttonrect.en bas:=fbuttonrect.top fdefaultheight-(2*fborder3d)
& nbsp & nbsp & nbsp ButtonCanvas:=tcanvas.Creer
& nbsp & nbsp & nbsp ButtonCanvas.Poignee:=getwindowdc(fparent.la poignee)
& nbsp & nbsp & nbsp fillrect(buttoncanvas.Poignee,fbuttonrect,HBRUSH(COLOR_BTNFACE 1))
& nbsp & nbsp & nbsp tmpwidth:=fdefaultheight-2
& nbsp & nbsp & nbsp iconrect.a gauche:=fbuttonrect.gauche
& nbsp & nbsp & nbsp iconrect.haut:=fbuttonrect.top
& nbsp & nbsp & nbsp iconrect.droit:=iconrect.gauche tmpwidth
& nbsp & nbsp & nbsp iconrect.en bas:=fbuttonrect.top fdefaultheight-2*fborder3d
& nbsp & nbsp & nbsp si ficon.poignee<>0 then
& ! & ! & ! & nbsp subtractrect(textrect,fbuttonrect,iconrect)
& nbsp & nbsp & nbsp else
& ! & ! & ! & nbsp textrect:=fbuttonrect
& nbsp & nbsp & nbsp si (ffocused et fpressed) ou fdown puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp drawedge(ButtonCanvas.Poignee,fbuttonrect,EDGE_SUNKEN,BF_SOFT ou BF_RECT)
& ! & ! & ! & ! & nbsp textrect.a gauche:=textrect.gauche 2
& ! & ! & ! & ! & nbsp textrect.Haut:=textrect.Top 1
& ! & ! & ! & ! & nbsp textrect.droit:=textrect.droit-1
& ! & ! & ! & ! & nbsp iconrect.a gauche:=iconrect.gauche 3
& ! & ! & ! & ! & nbsp iconrect.haut:=iconrect.haut de la page 2
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp si (non(fpressed) ou non(ffocused)) et pas(fdown)
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp drawedge(ButtonCanvas.Poignee,fbuttonrect,EDGE_RAISED,BF_SOFT ou BF_RECT)
& ! & ! & ! & ! & nbsp textrect.a gauche:=textrect.gauche 1
& ! & ! & ! & ! & nbsp textrect.droit:=textrect.droit-1
& ! & ! & ! & ! & nbsp iconrect.haut:=iconrect.top 1
& ! & ! & ! & ! & nbsp iconrect.a gauche:=iconrect.gauche 2
& nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp ButtonCanvas.La brosse.Style:=bsclear
& nbsp & nbsp & nbsp ButtonCanvas.La police.attribuer(ffont)
& nbsp & nbsp & nbsp si ficon.Poignee<>0 then
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & nbsp drawiconex(buttoncanvas.poignee,iconrect.gauche 1,iconrect.top 1,ficon.poignee,tmpwidth-5,fdefaultheight-8,0,0,DI_NORMAL)
& ! & ! & ! & ! & nbsp si la longueur(trim(fbuttoncaption))>0, alors
& ! & ! & ! & ! & ! & nbsp DrawTextEx(ButtonCanvas.Poignee,PChar(fButtonCaption),Longueur(fbuttoncaption),textrect,DT_LEFT ou DT_SINGLELINE ou DT_VCENTER ou DT_END_ELLIPSIS ou DT_PATH_ELLIPSIS ou DT_MODIFYSTRING,nil)
& ! & ! & ! & nbsp fin
& nbsp & nbsp & nbsp else
& ! & ! & ! & nbsp DrawText(ButtonCanvas.Poignee,PChar(fButtonCaption),Longueur(fbuttoncaption),textrect,DT_CENTER ou DT_SINGLELINE ou DT_VCENTER ou DT_END_ELLIPSIS ou DT_PATH_ELLIPSIS ou DT_MODIFYSTRING)
& nbsp & nbsp & nbsp ButtonCanvas.Gratuit
& nbsp & nbsp & nbsp si affecte(ppaint)
& ! & ! & ! & nbsp ppaint(expediteur)
& nbsp & nbsp fin
fin
procedure TTitleButton.parentresize(sender:tobject)
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp commencer
& nbsp & nbsp & nbsp si affecte(presize)
& ! & ! & ! & nbsp presize(expediteur)
& nbsp & nbsp & nbsp sortie
& nbsp & nbsp fin
& nbsp parentpaint(expediteur)
& nbsp si affecte(presize)
& nbsp & nbsp presize(auto)
fin

procedure TTitleButton.DisplaySettingChange(var message:tmessage)
begin
& nbsp fcallinheritedevent:=true
& nbsp si fvisible=false then
& nbsp & nbsp sortie
& nbsp fdefaultwidth:=GetSystemMetrics(SM_CXSIZE)
& nbsp si fwidth
& nbsp & nbsp fwidth:=fdefaultwidth
& nbsp fdefaultheight:=GetSystemMetrics(SM_CYSIZE)
& nbsp fborder3d:=GetSystemMetrics(SM_CYEDGE)
& nbsp fborderthickness:=GetSystemMetrics(SM_CYSIZEFRAME)
& nbsp parentpaint(fparent)
& nbsp msg.resultat:=0
fin
procedure TTitleButton.setbuttonwidth(awidth:entier)
begin
& nbsp si awidth>0, alors
& nbsp & nbsp fwidth:=awidth
& nbsp else
& nbsp & nbsp fwidth:=fdefaultwidth
& nbsp parentpaint(fparent)
fin
procedure TTitleButton.setbuttonleft(aleft:entier)
begin
& nbsp si (aleft
& nbsp & nbsp fleft:=aleft
& nbsp parentpaint(fparent)
fin
procedure TTitleButton.setbuttoncaption(acaption:string)
begin
& nbsp fbuttoncaption:=acaption
& nbsp parentpaint(fparent)
fin
procedure TTitleButton.setbuttonfont(afont:tfont)
begin
& nbsp ffont.attribuer(afont)
& nbsp parentpaint(fparent)
fin
procedure TTitleButton.seticon(aicon:ticon)
begin
& nbsp ficon.attribuer(aicon)
& nbsp parentpaint(fparent)
fin
procedure TTitleButton.setbuttonvisible(avisible:boolean)
begin
& nbsp fvisible:=avisible
& nbsp fparent.effectuer(WM_NCACTIVATE,integer(vrai),0)
fin

procedure TTitleButton.setdown(fbas:boolean)
var
& nbsp tmp:boolean
begin
& nbsp tmp:=fdown
& nbsp si csloading dans componentstate puis

Ajouter un bouton à la barre de légende de votre formulaire

Ajouter un bouton à la barre de légende de votre formulaire : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation