| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950 |
- unit RealICQFriendTreeView;
- interface
- uses
- RealICQHoverImage,
- RealICQUIColor, RealICQColors, RealICQClient, Messages, Forms, CommCtrl,
- SysUtils, Classes, Controls, ComCtrls, Graphics, Windows, ExtCtrls,
- RealICQContacterListView, SingleBorderHintWindow;
- type
- TLXUMCNoScrollBarTreeView = class;
- TLXUMCTreeViewScrollBar= class;
- TRealICQGroup = class;
- TRealICQFriend = class;
- TRealICQGroupListItems = class;
- TRealICQFriendListItems = class;
- TRealICQFriendTreeNodeNotifyEvent = procedure(Friend: TRealICQFriend) of object;
- TRealICQFriendTreeNodeIconButtonType = (itCamera, itTel, itMobile, itEmail, itSMS, itHeadImage);
- TRealICQFriendTreeNodeIconButtonEvent = procedure(Sender: TObject;
- Friend: TRealICQFriend; IconButtonType: TRealICQFriendTreeNodeIconButtonType) of object;
- TRealICQFriendTreeView = class(TPanel, IRealICQUIColor)
- private
- FNoScrollBarTreeView: TLXUMCNoScrollBarTreeView;
- FTreeViewScrollBar: TLXUMCTreeViewScrollBar;
- FBranchs: TStringList;
- FEmployees: TStringList;
- FBranchItems: TRealICQGroupListItems;
- FEmployeeItems: TRealICQFriendListItems;
- FTimer: TTimer;
- FHintWindow: TSingleBorderHintWindow;
- FTimerItemIndex: Integer;
-
- FOnSelectItemChanged: TRealICQFriendTreeNodeNotifyEvent;
- FOnItemClick: TRealICQFriendTreeNodeNotifyEvent;
- FOnItemDoubleClick: TRealICQFriendTreeNodeNotifyEvent;
- FOnItemMouseEnter: TRealICQFriendTreeNodeNotifyEvent;
- FOnItemMouseLeave: TRealICQFriendTreeNodeNotifyEvent;
- FOnItemFlashCaption: TRealICQFriendTreeNodeNotifyEvent;
- FOnItemOnline: TRealICQFriendTreeNodeNotifyEvent;
- FOnItemOffline: TRealICQFriendTreeNodeNotifyEvent;
- FOnItemIconButtonClick: TRealICQFriendTreeNodeIconButtonEvent;
- FOnItemIconButtonDblClick: TRealICQFriendTreeNodeIconButtonEvent;
- FOnItemMouseDown: TMouseEvent;
- FOnItemMouseUp: TMouseEvent;
- FAdjustPosition: Boolean;
- FShowLine: Boolean;
- FShowBranchImage: Boolean;
- FFlashCaptionOnOnline: Boolean;
- FOnlineNumeric: Cardinal;
- FStyle: TRealICQContacterListItemStyle;
- FCaptionStyle: TRealICQContacterListItemCaptionStyle;
- FSelectedItemBorderColor: TColor;
- FSelectedItemBorderInnerColor: TColor;
- FSelectedItemBackColor: TColor;
- FHeadImageBorderColor: TColor;
- FHeadImageBackColor: TColor;
- FSelectedItemBackgroud: TPicture;
- FBranchExpandedPicture: TPicture;
- FBranchCollapsedPicture: TPicture;
- FBranchClosedButtonPicture: TPicture;
- FBranchOpenedButtonPicture: TPicture;
- FDefaultPicture: TPicture;
- FDefaultPictureOffline: TPicture;
- FLeavePicture: TPicture;
- FCameraIcon :TIcon;
- FTelephoneIcon :TIcon;
- FMobilePhoneIcon :TIcon;
- FEmailIcon :TIcon;
- FSMSIcon :TIcon;
- FShowHeadImageButton: Boolean;
- FShowTelButton: Boolean;
- FShowMobileButton: Boolean;
- FShowCameraButton: Boolean;
- FShowEmailButton: Boolean;
- FShowSMSButton: Boolean;
- FIconBtnDefaultColor,
- FIconBtnLightColor,
- FIconBtnShadownColor: TColor;
- FScrollTopButtonPictureNormal: TPicture;
- FScrollTopButtonPictureHover: TPicture;
- FScrollTopButtonPictureDown: TPicture;
- FScrollBottomButtonPictureNormal: TPicture;
- FScrollBottomButtonPictureHover: TPicture;
- FScrollBottomButtonPictureDown: TPicture;
- FScrollBarButtonTopPictureNormal: TPicture;
- FScrollBarButtonTopPictureHover: TPicture;
- FScrollBarButtonTopPictureDown: TPicture;
- FScrollBarButtonMiddlePictureNormal: TPicture;
- FScrollBarButtonMiddlePictureHover: TPicture;
- FScrollBarButtonMiddlePictureDown: TPicture;
- FScrollBarButtonBottomPictureNormal: TPicture;
- FScrollBarButtonBottomPictureHover: TPicture;
- FScrollBarButtonBottomPictureDown: TPicture;
- FScrollBackgroundPictureNormal: TPicture;
- FScrollBackgroundPictureHover: TPicture;
- FScrollBackgroundPictureDown: TPicture;
- procedure SetScrollTopButtonPictureNormal(Value: TPicture);
- procedure SetScrollTopButtonPictureHover(Value: TPicture);
- procedure SetScrollTopButtonPictureDown(Value: TPicture);
- procedure SetScrollBottomButtonPictureNormal(Value: TPicture);
- procedure SetScrollBottomButtonPictureHover(Value: TPicture);
- procedure SetScrollBottomButtonPictureDown(Value: TPicture);
- procedure SetScrollBarButtonTopPictureNormal(Value: TPicture);
- procedure SetScrollBarButtonTopPictureHover(Value: TPicture);
- procedure SetScrollBarButtonTopPictureDown(Value: TPicture);
- procedure SetScrollBarButtonMiddlePictureNormal(Value: TPicture);
- procedure SetScrollBarButtonMiddlePictureHover(Value: TPicture);
- procedure SetScrollBarButtonMiddlePictureDown(Value: TPicture);
- procedure SetScrollBarButtonBottomPictureNormal(Value: TPicture);
- procedure SetScrollBarButtonBottomPictureHover(Value: TPicture);
- procedure SetScrollBarButtonBottomPictureDown(Value: TPicture);
- procedure SetScrollBackgroundPictureNormal(Value: TPicture);
- procedure SetScrollBackgroundPictureHover(Value: TPicture);
- procedure SetScrollBackgroundPictureDown(Value: TPicture);
- procedure SetCaptionStyle(Value: TRealICQContacterListItemCaptionStyle);
- procedure SetSelectedItemBorderColor(Value: TColor);
- procedure SetSelectedItemBorderInnerColor(Value: TColor);
- procedure SetSelectedItemBackColor(Value: TColor);
- procedure SetHeadImageBorderColor(Value: TColor);
- procedure SetHeadImageBackColor(Value: TColor);
- procedure SetSelectedItemBackgroud(Value: TPicture);
- procedure SetDefaultPicture(Value: TPicture);
- procedure SetDefaultPictureOffline(Value: TPicture);
- procedure SetLeavePicture(Value: TPicture);
-
- procedure SetCameraIcon(Value: TIcon);
- procedure SetTelephoneIcon(Value: TIcon);
- procedure SetMobilePhoneIcon(Value: TIcon);
- procedure SetEmailIcon(Value: TIcon);
- procedure SetSMSIcon(Value: TIcon);
- procedure SetBranchExpandedPicture(Value: TPicture);
- procedure SetBranchCollapsedPicture(Value: TPicture);
- procedure SetBranchClosedButtonPicture(Value: TPicture);
- procedure SetBranchOpenedButtonPicture(Value: TPicture);
- function GetScrollBarTop: Integer;
- procedure SetScrollBarTop(Value: Integer);
- function GetCount: Integer;
-
- procedure WhenResize(Sender: TObject);
- procedure TimerOnTimer(Sender: TObject);
- procedure ShowCustomHint(Node: TTreeNode);
-
- function GetCopyRight: String;
- protected
- procedure DoSelectItemChanged(Employee: TRealICQFriend);
- procedure DoItemClick(Employee: TRealICQFriend);
- procedure DoItemDoubleClick(Employee: TRealICQFriend);
- procedure DoItemMouseEnter(Employee: TRealICQFriend);
- procedure DoItemMouseLeave(Employee: TRealICQFriend);
- procedure DoItemFlashCaption(Employee: TRealICQFriend);
- procedure DoItemOnline(Employee: TRealICQFriend);
- procedure DoItemOffline(Employee: TRealICQFriend);
- procedure DoItemIconButtonClick(Employee: TRealICQFriend; IconButtonType: TRealICQFriendTreeNodeIconButtonType);
- procedure DoItemIconButtonDblClick(Employee: TRealICQFriend; IconButtonType: TRealICQFriendTreeNodeIconButtonType);
- public
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- procedure ChangeUIColor(AColor: TColor);
- procedure HideSystemScrollBar;
- function AddGroup(AGroup: TRealICQGroup):Integer;
- procedure AddFriend(AFriend: TRealICQFriend);
- function GetFriend(ALoginName: String): TRealICQFriend;
- function GetSelectedEmployee: TRealICQFriend;
- procedure ExpandGroup(GroupName:String);
- procedure BeginUpdate;
- procedure EndUpdate;
- procedure Clear;
- procedure ReDrawAll;
- procedure ReAlignBranchs;
- procedure MoveScrollBarToTop;
- procedure ExpandAllBranch(AExpanded: Boolean);
- procedure MoveFriendGroup(SoureGroup,TargetGroup:String);
- procedure DelFriendGroup(GroupName:String);
- property Count: Integer read GetCount;
- published
- property CopyRight: String read GetCopyRight;
- property ScrollBarTop: Integer read GetScrollBarTop write SetScrollBarTop;
- property BranchItems: TRealICQGroupListItems read FBranchItems;
- property EmployeeItems: TRealICQFriendListItems read FEmployeeItems;
- property Branchs:TStringList read FBranchs;
- property AdjustPosition: Boolean read FAdjustPosition write FAdjustPosition;
- property ShowLine: Boolean read FShowLine write FShowLine;
- property ShowBranchImage: Boolean read FShowBranchImage write FShowBranchImage;
- property FlashCaptionOnOnline: Boolean read FFlashCaptionOnOnline write FFlashCaptionOnOnline;
- property OnlineNumeric: Cardinal read FOnlineNumeric write FOnlineNumeric;
- property Style: TRealICQContacterListItemStyle read FStyle write FStyle;
- property CaptionStyle: TRealICQContacterListItemCaptionStyle read FCaptionStyle write SetCaptionStyle;
- property SelectedItemBorderInnerColor: TColor read FSelectedItemBorderInnerColor write SetSelectedItemBorderInnerColor;
- property SelectedItemBorderColor: TColor read FSelectedItemBorderColor write SetSelectedItemBorderColor;
- property SelectedItemBackColor: TColor read FSelectedItemBackColor write SetSelectedItemBackColor;
- property HeadImageBorderColor: TColor read FHeadImageBorderColor write SetHeadImageBorderColor;
- property HeadImageBackColor: TColor read FHeadImageBackColor write SetHeadImageBackColor;
- property SelectedItemBackgroud: TPicture read FSelectedItemBackgroud write SetSelectedItemBackgroud;
- property DefaultPicture: TPicture read FDefaultPicture write SetDefaultPicture;
- property DefaultPictureOffline: TPicture read FDefaultPictureOffline write SetDefaultPictureOffline;
- property LeavePicture: TPicture read FLeavePicture write SetLeavePicture;
- property CameraIcon :TIcon read FCameraIcon write SetCameraIcon;
- property TelephoneIcon :TIcon read FTelephoneIcon write SetTelephoneIcon;
- property MobilePhoneIcon :TIcon read FMobilePhoneIcon write SetMobilePhoneIcon;
- property EmailIcon :TIcon read FEmailIcon write SetEmailIcon;
- property SMSIcon :TIcon read FSMSIcon write SetSMSIcon;
- property ShowHeadImageButton: Boolean read FShowHeadImageButton write FShowHeadImageButton;
- property ShowTelButton: Boolean read FShowTelButton write FShowTelButton;
- property ShowMobileButton: Boolean read FShowMobileButton write FShowMobileButton;
- property ShowCameraButton: Boolean read FShowCameraButton write FShowCameraButton;
- property ShowEmailButton: Boolean read FShowEmailButton write FShowEmailButton;
- property ShowSMSButton: Boolean read FShowSMSButton write FShowSMSButton;
- property BranchExpandedPicture: TPicture read FBranchExpandedPicture write SetBranchExpandedPicture;
- property BranchCollapsedPicture: TPicture read FBranchCollapsedPicture write SetBranchCollapsedPicture;
- property BranchClosedButtonPicture: TPicture read FBranchClosedButtonPicture write SetBranchClosedButtonPicture;
- property BranchOpenedButtonPicture: TPicture read FBranchOpenedButtonPicture write SetBranchOpenedButtonPicture;
- property ScrollTopButtonPictureNormal: TPicture read FScrollTopButtonPictureNormal write SetScrollTopButtonPictureNormal;
- property ScrollTopButtonPictureHover: TPicture read FScrollTopButtonPictureHover write SetScrollTopButtonPictureHover;
- property ScrollTopButtonPictureDown: TPicture read FScrollTopButtonPictureDown write SetScrollTopButtonPictureDown;
- property ScrollBottomButtonPictureNormal: TPicture read FScrollBottomButtonPictureNormal write SetScrollBottomButtonPictureNormal;
- property ScrollBottomButtonPictureHover: TPicture read FScrollBottomButtonPictureHover write SetScrollBottomButtonPictureHover;
- property ScrollBottomButtonPictureDown: TPicture read FScrollBottomButtonPictureDown write SetScrollBottomButtonPictureDown;
- property ScrollBarButtonTopPictureNormal: TPicture read FScrollBarButtonTopPictureNormal write SetScrollBarButtonTopPictureNormal;
- property ScrollBarButtonTopPictureHover: TPicture read FScrollBarButtonTopPictureHover write SetScrollBarButtonTopPictureHover;
- property ScrollBarButtonTopPictureDown: TPicture read FScrollBarButtonTopPictureDown write SetScrollBarButtonTopPictureDown;
- property ScrollBarButtonMiddlePictureNormal: TPicture read FScrollBarButtonMiddlePictureNormal write SetScrollBarButtonMiddlePictureNormal;
- property ScrollBarButtonMiddlePictureHover: TPicture read FScrollBarButtonMiddlePictureHover write SetScrollBarButtonMiddlePictureHover;
- property ScrollBarButtonMiddlePictureDown: TPicture read FScrollBarButtonMiddlePictureDown write SetScrollBarButtonMiddlePictureDown;
- property ScrollBarButtonBottomPictureNormal: TPicture read FScrollBarButtonBottomPictureNormal write SetScrollBarButtonBottomPictureNormal;
- property ScrollBarButtonBottomPictureHover: TPicture read FScrollBarButtonBottomPictureHover write SetScrollBarButtonBottomPictureHover;
- property ScrollBarButtonBottomPictureDown: TPicture read FScrollBarButtonBottomPictureDown write SetScrollBarButtonBottomPictureDown;
- property ScrollBackgroundPictureNormal: TPicture read FScrollBackgroundPictureNormal write SetScrollBackgroundPictureNormal;
- property ScrollBackgroundPictureHover: TPicture read FScrollBackgroundPictureHover write SetScrollBackgroundPictureHover;
- property ScrollBackgroundPictureDown: TPicture read FScrollBackgroundPictureDown write SetScrollBackgroundPictureDown;
- property OnSelectItemChanged: TRealICQFriendTreeNodeNotifyEvent read FOnSelectItemChanged write FOnSelectItemChanged;
- property OnItemClick: TRealICQFriendTreeNodeNotifyEvent read FOnItemClick write FOnItemClick;
- property OnItemDoubleClick: TRealICQFriendTreeNodeNotifyEvent read FOnItemDoubleClick write FOnItemDoubleClick;
- property OnItemMouseEnter: TRealICQFriendTreeNodeNotifyEvent read FOnItemMouseEnter write FOnItemMouseEnter;
- property OnItemMouseLeave: TRealICQFriendTreeNodeNotifyEvent read FOnItemMouseLeave write FOnItemMouseLeave;
- property OnItemFlashCaption: TRealICQFriendTreeNodeNotifyEvent read FOnItemFlashCaption write FOnItemFlashCaption;
- property OnItemOnline: TRealICQFriendTreeNodeNotifyEvent read FOnItemOnline write FOnItemOnline;
- property OnItemOffline: TRealICQFriendTreeNodeNotifyEvent read FOnItemOffline write FOnItemOffline;
- property OnItemIconButtonClick: TRealICQFriendTreeNodeIconButtonEvent read FOnItemIconButtonClick write FOnItemIconButtonClick;
- property OnItemIconButtonDblClick: TRealICQFriendTreeNodeIconButtonEvent read FOnItemIconButtonDblClick write FOnItemIconButtonDblClick;
- property OnItemMouseDown: TMouseEvent read FOnItemMouseDown write FOnItemMouseDown;
- property OnItemMouseUp: TMouseEvent read FOnItemMouseUp write FOnItemMouseUp;
- end;
- TLXUMCTreeViewScrollBar = class(TCustomPanel)
- private
- FContacterTreeView: TRealICQFriendTreeView;
- //ListBox的可滚动的高度
- FClientRange: Integer;
- //滚动条可移动的高度
- FScrollRange: Integer;
-
- FTrackingBarTopRange: Integer;
- FAssignedPicture: Boolean;
- FButtonDown: Boolean;
- FTrackingBarDown: Boolean;
- FTrackingBarDonwY: Integer;
- FMovedYValue: Integer;
- FTopButtonImage: TRealICQHoverImage;
- FBottomButtonImage: TRealICQHoverImage;
- FBarButtonTopImage: TRealICQHoverImage;
- FBarButtonMiddleImage: TRealICQHoverImage;
- FBarButtonBottomImage: TRealICQHoverImage;
- FBackgroundImage: TRealICQHoverImage;
- FDrawing: Boolean;
-
- procedure DrawScrollBar;
- procedure TreeViewChange(Sender: TObject; Node: TTreeNode);
- procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
- procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
- procedure TreeViewResize(Sender: TObject);
- procedure TreeViewMouseWheelUp(Sender: TObject;
- Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
- procedure TreeViewMouseWheelDown(Sender: TObject;
- Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
- procedure TopButtonImageMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure TopButtonImageMouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure TopButtonImageMouseEnter(Sender: TObject);
- procedure TopButtonImageMouseLeave(Sender: TObject);
- procedure BottomButtonImageMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure BottomButtonImageMouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure BottomButtonImageMouseEnter(Sender: TObject);
- procedure BottomButtonImageMouseLeave(Sender: TObject);
- procedure BarButtonImageMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure BarButtonImageMouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure BarButtonImageMouseEnter(Sender: TObject);
- procedure BarButtonImageMouseLeave(Sender: TObject);
- procedure BarButtonImageMouseMove(Sender: TObject;
- Shift: TShiftState; X, Y: Integer);
-
- procedure BackgroundImageMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure BackgroundImageMouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure BackgroundImageMouseEnter(Sender: TObject);
- procedure BackgroundImageMouseLeave(Sender: TObject);
- protected
- public
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- published
- end;
- TLXUMCNoScrollBarTreeView = class(TCustomTreeView)
- private
- FContacterTreeView: TRealICQFriendTreeView;
- FItemHeight: Integer;
- FBufferedBitmap: Graphics.TBitMap;
- FMouseInDown: Boolean;
- procedure DrawContacterItem(ACanvas: TCanvas; Node: TTreeNode; Rect: TRect; State: TCustomDrawState);
- procedure DrawButton(ACanvas: TCanvas; ARect: TRect; Node: TTreeNode);
- procedure DrawImage(ACanvas: TCanvas; NodeRect: TRect; Node: TTreeNode);
- function GetExpandedItemCount: Integer;
- procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
- Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
- procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure TreeViewMouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure TreeViewDblClick(Sender: TObject);
- procedure TreeViewMouseLeave(Sender: TObject);
- procedure TreeViewMouseMove(Sender: TObject; Shift: TShiftState; X,
- Y: Integer);
- protected
- procedure WMEraseBKGND(var Message: TWMEraseBKGND); message WM_ERASEBKGND;
- public
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- published
- property ItemHeight: Integer read FItemHeight;
- property ExpandedItemCount: Integer read GetExpandedItemCount;
- end;
- TRealICQGroupListItems = class(TStrings)
- private
- FContacterTreeView: TRealICQFriendTreeView;
- protected
- function GetObject(Index: Integer): TObject; override;
- procedure Put(Index: Integer; const S: string); override;
- function Get(Index: Integer): string; override;
- function GetCount: Integer; override;
- public
- constructor Create(AContacterTreeView: TRealICQFriendTreeView);
- destructor Destroy; override;
- function Add(const S: string): Integer; override;
- function AddObject(const S: string; AObject: TObject): Integer; override;
- procedure Insert(Index: Integer; const S: string); override;
- procedure Clear; override;
- procedure Delete(Index: Integer); override;
- function IndexOf(const S: string): Integer; override;
- procedure Move(CurIndex, NewIndex: Integer); override;
- end;
- TRealICQFriendListItems = class(TStrings)
- private
- FContacterTreeView: TRealICQFriendTreeView;
- protected
- function GetObject(Index: Integer): TObject; override;
- procedure Put(Index: Integer; const S: string); override;
- function Get(Index: Integer): string; override;
- function GetCount: Integer; override;
- public
- constructor Create(AContacterTreeView: TRealICQFriendTreeView);
- destructor Destroy; override;
- function Add(const S: string): Integer; override;
- function AddObject(const S: string; AObject: TObject): Integer; override;
- procedure Insert(Index: Integer; const S: string); override;
- procedure Clear; override;
- procedure Delete(Index: Integer); override;
- function IndexOf(const S: string): Integer; override;
- procedure Move(CurIndex, NewIndex: Integer); override;
- end;
- TRealICQGroup = class
- private
- FContacterTreeView: TRealICQFriendTreeView;
- FGroupName: String;
- FGroupID: String;
- FParentID: String;
- FDefaultGroup:Boolean;
- FNode: TTreeNode;
- FOnlineEmployee,
- FEmployeeCount: Cardinal;
- protected
- public
- constructor Create(ABranchName: String);
- destructor Destroy; override;
- procedure Update;
- property DefaultGroup:Boolean read FDefaultGroup write FDefaultGroup;
- property GroupName: String read FGroupName write FGroupName;
- property GroupID: String read FGroupID write FGroupID;
- property Node: TTreeNode read FNode write FNode;
- property ParentID: String read FParentID write FParentID;
- end;
- TRealICQFriend = class
- private
- FContacterTreeView: TRealICQFriendTreeView;
- FLoginName: String;
- FBranchID: String;
- FDisplayName: String;
- FWatchword: String;
- FLoginState: TRealICQLoginState;
- FLeaveMessage: String;
- FHeadImagePicture: TPicture;
- FNode: TTreeNode;
- FMobile:String;
- FTel:String;
- FAdjustPositioned: Boolean;
- FFlashCaptionThread: TThread;
- FFlashImageThread: TThread;
- FMouseInRect: Boolean;
- FMouseInTextRect: Boolean;
-
- FCaptionColor: TColor;
- FHeadImagePosition: Integer;
- FFlashStyle: TRealICQFlashStyle;
-
- FHasCamera: Boolean;
- FHasTelephone: Boolean;
- FHasMobilePhone: Boolean;
- FHasEmail: Boolean;
- FHasSMS: Boolean;
- FHeadImageRect: TRect;
- FCameraRect: TRect;
- FTelephoneRect: TRect;
- FMobilePhoneRect: TRect;
- FEmailRect: TRect;
- FSMSRect: TRect;
- FTextRect: TRect;
- FMouseInHeadImageRect: Boolean;
- FMouseInCameraRect: Boolean;
- FMouseInTelephoneRect: Boolean;
- FMouseInMobilePhoneRect: Boolean;
- FMouseInEmailRect: Boolean;
- FMouseInSMSRect: Boolean;
- FHeadImageHint,
- FCameraHint,
- FTelephoneHint,
- FMobilePhoneHint,
- FEmailHint,
- FSMSHint: String;
- procedure AdjustPosition;
- function GetStatePosition(ALoginState: TRealICQLoginState): Integer;
- procedure SetLoginState(Value: TRealICQLoginState);
- protected
- public
- Data: Pointer;
- constructor Create(ALoginName: String);
- destructor Destroy; override;
-
- procedure Update;
- procedure Flash(AStyle: TRealICQFlashStyle);
- procedure StopFlash;
- property LoginName: String read FLoginName;
- property BranchID: String read FBranchID write FBranchID;
- property DisplayName: String read FDisplayName write FDisplayName;
- property Watchword: String read FWatchword write FWatchword;
- property LoginState: TRealICQLoginState read FLoginState write SetLoginState;
- property LeaveMessage: String read FLeaveMessage write FLeaveMessage;
- property HeadImagePicture: TPicture read FHeadImagePicture write FHeadImagePicture;
- property Node: TTreeNode read FNode write FNode;
- property Mobile:String read FMobile write FMobile;
- property Tel:String read FTel write FTel;
- property HasCamera: Boolean read FHasCamera write FHasCamera;
- property HasTelephone: Boolean read FHasTelephone write FHasTelephone;
- property HasMobilePhone: Boolean read FHasMobilePhone write FHasMobilePhone;
- property HasEmail: Boolean read FHasEmail write FHasEmail;
- property HasSMS: Boolean read FHasSMS write FHasSMS;
-
- property HeadImageHint: String read FHeadImageHint write FHeadImageHint;
- property CameraHint: String read FCameraHint write FCameraHint;
- property TelephoneHint: String read FTelephoneHint write FTelephoneHint;
- property MobilePhoneHint: String read FMobilePhoneHint write FMobilePhoneHint;
- property EmailHint: String read FEmailHint write FEmailHint;
- property SMSHint: String read FSMSHint write FSMSHint;
- end;
- TRealICQFlashCaption = class(TThread)
- private
- FEmployee: TRealICQFriend;
- FColorIndex:Integer;
- procedure FlashCaptionColor;
- protected
- procedure Execute; override;
- public
- constructor Create(AEmployee: TRealICQFriend);
- destructor Destroy;override;
- end;
-
- TRealICQFlashImage = class(TThread)
- private
- FEmployee: TRealICQFriend;
- FPosition: Integer;
- procedure FlashImagePosition;
- protected
- procedure Execute; override;
- public
- constructor Create(AEmployee: TRealICQFriend);
- destructor Destroy;override;
- end;
- procedure Register;
- implementation
- //------------------------------------------------------------------------------
- function TRealICQFriendTreeView.GetCopyRight: String;
- begin
- Result := '';
- end;
- //------------------------------------------------------------------------------
- procedure SetComCtlStyle(Ctl: TWinControl; Value: Integer; UseStyle: Boolean);
- var
- Style: Integer;
- begin
- if Ctl.HandleAllocated then
- begin
- Style := GetWindowLong(Ctl.Handle, GWL_STYLE);
- if not UseStyle then Style := Style and not Value
- else Style := Style or Value;
- SetWindowLong(Ctl.Handle, GWL_STYLE, Style);
- end;
- end;
- {TRealICQFriend}
- //------------------------------------------------------------------------------
- procedure TRealICQFriend.Flash(AStyle: TRealICQFlashStyle);
- begin
- FFlashStyle := AStyle;
- if FFlashImageThread = nil then
- begin
- FFlashImageThread := TRealICQFlashImage.Create(Self);
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriend.StopFlash;
- var
- iWaitTimes: Integer;
- begin
- if FFlashImageThread <> nil then
- begin
- FFlashImageThread.Terminate;
- iWaitTimes := 0;
- while FFlashImageThread <> nil do
- begin
- Inc(iWaitTimes);
- if iWaitTimes > 5000 then Exit;
-
- Sleep(10);
- Application.ProcessMessages;
- end;
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriend.Update;
- var
- Rect: TRect;
- begin
- Rect := Node.DisplayRect(False);
- InvalidateRect(Node.TreeView.Handle, @Rect, False);
- AdjustPosition;
- FContacterTreeView.FTreeViewScrollBar.DrawScrollBar;
- end;
- //------------------------------------------------------------------------------
- function TRealICQFriend.GetStatePosition(ALoginState: TRealICQLoginState): Integer;
- begin
- Result := 0;
- case ALoginState of
- stOnline: Result := 3;
- stLeave: Result := 2;
- stOffline,stHidden: Result := 1;
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriend.AdjustPosition;
- var
- RealICQEmployee: TRealICQFriend;
- CurrentItemStatePosition,
- LoopItemStatePosition: Integer;
- CurrentItemString,
- LoopItemString: String;
- ParentNode,
- SiblingNode: TTreeNode;
- begin
- FAdjustPositioned := True;
- if not FContacterTreeView.FAdjustPosition then Exit;
- CurrentItemStatePosition := GetStatePosition(FLoginState);
- if Length(Trim(FDisplayName)) = 0 then
- CurrentItemString := Chr(255) + FLoginName //如果没有呢称,则排到最后面
- else
- CurrentItemString := FDisplayName;
- ParentNode := FNode.Parent;
- if ParentNode = nil then Exit;
- SiblingNode := ParentNode.getFirstChild;
- while (SiblingNode <> nil) do
- begin
- if (SiblingNode = FNode) or (SiblingNode.StateIndex <> FNode.StateIndex) then
- begin
- SiblingNode := SiblingNode.getNextSibling;
- continue;
- end;
-
- if SiblingNode.Level <> FNode.Level then Break;
- RealICQEmployee := SiblingNode.Data;
-
- if Length(Trim(RealICQEmployee.FDisplayName)) = 0 then
- LoopItemString := Chr(255) + RealICQEmployee.FLoginName //如果没有呢称,则排到最后面
- else
- LoopItemString := RealICQEmployee.FDisplayName;
- LoopItemStatePosition := GetStatePosition(RealICQEmployee.FLoginState);
- if CurrentItemStatePosition < LoopItemStatePosition then
- begin
- if (SiblingNode.getNextSibling = nil) or (SiblingNode.getNextSibling.Level <> FNode.Level) then
- begin
- FNode.MoveTo(SiblingNode, naAdd);
- break;
- end
- else
- begin
- SiblingNode := SiblingNode.getNextSibling;
- continue;
- end;
- end
- else if LoopItemStatePosition = CurrentItemStatePosition then
- begin
- if AnsiCompareStr(CurrentItemString , LoopItemString) < 0 then
- begin
- FNode.MoveTo(SiblingNode, naInsert);
- Break;
- end;
- if (SiblingNode.getNextSibling = nil) or (SiblingNode.getNextSibling.Level <> FNode.Level) then
- begin
- FNode.MoveTo(SiblingNode, naAdd);
- Break;
- end;
- end
- else if CurrentItemStatePosition > LoopItemStatePosition then
- begin
- FNode.MoveTo(SiblingNode, naInsert);
- Break;
- end;
- SiblingNode := SiblingNode.getNextSibling;
- end;
- end;
- //------------------------------------------------------------------------------
- constructor TRealICQFriend.Create(ALoginName: String);
- begin
- FLoginName := ALoginName;
- FDisplayName := '';
- FWatchword := '';
- FHasCamera := False;
- FLoginState := stOffline;
- FHeadImagePicture := TPicture.Create;
-
- FAdjustPositioned := False;
- FCaptionColor := $00FFFFFF;
- FHeadImagePosition := 0;
- FMouseInRect := False;
- FMouseInHeadImageRect := False;
- FMouseInCameraRect := False;
- FMouseInTelephoneRect := False;
- FMouseInMobilePhoneRect := False;
- FMouseInEmailRect := False;
- FMouseInSMSRect := False;
-
- FHeadImageHint := '';
- FCameraHint := '';
- FTelephoneHint := '';
- FMobilePhoneHint := '';
- FEmailHint := '';
- FSMSHint := '';
-
- FHeadImageRect.Left := 0;
- FHeadImageRect.Top := 0;
- FHeadImageRect.Right := 0;
- FHeadImageRect.Bottom := 0;
- FCameraRect.Left := 0;
- FCameraRect.Top := 0;
- FCameraRect.Right := 0;
- FCameraRect.Bottom := 0;
-
- FTelephoneRect.Left := 0;
- FTelephoneRect.Top := 0;
- FTelephoneRect.Right := 0;
- FTelephoneRect.Bottom := 0;
- FMobilePhoneRect.Left := 0;
- FMobilePhoneRect.Top := 0;
- FMobilePhoneRect.Right := 0;
- FMobilePhoneRect.Bottom := 0;
- FEmailRect.Left := 0;
- FEmailRect.Top := 0;
- FEmailRect.Right := 0;
- FEmailRect.Bottom := 0;
- FSMSRect.Left := 0;
- FSMSRect.Top := 0;
- FSMSRect.Right := 0;
- FSMSRect.Bottom := 0;
- end;
- //------------------------------------------------------------------------------
- destructor TRealICQFriend.Destroy;
- var
- iWaitTimes: Integer;
- ParentNode: TTreeNode;
- TmpBranch: TRealICQGroup;
- begin
- try
- if FFlashCaptionThread <> nil then
- begin
- FFlashCaptionThread.Terminate;
- iWaitTimes := 0;
- while FFlashCaptionThread <> nil do
- begin
- Sleep(100);
- Application.ProcessMessages;
- Inc(iWaitTimes);
- if iWaitTimes > 100 then break; //最多等待10s时间
- end;
- end;
- if FFlashImageThread <> nil then
- begin
- FFlashImageThread.Terminate;
- iWaitTimes := 0;
- while FFlashImageThread <> nil do
- begin
- Sleep(100);
- Application.ProcessMessages;
- Inc(iWaitTimes);
- if iWaitTimes > 100 then break; //最多等待10s时间
- end;
- end;
- //调整在线人数的值
- if (FLoginState <> stOffline) and (FLoginState <> stHidden) then
- begin
- Dec(FContacterTreeView.FOnlineNumeric);
-
- ParentNode := FNode.Parent;
- while ParentNode <> nil do
- begin
- TmpBranch := ParentNode.Data;
- Dec(TmpBranch.FOnlineEmployee, 1);
- TmpBranch.Update;
- ParentNode := ParentNode.Parent;
- end;
- end;
- //调整节点成员数值
- ParentNode := FNode.Parent;
- while ParentNode <> nil do
- begin
- TmpBranch := ParentNode.Data;
- Dec(TmpBranch.FEmployeeCount, 1);
- TmpBranch.Update;
- ParentNode := ParentNode.Parent;
- end;
- FreeAndNil(FHeadImagePicture);
- FreeAndNil(FNode);
- finally
- inherited Destroy;
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriend.SetLoginState(Value: TRealICQLoginState);
- var
- OldLoginState: TRealICQLoginState;
- iWaitTimes: Integer;
- ParentNode: TTreeNode;
- TmpBranch: TRealICQGroup;
- begin
- if (FLoginState = Value) and FAdjustPositioned then Exit;
- OldLoginState := FLoginState;
- FLoginState := Value;
- //调整在线人数的值
- if ((Value <> stOffline) and (Value <> stHidden)) and
- ((OldLoginState = stOffline) or (OldLoginState = stHidden)) then
- begin
- Inc(FContacterTreeView.FOnlineNumeric);
- FContacterTreeView.DoItemOnline(Self);
- ParentNode := FNode.Parent;
- while ParentNode <> nil do
- begin
- TmpBranch := ParentNode.Data;
- Inc(TmpBranch.FOnlineEmployee, 1);
- TmpBranch.Update;
- ParentNode := ParentNode.Parent;
- end;
- end;
- //调整在线人数的值
- if ((Value = stOffline) or (Value = stHidden)) and
- ((OldLoginState <> stOffline) and (OldLoginState <> stHidden)) then
- begin
- Dec(FContacterTreeView.FOnlineNumeric);
- FContacterTreeView.DoItemOffline(Self);
-
- ParentNode := FNode.Parent;
- while ParentNode <> nil do
- begin
- TmpBranch := ParentNode.Data;
- Dec(TmpBranch.FOnlineEmployee, 1);
- TmpBranch.Update;
- ParentNode := ParentNode.Parent;
- end;
- end;
- AdjustPosition;
- if (FLoginState <> stOnline) and (FFlashCaptionThread <> nil) then
- begin
- FFlashCaptionThread.Terminate;
- iWaitTimes := 0;
- while FFlashCaptionThread <> nil do
- begin
- Sleep(100);
- Application.ProcessMessages;
- Inc(iWaitTimes);
- if iWaitTimes > 100 then break; //最多等待连接线程结束10s时间
- end;
- end;
-
- if (FLoginState = stOnline) and (FContacterTreeView.FFlashCaptionOnOnline) then
- begin
- if FFlashCaptionThread = nil then FFlashCaptionThread := TRealICQFlashCaption.Create(Self);
- FContacterTreeView.DoItemFlashCaption(Self);
- end;
- end;
- {TRealICQGroup}
- //------------------------------------------------------------------------------
- constructor TRealICQGroup.Create(ABranchName: String);
- begin
- FGroupName := ABranchName;
- FOnlineEmployee := 0;
- FEmployeeCount := 0;
- end;
- //------------------------------------------------------------------------------
- destructor TRealICQGroup.Destroy;
- begin
- try
- finally
- inherited Destroy;
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQGroup.Update;
- var
- Rect: TRect;
- begin
- Rect := Node.DisplayRect(False);
- InvalidateRect(Node.TreeView.Handle, @Rect, False);
- end;
- {TRealICQFriendTreeView}
- {$region 'TRealICQFriendTreeView'}
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetCaptionStyle(Value: TRealICQContacterListItemCaptionStyle);
- begin
- FCaptionStyle := Value;
- FNoScrollBarTreeView.Width := FNoScrollBarTreeView.Width - 1;
- FNoScrollBarTreeView.Width := FNoScrollBarTreeView.Width + 1;
- FNoScrollBarTreeView.Invalidate;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetSelectedItemBorderInnerColor(Value: TColor);
- begin
- if FSelectedItemBorderInnerColor = Value then Exit;
- FSelectedItemBorderInnerColor := Value;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetSelectedItemBorderColor(Value: TColor);
- begin
- if FSelectedItemBorderColor = Value then Exit;
- FSelectedItemBorderColor := Value;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetSelectedItemBackColor(Value: TColor);
- begin
- if FSelectedItemBackColor = Value then Exit;
- FSelectedItemBackColor := Value;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetHeadImageBorderColor(Value: TColor);
- begin
- if FHeadImageBorderColor = Value then Exit;
- FHeadImageBorderColor := Value;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetHeadImageBackColor(Value: TColor);
- begin
- if FHeadImageBackColor = Value then Exit;
- FHeadImageBackColor := Value;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetSelectedItemBackgroud(Value: TPicture);
- begin
- FSelectedItemBackgroud.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetDefaultPicture(Value: TPicture);
- begin
- FDefaultPicture.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetDefaultPictureOffline(Value: TPicture);
- begin
- FDefaultPictureOffline.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetLeavePicture(Value: TPicture);
- begin
- FLeavePicture.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetCameraIcon(Value: TIcon);
- begin
- FCameraIcon.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetTelephoneIcon(Value: TIcon);
- begin
- FTelephoneIcon.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetMobilePhoneIcon(Value: TIcon);
- begin
- FMobilePhoneIcon.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetEmailIcon(Value: TIcon);
- begin
- FEmailIcon.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetSMSIcon(Value: TIcon);
- begin
- FSMSIcon.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetBranchExpandedPicture(Value: TPicture);
- begin
- FBranchExpandedPicture.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetBranchCollapsedPicture(Value: TPicture);
- begin
- FBranchCollapsedPicture.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetBranchClosedButtonPicture(Value: TPicture);
- begin
- FBranchClosedButtonPicture.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetBranchOpenedButtonPicture(Value: TPicture);
- begin
- FBranchOpenedButtonPicture.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- function TRealICQFriendTreeView.AddGroup(AGroup: TRealICQGroup):Integer;
- begin
- Result:=FBranchItems.AddObject(AGroup.GroupId, AGroup);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.AddFriend(AFriend: TRealICQFriend);
- begin
- FEmployeeItems.AddObject(AFriend.FLoginName, AFriend);
- end;
- //------------------------------------------------------------------------------
- function TRealICQFriendTreeView.GetSelectedEmployee: TRealICQFriend;
- begin
- Result := nil;
- if FNoScrollBarTreeView.Selected = nil then Exit;
- if FNoScrollBarTreeView.Selected.StateIndex = 0 then Exit;
-
- Result := FNoScrollBarTreeView.Selected.Data;
- end;
- //------------------------------------------------------------------------------
- function TRealICQFriendTreeView.GetFriend(ALoginName: String): TRealICQFriend;
- var
- iIndex: Integer;
- begin
- iIndex := FEmployeeItems.IndexOf(ALoginName);
- if iIndex = -1 then
- Result := nil
- else
- Result := FEmployeeItems.Objects[iIndex] as TRealICQFriend;
- end;
- //------------------------------------------------------------------------------
- function TRealICQFriendTreeView.GetCount: Integer;
- var
- Node: TTreeNode;
- begin
- Result := 0;
-
- Node := FNoScrollBarTreeView.Items.GetFirstNode;
- while Node <> nil do
- begin
- if Node.StateIndex = 1 then Inc(Result, 1);
- Node := Node.GetNext;
- end;
- end;
- procedure TRealICQFriendTreeView.DelFriendGroup(GroupName:String);
- var Node: TTreeNode;
- begin
- Node := FNoScrollBarTreeView.Items.GetFirstNode;
- while Node <> nil do
- begin
- if (Node.StateIndex=0) and (Node.Text=GroupName) then
- begin
- Node.Delete;
- end;
- Node := Node.GetNext;
- end;
- end;
- //---------------移动组节点------------------------
- procedure TRealICQFriendTreeView.MoveFriendGroup(SoureGroup,TargetGroup:String);
- var
- SoureNode,TargetNode,Node: TTreeNode;
- Group:TRealICQGroup;
- iLoop:Integer;
- begin
- Node := FNoScrollBarTreeView.Items.GetFirstNode;
- while Node <> nil do
- begin
- if (Node.StateIndex=0) and (Node.Text=SoureGroup) then
- begin
- SoureNode:=Node;
- end;
- if (Node.StateIndex=0) and (Node.Text=TargetGroup) then
- begin
- TargetNode:=Node;
- end;
- Node := Node.GetNext;
- end;
- SoureNode.MoveTo(TargetNode,naAdd);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.TimerOnTimer(Sender: TObject);
- var
- P: TPoint;
- Node: TTreeNode;
- begin
- FTimer.Enabled := False;
-
- P := FNoScrollBarTreeView.ScreenToClient(Mouse.CursorPos);
- Node := FNoScrollBarTreeView.GetNodeAt(P.X, P.Y);
- if Node = nil then Exit;
- if FTimerItemIndex <> Node.Index then Exit;
- ShowCustomHint(Node);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.ShowCustomHint(Node: TTreeNode);
- var
- P: TPoint;
- Rect: TRect;
- Employee: TRealICQFriend;
- HintStr: String;
- TextWidth,
- TextHeight: Integer;
- begin
- if not ShowHint then Exit;
- HintStr := '';
- Employee := Node.Data;
- if Employee.FMouseInTextRect then
- begin
- HintStr := Employee.LoginName;
- if Employee.FLoginState = stLeave then
- HintStr := HintStr + '(' + Employee.FLeaveMessage + ')'
- else
- HintStr := HintStr + '(' + StateValues[Integer(Employee.FLoginState) mod 3] + ')';
- TextWidth := FHintWindow.Canvas.TextWidth(HintStr);
- if TextWidth < FHintWindow.Canvas.TextWidth(Employee.DisplayName) then
- TextWidth := FHintWindow.Canvas.TextWidth(Employee.DisplayName);
- if TextWidth < FHintWindow.Canvas.TextWidth(Employee.Watchword) then
- TextWidth := FHintWindow.Canvas.TextWidth(Employee.Watchword);
- TextHeight := FHintWindow.Canvas.TextHeight(Employee.LoginName);
- if Length(Trim(Employee.DisplayName)) > 0 then
- begin
- TextHeight := TextHeight + FHintWindow.Canvas.TextHeight(Employee.DisplayName);
- HintStr := HintStr + #$D#$A + Employee.DisplayName;
- end;
-
- if Length(Trim(Employee.Watchword)) > 0 then
- begin
- TextHeight := TextHeight + FHintWindow.Canvas.TextHeight(Employee.Watchword);
- HintStr := HintStr + #$D#$A + Employee.Watchword;
- end;
- end
- else
- begin
- if Employee.FMouseInHeadImageRect then HintStr := Employee.FHeadImageHint;
- if Employee.FMouseInCameraRect then HintStr := Employee.FCameraHint;
- if Employee.FMouseInTelephoneRect then HintStr := Employee.FTelephoneHint;
- if Employee.FMouseInMobilePhoneRect then HintStr := Employee.FMobilePhoneHint;
- if Employee.FMouseInEmailRect then HintStr := Employee.FEmailHint;
- if Employee.FMouseInSMSRect then HintStr := Employee.FSMSHint;
-
- TextWidth := FHintWindow.Canvas.TextWidth(HintStr);
- TextHeight := FHintWindow.Canvas.TextHeight(HintStr);
- end;
-
- if Length(Trim(HintStr)) = 0 then Exit;
-
- P.X := 0;
- P.Y := 0;
- P := FNoScrollBarTreeView.ClientToScreen(P);
- Rect.Left := Mouse.CursorPos.X + 20;
- Rect.Top := Node.DisplayRect(True).Top + FNoScrollBarTreeView.FItemHeight + P.Y + 10;
- Rect.Right := Rect.Left + TextWidth + 10;
- Rect.Bottom := Rect.Top + TextHeight + 5;
- FHintWindow.Color := clInfoBk;
- FHintWindow.ActivateHint(Rect, HintStr);
- FHintWindow.Visible := True;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.WhenResize(Sender: TObject);
- begin
- FTreeViewScrollBar.TreeViewResize(FNoScrollBarTreeView);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.BeginUpdate;
- begin
- Parent.DisableAlign;
- FNoScrollBarTreeView.Items.BeginUpdate;
- FNoScrollBarTreeView.DisableAlign;
- FNoScrollBarTreeView.Enabled := False;
- FNoScrollBarTreeView.OnCustomDrawItem := nil;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.EndUpdate;
- begin
- FNoScrollBarTreeView.OnCustomDrawItem := FNoScrollBarTreeView.TreeViewCustomDrawItem;
- FNoScrollBarTreeView.Enabled := True;
- FNoScrollBarTreeView.EnableAlign;
- FNoScrollBarTreeView.Items.EndUpdate;
- Parent.EnableAlign;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.Clear;
- begin
- FEmployeeItems.Clear;
- FBranchItems.Clear;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.HideSystemScrollBar;
- begin
- SetComCtlStyle(FNoScrollBarTreeView, TVS_NOSCROLL, True);
- ShowScrollbar(FNoScrollBarTreeView.Handle, SB_BOTH, False);
- FNoScrollBarTreeView.Font.Name := '宋体';
- FNoScrollBarTreeView.Font.Size := 10;
- FNoScrollBarTreeView.FItemHeight := 22;
- TreeView_SetItemHeight(FNoScrollBarTreeView.Handle, FNoScrollBarTreeView.FItemHeight);
- FTreeViewScrollBar.FDrawing := False;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.MoveScrollBarToTop;
- begin
- ScrollBarTop := 0;
- end;
- //---展开指定的单个节点-------------------------------
- procedure TRealICQFriendTreeView.ExpandGroup(GroupName:String);
- begin
- //
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.ExpandAllBranch(AExpanded: Boolean);
- var
- iLoop: Integer;
- Branch: TRealICQGroup;
- begin
- for iLoop := 0 to FBranchItems.Count - 1 do
- begin
- Branch := FBranchItems.Objects[iLoop] as TRealICQGroup;
- Branch.Node.Expanded := AExpanded;
- end;
- end;
- //------------------------------------------------------------------------------
- function TRealICQFriendTreeView.GetScrollBarTop: Integer;
- begin
- Result := FNoScrollBarTreeView.Top;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetScrollBarTop(Value: Integer);
- begin
- FNoScrollBarTreeView.Top := Value;
- FTreeViewScrollBar.DrawScrollBar;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.ReAlignBranchs;
- var
- TmpFriend: TRealICQFriend;
- TmpGroup:TRealICQGroup;
- iLoop, jLoop: Integer;
- begin
- with FEmployees do
- begin
- for iLoop := 0 to Count - 1 do
- begin
- TmpFriend := TRealICQFriend(Objects[iLoop]);
- for jLoop := 0 to FBranchs.Count - 1 do {添加至父部门}
- begin
- TmpGroup:= TRealICQGroup(FBranchs.Objects[jLoop]);
- if AnsiSameText(TmpGroup.GroupID, TmpFriend.BranchID) then
- begin
- TmpFriend.Node.MoveTo(TmpGroup.Node, naAddChild);
- TmpGroup.Node.Expanded:=False;
- Break;
- end;
- end;
- end;
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.ReDrawAll;
- begin
- FNoScrollBarTreeView.Repaint;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetScrollTopButtonPictureNormal(Value: TPicture);
- begin
- FScrollTopButtonPictureNormal.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetScrollTopButtonPictureHover(Value: TPicture);
- begin
- FScrollTopButtonPictureHover.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetScrollTopButtonPictureDown(Value: TPicture);
- begin
- FScrollTopButtonPictureDown.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetScrollBottomButtonPictureNormal(Value: TPicture);
- begin
- FScrollBottomButtonPictureNormal.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetScrollBottomButtonPictureHover(Value: TPicture);
- begin
- FScrollBottomButtonPictureHover.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetScrollBottomButtonPictureDown(Value: TPicture);
- begin
- FScrollBottomButtonPictureDown.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetScrollBarButtonTopPictureNormal(Value: TPicture);
- begin
- FScrollBarButtonTopPictureNormal.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetScrollBarButtonTopPictureHover(Value: TPicture);
- begin
- FScrollBarButtonTopPictureHover.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetScrollBarButtonTopPictureDown(Value: TPicture);
- begin
- FScrollBarButtonTopPictureDown.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetScrollBarButtonMiddlePictureNormal(Value: TPicture);
- begin
- FScrollBarButtonMiddlePictureNormal.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetScrollBarButtonMiddlePictureHover(Value: TPicture);
- begin
- FScrollBarButtonMiddlePictureHover.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetScrollBarButtonMiddlePictureDown(Value: TPicture);
- begin
- FScrollBarButtonMiddlePictureDown.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetScrollBarButtonBottomPictureNormal(Value: TPicture);
- begin
- FScrollBarButtonBottomPictureNormal.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetScrollBarButtonBottomPictureHover(Value: TPicture);
- begin
- FScrollBarButtonBottomPictureHover.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetScrollBarButtonBottomPictureDown(Value: TPicture);
- begin
- FScrollBarButtonBottomPictureDown.Assign(Value);
- end;
- procedure TRealICQFriendTreeView.SetScrollBackgroundPictureNormal(Value: TPicture);
- begin
- FScrollBackgroundPictureNormal.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetScrollBackgroundPictureHover(Value: TPicture);
- begin
- FScrollBackgroundPictureHover.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.SetScrollBackgroundPictureDown(Value: TPicture);
- begin
- FScrollBackgroundPictureDown.Assign(Value);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.DoSelectItemChanged(Employee: TRealICQFriend);
- begin
- if Assigned(FOnSelectItemChanged) then FOnSelectItemChanged(Employee);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.DoItemClick(Employee: TRealICQFriend);
- begin
- if Assigned(FOnItemClick) then FOnItemClick(Employee);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.DoItemDoubleClick(Employee: TRealICQFriend);
- begin
- if Assigned(FOnItemDoubleClick) then FOnItemDoubleClick(Employee);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.DoItemMouseEnter(Employee: TRealICQFriend);
- begin
- if Assigned(FOnItemMouseEnter) then FOnItemMouseEnter(Employee);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.DoItemMouseLeave(Employee: TRealICQFriend);
- begin
- if Assigned(FOnItemMouseLeave) then FOnItemMouseLeave(Employee);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.DoItemFlashCaption(Employee: TRealICQFriend);
- begin
- if Assigned(FOnItemFlashCaption) then FOnItemFlashCaption(Employee);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.DoItemOnline(Employee: TRealICQFriend);
- begin
- if Assigned(FOnItemOnline) then FOnItemOnline(Employee);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.DoItemOffline(Employee: TRealICQFriend);
- begin
- if Assigned(FOnItemOffline) then FOnItemOffline(Employee);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.DoItemIconButtonClick(Employee: TRealICQFriend; IconButtonType: TRealICQFriendTreeNodeIconButtonType);
- begin
- if Assigned(FOnItemIconButtonClick) then FOnItemIconButtonClick(Self, Employee, IconButtonType);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.DoItemIconButtonDblClick(Employee: TRealICQFriend; IconButtonType: TRealICQFriendTreeNodeIconButtonType);
- begin
- if Assigned(FOnItemIconButtonDblClick) then FOnItemIconButtonDblClick(Self, Employee, IconButtonType);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendTreeView.ChangeUIColor(AColor: TColor);
- begin
- FIconBtnDefaultColor := ConvertColorToColor(FIconBtnDefaultColor, AColor);
- FIconBtnLightColor := ConvertColorToColor(FIconBtnLightColor, AColor);
- FIconBtnShadownColor := ConvertColorToColor(FIconBtnShadownColor, AColor);
- FHeadImageBorderColor := ConvertColorToColor(HeadImageBorderColor, AColor);
- FHeadImageBackColor := ConvertColorToColor(HeadImageBackColor, AColor);
- FSelectedItemBorderColor := ConvertColorToColor(SelectedItemBorderColor, AColor);
- FSelectedItemBorderInnerColor := ConvertColorToColor(SelectedItemBorderInnerColor, AColor);
- FSelectedItemBackColor := ConvertColorToColor(SelectedItemBackColor, AColor);
- ConvertBitmapToColor(FBranchClosedButtonPicture.Bitmap, AColor);
- ConvertBitmapToColor(FBranchOpenedButtonPicture.Bitmap, AColor);
- //ConvertBitmapToColor(FBranchExpandedPicture.Bitmap, AColor);
- ConvertBitmapToColor(FSelectedItemBackgroud.Bitmap, AColor);
-
- ConvertBitmapToColor(FScrollTopButtonPictureNormal.Bitmap, AColor);
- ConvertBitmapToColor(FScrollTopButtonPictureHover.Bitmap, AColor);
- ConvertBitmapToColor(FScrollTopButtonPictureDown.Bitmap, AColor);
- ConvertBitmapToColor(FScrollBottomButtonPictureNormal.Bitmap, AColor);
- ConvertBitmapToColor(FScrollBottomButtonPictureHover.Bitmap, AColor);
- ConvertBitmapToColor(FScrollBottomButtonPictureDown.Bitmap, AColor);
- ConvertBitmapToColor(FScrollBarButtonTopPictureNormal.Bitmap, AColor);
- ConvertBitmapToColor(FScrollBarButtonTopPictureHover.Bitmap, AColor);
- ConvertBitmapToColor(FScrollBarButtonTopPictureDown.Bitmap, AColor);
- ConvertBitmapToColor(FScrollBarButtonMiddlePictureNormal.Bitmap, AColor);
- ConvertBitmapToColor(FScrollBarButtonMiddlePictureHover.Bitmap, AColor);
- ConvertBitmapToColor(FScrollBarButtonMiddlePictureDown.Bitmap, AColor);
- ConvertBitmapToColor(FScrollBarButtonBottomPictureNormal.Bitmap, AColor);
- ConvertBitmapToColor(FScrollBarButtonBottomPictureHover.Bitmap, AColor);
- ConvertBitmapToColor(FScrollBarButtonBottomPictureDown.Bitmap, AColor);
- ConvertBitmapToColor(FScrollBackgroundPictureNormal.Bitmap, AColor);
- ConvertBitmapToColor(FScrollBackgroundPictureHover.Bitmap, AColor);
- ConvertBitmapToColor(FScrollBackgroundPictureDown.Bitmap, AColor);
- FTreeViewScrollBar.FAssignedPicture := False;
- FTreeViewScrollBar.DrawScrollBar;
- FNoScrollBarTreeView.Repaint;
- end;
- //------------------------------------------------------------------------------
- constructor TRealICQFriendTreeView.Create(AOwner: TComponent);
- begin
- inherited Create(AOwner);
- Color := clWhite;
- DoubleBuffered := True;
- BevelInner := bvNone;
- BevelOuter := bvNone;
- AutoSize := True;
-
- Width := 200;
- Height := 300;
- FBranchs := TStringList.Create;
- FEmployees := TStringList.Create;
- FBranchItems := TRealICQGroupListItems.Create(Self);
- FEmployeeItems := TRealICQFriendListItems.Create(Self);
- FTimer := TTimer.Create(Self);
- FTimer.Interval := 600;
- FTimer.Enabled := False;
- FTimer.OnTimer := TimerOnTimer;
- FHintWindow := TSingleBorderHintWindow.Create(Self);
- FHintWindow.Visible := False;
- FTimerItemIndex := -1;
-
- FSelectedItemBackgroud := TPicture.Create;
- FDefaultPicture := TPicture.Create;
- FDefaultPictureOffline := TPicture.Create;
- FLeavePicture := TPicture.Create;
-
- FCameraIcon := TIcon.Create;
- FTelephoneIcon := TIcon.Create;
- FMobilePhoneIcon := TIcon.Create;
- FEmailIcon := TIcon.Create;
- FSMSIcon := TIcon.Create;
- FShowHeadImageButton := True;
- FShowEmailButton := True;
- FShowSMSButton := True;
- FShowTelButton := True;
- FShowMobileButton := True;
- FShowCameraButton := True;
- FIconBtnDefaultColor := clWhite;
- FIconBtnLightColor := clSilver;
- FIconBtnShadownColor := cl3DDkShadow;
- FBranchExpandedPicture := TPicture.Create;
- FBranchCollapsedPicture := TPicture.Create;
- FBranchClosedButtonPicture := TPicture.Create;
- FBranchOpenedButtonPicture := TPicture.Create;
- FStyle := lsSmallHeadImage;
- FCaptionStyle := csDisplayName;
- FAdjustPosition := False;
- FShowLine := True;
- FShowBranchImage := True;
- FFlashCaptionOnOnline := False;
- FOnlineNumeric := 0;
-
- FScrollTopButtonPictureNormal := TPicture.Create;
- FScrollTopButtonPictureHover := TPicture.Create;
- FScrollTopButtonPictureDown := TPicture.Create;
- FScrollBottomButtonPictureNormal := TPicture.Create;
- FScrollBottomButtonPictureHover := TPicture.Create;
- FScrollBottomButtonPictureDown := TPicture.Create;
- FScrollBarButtonTopPictureNormal := TPicture.Create;
- FScrollBarButtonTopPictureHover := TPicture.Create;
- FScrollBarButtonTopPictureDown := TPicture.Create;
- FScrollBarButtonMiddlePictureNormal := TPicture.Create;
- FScrollBarButtonMiddlePictureHover := TPicture.Create;
- FScrollBarButtonMiddlePictureDown := TPicture.Create;
- FScrollBarButtonBottomPictureNormal := TPicture.Create;
- FScrollBarButtonBottomPictureHover := TPicture.Create;
- FScrollBarButtonBottomPictureDown := TPicture.Create;
- FScrollBackgroundPictureNormal := TPicture.Create;
- FScrollBackgroundPictureHover := TPicture.Create;
- FScrollBackgroundPictureDown := TPicture.Create;
- FNoScrollBarTreeView := TLXUMCNoScrollBarTreeView.Create(Self);
- FNoScrollBarTreeView.Parent := Self;
- FNoScrollBarTreeView.Left := 0;
- FNoScrollBarTreeView.Top := 0;
- FNoScrollBarTreeView.Width := Width;
- FNoScrollBarTreeView.Height := 0;
- FNoScrollBarTreeView.Anchors := [akLeft, akTop, akRight];
- FNoScrollBarTreeView.FContacterTreeView := Self;
- FNoScrollBarTreeView.BorderStyle := bsNone;
- FNoScrollBarTreeView.ReadOnly := True;
- FNoScrollBarTreeView.HideSelection := False;
- FNoScrollBarTreeView.RightClickSelect := False;
- FNoScrollBarTreeView.MultiSelect := False;
- FTreeViewScrollBar := TLXUMCTreeViewScrollBar.Create(Self);
- FTreeViewScrollBar.Parent := Self;
- FTreeViewScrollBar.Align := alRight;
- FTreeViewScrollBar.DoubleBuffered := True;
- FTreeViewScrollBar.FContacterTreeView := Self;
- OnResize := WhenResize;
- FNoScrollBarTreeView.OnChange := FTreeViewScrollBar.TreeViewChange;
- FNoScrollBarTreeView.OnExpanded := FTreeViewScrollBar.TreeViewExpanded;
- FNoScrollBarTreeView.OnCollapsed := FTreeViewScrollBar.TreeViewCollapsed;
- FNoScrollBarTreeView.OnResize := FTreeViewScrollBar.TreeViewResize;
- FNoScrollBarTreeView.OnMouseWheelDown := FTreeViewScrollBar.TreeViewMouseWheelDown;
- FNoScrollBarTreeView.OnMouseWheelUp := FTreeViewScrollBar.TreeViewMouseWheelUp;
- end;
- //------------------------------------------------------------------------------
- destructor TRealICQFriendTreeView.Destroy;
- begin
- try
- FNoScrollBarTreeView.OnChange := nil;
- FNoScrollBarTreeView.OnExpanded := nil;
- FNoScrollBarTreeView.OnCollapsed := nil;
- FNoScrollBarTreeView.OnResize := nil;
- FNoScrollBarTreeView.OnMouseWheelDown := nil;
- FNoScrollBarTreeView.OnMouseWheelUp := nil;
- FreeAndNil(FTimer);
- FreeAndNil(FBranchs);
- FreeAndNil(FEmployees);
- FreeAndNil(FBranchItems);
- FreeAndNil(FEmployeeItems);
- FreeAndNil(FScrollBackgroundPictureDown);
- FreeAndNil(FScrollBackgroundPictureHover);
- FreeAndNil(FScrollBackgroundPictureNormal);
- FreeAndNil(FScrollBarButtonBottomPictureDown);
- FreeAndNil(FScrollBarButtonBottomPictureHover);
- FreeAndNil(FScrollBarButtonBottomPictureNormal);
- FreeAndNil(FScrollBarButtonMiddlePictureDown);
- FreeAndNil(FScrollBarButtonMiddlePictureHover);
- FreeAndNil(FScrollBarButtonMiddlePictureNormal);
- FreeAndNil(FScrollBarButtonTopPictureDown);
- FreeAndNil(FScrollBarButtonTopPictureHover);
- FreeAndNil(FScrollBarButtonTopPictureNormal);
- FreeAndNil(FScrollBottomButtonPictureDown);
- FreeAndNil(FScrollBottomButtonPictureHover);
- FreeAndNil(FScrollBottomButtonPictureNormal);
- FreeAndNil(FScrollTopButtonPictureDown);
- FreeAndNil(FScrollTopButtonPictureHover);
- FreeAndNil(FScrollTopButtonPictureNormal);
- FreeAndNil(FBranchClosedButtonPicture);
- FreeAndNil(FBranchOpenedButtonPicture);
- FreeAndNil(FBranchExpandedPicture);
- FreeAndNil(FBranchCollapsedPicture);
- FreeAndNil(FSelectedItemBackgroud);
- FreeAndNil(FDefaultPicture);
- FreeAndNil(FDefaultPictureOffline);
- FreeAndNil(FLeavePicture);
-
- FreeAndNil(FCameraIcon);
- FreeAndNil(FTelephoneIcon);
- FreeAndNil(FMobilePhoneIcon);
- FreeAndNil(FEmailIcon);
- FreeAndNil(FSMSIcon);
- FreeAndNil(FTreeViewScrollBar);
- FreeAndNil(FNoScrollBarTreeView);
-
- FHintWindow.ReleaseHandle;
- FHintWindow.Free;
- finally
- inherited Destroy;
- end;
- end;
- {$endregion}
- {TLXUMCNoScrollBarTreeView}
- {$region 'TLXUMCNoScrollBarTreeView'}
- //------------------------------------------------------------------------------
- procedure TLXUMCNoScrollBarTreeView.TreeViewMouseLeave(Sender: TObject);
- var
- iLoop: Integer;
- Employee: TRealICQFriend;
- begin
- FContacterTreeView.FTimerItemIndex := -1;
- FContacterTreeView.FTimer.Enabled := False;
- FContacterTreeView.FHintWindow.ReleaseHandle;
- FContacterTreeView.FHintWindow.Visible := False;
- for iLoop := 0 to FContacterTreeView.FEmployees.Count - 1 do
- begin
- Employee := FContacterTreeView.FEmployees.Objects[iLoop] as TRealICQFriend;
- if Employee.FMouseInRect then
- begin
- Employee.FMouseInRect := False;
- FContacterTreeView.DoItemMouseLeave(Employee);
- end;
- if Employee.FMouseInHeadImageRect then
- begin
- Employee.FMouseInHeadImageRect := False;
- Employee.Update;
- end;
- if Employee.FMouseInCameraRect then
- begin
- Employee.FMouseInCameraRect := False;
- Employee.Update;
- end;
- if Employee.FMouseInTelephoneRect then
- begin
- Employee.FMouseInTelephoneRect := False;
- Employee.Update;
- end;
- if Employee.FMouseInMobilePhoneRect then
- begin
- Employee.FMouseInMobilePhoneRect := False;
- Employee.Update;
- end;
- if Employee.FMouseInEmailRect then
- begin
- Employee.FMouseInEmailRect := False;
- Employee.Update;
- end;
- if Employee.FMouseInSMSRect then
- begin
- Employee.FMouseInSMSRect := False;
- Employee.Update;
- end;
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCNoScrollBarTreeView.TreeViewMouseMove(Sender: TObject; Shift: TShiftState; X,
- Y: Integer);
- var
- P: TPoint;
- iLoop: Integer;
- Node: TTreeNode;
- Employee: TRealICQFriend;
- procedure OpenHint;
- begin
- FContacterTreeView.FTimerItemIndex := Node.Index;
- if FContacterTreeView.FHintWindow.Visible then
- begin
- FContacterTreeView.ShowCustomHint(Node);
- end
- else
- begin
- FContacterTreeView.FTimer.Enabled := False;
- FContacterTreeView.FTimer.Enabled := True;
- end;
- end;
- procedure CloseHint;
- begin
- FContacterTreeView.FTimerItemIndex := -1;
- FContacterTreeView.FTimer.Enabled := False;
- FContacterTreeView.FHintWindow.ReleaseHandle;
- FContacterTreeView.FHintWindow.Visible := False;
- end;
- procedure ResetMouseInRectState;
- begin
- Employee.FMouseInTextRect := False;
- Employee.FMouseInHeadImageRect := False;
- Employee.FMouseInCameraRect := False;
- Employee.FMouseInTelephoneRect := False;
- Employee.FMouseInMobilePhoneRect := False;
- Employee.FMouseInEmailRect := False;
- Employee.FMouseInSMSRect := False;
- end;
- begin
- P.X := X;
- P.Y := Y;
- Node := GetNodeAt(P.X, P.Y);
- if Node <> nil then
- begin
- for iLoop := 0 to FContacterTreeView.FEmployees.Count - 1 do
- begin
- Employee := FContacterTreeView.FEmployees.Objects[iLoop] as TRealICQFriend;
- if (Employee.Node = Node) then continue;
- if Employee.FMouseInRect then
- begin
- Employee.FMouseInRect := False;
- end;
- if Employee.FMouseInTextRect then
- begin
- Employee.FMouseInTextRect := False;
- FContacterTreeView.DoItemMouseLeave(Employee);
- end;
- if Employee.FMouseInHeadImageRect then
- begin
- Employee.FMouseInHeadImageRect := False;
- Employee.Update;
- end;
- if Employee.FMouseInCameraRect then
- begin
- Employee.FMouseInCameraRect := False;
- Employee.Update;
- end;
- if Employee.FMouseInTelephoneRect then
- begin
- Employee.FMouseInTelephoneRect := False;
- Employee.Update;
- end;
- if Employee.FMouseInMobilePhoneRect then
- begin
- Employee.FMouseInMobilePhoneRect := False;
- Employee.Update;
- end;
- if Employee.FMouseInEmailRect then
- begin
- Employee.FMouseInEmailRect := False;
- Employee.Update;
- end;
- if Employee.FMouseInSMSRect then
- begin
- Employee.FMouseInSMSRect := False;
- Employee.Update;
- end;
- end;
-
- if Node.StateIndex = 1 then
- begin
- Employee := Node.Data;
- {$region '是否在文字区间'}
- if PtInRect(Employee.FTextRect, P) then
- begin
- if not Employee.FMouseInTextRect then
- begin
- ResetMouseInRectState;
- Employee.FMouseInTextRect := True;
- FContacterTreeView.DoItemMouseEnter(Employee);
- OpenHint;
- Exit;
- end;
- end
- else
- begin
- if Employee.FMouseInTextRect then
- begin
- Employee.FMouseInTextRect := False;
- CloseHint;
- end;
- end;
- {$endregion}
- {$region '是否在头像图标区间'}
- if PtInRect(Employee.FHeadImageRect, P) then
- begin
- if not Employee.FMouseInHeadImageRect then
- begin
- ResetMouseInRectState;
- Employee.FMouseInHeadImageRect := True;
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FHeadImageRect, ibUp);
- OpenHint;
- Exit;
- end;
- end
- else
- begin
- if Employee.FMouseInHeadImageRect then
- begin
- Employee.FMouseInHeadImageRect := False;
- Employee.Update;
- CloseHint;
- end;
- end;
- {$endregion}
- {$region '是否在摄像头图标区间'}
- if (Employee.HasCamera) and (Employee.LoginState <> stHidden) then
- begin
- if PtInRect(Employee.FCameraRect, P) then
- begin
- if not Employee.FMouseInCameraRect then
- begin
- ResetMouseInRectState;
- Employee.FMouseInCameraRect := True;
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FCameraRect, ibUp);
- OpenHint;
- Exit;
- end;
- end
- else
- begin
- if Employee.FMouseInCameraRect then
- begin
- Employee.FMouseInCameraRect := False;
- Employee.Update;
- CloseHint;
- end;
- end;
- end;
- {$endregion}
- {$region '是否在坐机图标区间'}
- if (Employee.HasTelephone) then
- begin
- if PtInRect(Employee.FTelephoneRect, P) then
- begin
- if not Employee.FMouseInTelephoneRect then
- begin
- ResetMouseInRectState;
- Employee.FMouseInTelephoneRect := True;
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FTelephoneRect, ibUp);
- OpenHint;
- Exit;
- end;
- end
- else
- begin
- if Employee.FMouseInTelephoneRect then
- begin
- Employee.FMouseInTelephoneRect := False;
- Employee.Update;
- CloseHint;
- end;
- end;
- end;
- {$endregion}
-
- {$region '是否在手机图标区间'}
- if (Employee.HasMobilePhone) then
- begin
- if PtInRect(Employee.FMobilePhoneRect, P) then
- begin
- if not Employee.FMouseInMobilePhoneRect then
- begin
- ResetMouseInRectState;
- Employee.FMouseInMobilePhoneRect := True;
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FMobilePhoneRect, ibUp);
- OpenHint;
- Exit;
- end;
- end
- else
- begin
- if Employee.FMouseInMobilePhoneRect then
- begin
- Employee.FMouseInMobilePhoneRect := False;
- Employee.Update;
- CloseHint;
- end;
- end;
- end;
- {$endregion}
- {$region '是否在邮箱图标区间'}
- if (Employee.HasEmail) then
- begin
- if PtInRect(Employee.FEmailRect, P) then
- begin
- if not Employee.FMouseInEmailRect then
- begin
- ResetMouseInRectState;
- Employee.FMouseInEmailRect := True;
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FEmailRect, ibUp);
- OpenHint;
- Exit;
- end;
- end
- else
- begin
- if Employee.FMouseInEmailRect then
- begin
- Employee.FMouseInEmailRect := False;
- Employee.Update;
- CloseHint;
- end;
- end;
- end;
- {$endregion}
-
- {$region '是否在短信图标区间'}
- if (Employee.HasSMS) then
- begin
- if PtInRect(Employee.FSMSRect, P) then
- begin
- if not Employee.FMouseInSMSRect then
- begin
- ResetMouseInRectState;
- Employee.FMouseInSMSRect := True;
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FSMSRect, ibUp);
- OpenHint;
- Exit;
- end;
- end
- else
- begin
- if Employee.FMouseInSMSRect then
- begin
- Employee.FMouseInSMSRect := False;
- Employee.Update;
- CloseHint;
- end;
- end;
- end;
- {$endregion}
- end
- else
- begin
- CloseHint;
- end;
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCNoScrollBarTreeView.TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- var
- Node: TTreeNode;
- Employee: TRealICQFriend;
- begin
- if Assigned(FContacterTreeView.FOnItemMouseDown) then
- FContacterTreeView.FOnItemMouseDown(FContacterTreeView, Button, Shift, X, Y);
-
- FContacterTreeView.FTimerItemIndex := -1;
- FContacterTreeView.FTimer.Enabled := False;
- FContacterTreeView.FHintWindow.ReleaseHandle;
- FContacterTreeView.FHintWindow.Visible := False;
-
- if Button = mbLeft then
- FMouseInDown := True;
- Node := GetNodeAt(X, Y);
- if Node <> nil then
- begin
- //if PtInRect(Node.DisplayRect(True), Point(X, Y)) then
- Node.Selected:=True;
-
- if Node.StateIndex = 1 then
- begin
- FContacterTreeView.DoItemClick(Node.Data);
- if Button = mbLeft then
- begin
- Employee := Node.Data;
- if Employee.FMouseInHeadImageRect then
- begin
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FHeadImageRect, ibDown);
- end;
- if Employee.FMouseInCameraRect then
- begin
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FCameraRect, ibDown);
- end;
- if Employee.FMouseInTelephoneRect then
- begin
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FTelephoneRect, ibDown);
- end;
- if Employee.FMouseInMobilePhoneRect then
- begin
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FMobilePhoneRect, ibDown);
- end;
- if Employee.FMouseInEmailRect then
- begin
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FEmailRect, ibDown);
- end;
- if Employee.FMouseInSMSRect then
- begin
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FSMSRect, ibDown);
- end;
- end;
- end;
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCNoScrollBarTreeView.TreeViewMouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- var
- Node: TTreeNode;
- Employee: TRealICQFriend;
- begin
- if Assigned(FContacterTreeView.FOnItemMouseUp) then
- FContacterTreeView.FOnItemMouseUp(FContacterTreeView, Button, Shift, X, Y);
- FMouseInDown := False;
- Node := GetNodeAt(X, Y);
- if Node <> nil then
- begin
- if Node.StateIndex = 1 then
- begin
- if Button = mbLeft then
- begin
- Employee := Node.Data;
- if Employee.FMouseInHeadImageRect then
- begin
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FHeadImageRect, ibUp);
- FContacterTreeView.DoItemIconButtonClick(Employee, itHeadImage);
- end;
- if Employee.FMouseInCameraRect then
- begin
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FCameraRect, ibUp);
- FContacterTreeView.DoItemIconButtonClick(Employee, itCamera);
- end;
- if Employee.FMouseInTelephoneRect then
- begin
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FTelephoneRect, ibUp);
- FContacterTreeView.DoItemIconButtonClick(Employee, itTel);
- end;
- if Employee.FMouseInMobilePhoneRect then
- begin
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FMobilePhoneRect, ibUp);
- FContacterTreeView.DoItemIconButtonClick(Employee, itMobile);
- end;
- if Employee.FMouseInEmailRect then
- begin
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FEmailRect, ibUp);
- FContacterTreeView.DoItemIconButtonClick(Employee, itEmail);
- end;
- if Employee.FMouseInSMSRect then
- begin
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FSMSRect, ibUp);
- FContacterTreeView.DoItemIconButtonClick(Employee, itSMS);
- end;
- end;
- end;
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCNoScrollBarTreeView.TreeViewDblClick(Sender: TObject);
- var
- Node: TTreeNode;
- P: TPoint;
- Employee: TRealICQFriend;
- begin
- P.X := Mouse.CursorPos.X;
- P.Y := Mouse.CursorPos.Y;
- P := ScreenToClient(P);
- Node := GetNodeAt(P.X, P.Y);
- if Node <> nil then
- begin
- if Node.StateIndex = 1 then
- begin
- Employee := Node.Data;
-
- if Employee.FMouseInHeadImageRect then
- begin
- FContacterTreeView.DoItemIconButtonDblClick(Employee, itHeadImage);
- Exit;
- end;
- if Employee.FMouseInCameraRect then
- begin
- FContacterTreeView.DoItemIconButtonDblClick(Employee, itCamera);
- Exit;
- end;
- if Employee.FMouseInTelephoneRect then
- begin
- FContacterTreeView.DoItemIconButtonDblClick(Employee, itTel);
- Exit;
- end;
- if Employee.FMouseInMobilePhoneRect then
- begin
- FContacterTreeView.DoItemIconButtonDblClick(Employee, itMobile);
- Exit;
- end;
- if Employee.FMouseInEmailRect then
- begin
- FContacterTreeView.DoItemIconButtonDblClick(Employee, itEmail);
- Exit;
- end;
- if Employee.FMouseInSMSRect then
- begin
- FContacterTreeView.DoItemIconButtonDblClick(Employee, itSMS);
- Exit;
- end;
-
- Employee.StopFlash;
- FContacterTreeView.DoItemDoubleClick(Employee);
- end;
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCNoScrollBarTreeView.DrawButton(ACanvas: TCanvas; ARect: TRect; Node: TTreeNode);
- var
- AButtonPicture: TPicture;
- R: TRect;
- cx, cy, FButtonSize: Integer;
- begin
- cx := ARect.Left + Indent div 2 - 2;
- cy := ARect.Top + (ARect.Bottom - ARect.Top) div 2;
- FButtonSize := 0;
- with ACanvas do
- begin
- Pen.Color := RealICQColors.ConvertColorToColor($00ABABAB, FContacterTreeView.FSelectedItemBorderColor);
- Pen.Style := psDot;
- if FContacterTreeView.FShowLine then
- begin
- //画水平线.
- if Node.HasChildren then
- begin
- Pen.Mode := pmCopy;
- PenPos := Point(cx + FButtonSize, cy);
- LineTo(ARect.Left + Indent + FButtonSize - 1, cy);
- Pen.Mode := pmNotXor;
- PenPos := Point(cx + FButtonSize + 1, cy);
- LineTo(ARect.Left + Indent + FButtonSize - 1 + 1, cy);
-
- Pen.Mode := pmNotXor;
- PenPos := Point(cx + FButtonSize + 2, cy);
- LineTo(ARect.Left + Indent + FButtonSize - 1 + 2, cy);
- end else
- begin
- Pen.Mode := pmCopy;
- PenPos := Point(cx, cy);
- LineTo(ARect.Left + Indent + FButtonSize - 1, cy);
-
- Pen.Mode := pmNotXor;
- PenPos := Point(cx + 1, cy);
- LineTo(ARect.Left + Indent + FButtonSize - 1 + 1, cy);
-
- Pen.Mode := pmNotXor;
- PenPos := Point(cx + 2, cy);
- LineTo(ARect.Left + Indent + FButtonSize - 1 + 2, cy);
- end;
- //画至上方的竖线.
- if Node.GetPrev <> nil then
- begin
- Pen.Mode := pmCopy;
- Pen.Style := psDot;
- PenPos := Point(cx, cy);
- LineTo(cx, ARect.Top);
- Pen.Mode := pmNotXor;
- PenPos := Point(cx, cy - 1);
- LineTo(cx, ARect.Top - 1);
-
- Pen.Mode := pmNotXor;
- PenPos := Point(cx, cy - 2);
- LineTo(cx, ARect.Top - 2);
- end;
- if ((Node.GetNextVisible <> nil) and (Node.GetNextVisible.Level = Node.Level))
- or (Node.GetNextSibling <> nil) then
- //画至下方的竖线.
- begin
- Pen.Mode := pmCopy;
- PenPos := Point(cx, cy + 2);
- LineTo(cx, ARect.Bottom);
-
- Pen.Mode := pmNotXor;
- PenPos := Point(cx, cy + 2 + 1);
- LineTo(cx, ARect.Bottom);
-
- Pen.Mode := pmNotXor;
- PenPos := Point(cx, cy + 2 + 2);
- LineTo(cx, ARect.Bottom);
- end;
- end;
- if Node.HasChildren or ((Node.StateIndex = 0) and not FContacterTreeView.FShowBranchImage) then
- begin
- AButtonPicture := TPicture.Create;
- try
- if (not Node.Expanded) or (Node.Count = 0) then
- begin
- AButtonPicture.Bitmap.Assign(FContacterTreeView.FBranchClosedButtonPicture.Graphic)
- end
- else
- begin
- AButtonPicture.Bitmap.Assign(FContacterTreeView.FBranchOpenedButtonPicture.Graphic);
- end;
- //if Node.Count = 0 then
- // ConvertBitmapToColor(AButtonPicture.Bitmap, clWhite);
- R.Left := ARect.Left + (Indent - AButtonPicture.Bitmap.Width) div 2 - 2;
- R.Top := ARect.Top + ((ARect.Bottom - ARect.Top) - AButtonPicture.Bitmap.Height) div 2 + 1;
- R.Right := R.Left + AButtonPicture.Bitmap.Width;
- R.Bottom := R.Top + AButtonPicture.Bitmap.Height;
- ACanvas.StretchDraw(R, AButtonPicture.Graphic);
- finally
- AButtonPicture.Free;
- end;
- end;
- if FContacterTreeView.FShowLine then
- begin
- //now connect vertical lines of higher level nodes.
- Node := Node.Parent;
- while Node <> nil do
- begin
- cx := cx - Indent;
- if Node.GetNextSibling <> nil then
- begin
- Pen.Mode := pmCopy;
- PenPos := Point(cx, ARect.Top + 1);
- LineTo(cx, ARect.Bottom);
-
- Pen.Mode := pmNotXor;
- PenPos := Point(cx, ARect.Top + 1 + 1);
- LineTo(cx, ARect.Bottom);
-
- Pen.Mode := pmNotXor;
- PenPos := Point(cx, ARect.Top + 1 + 2);
- LineTo(cx, ARect.Bottom);
- end;
- Node := Node.Parent;
- end; //while
- end; //if FContacterTreeView.FShowLine
- end;
-
- ACanvas.Pen.Mode := pmCopy;
- ACanvas.Pen.Style := psSolid;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCNoScrollBarTreeView.DrawImage(ACanvas: TCanvas; NodeRect: TRect; Node: TTreeNode);
- var
- Employee: TRealICQFriend;
- Branch: TRealICQGroup;
- ANodePicture: TPicture;
- DrawNodePicture,
- NeedDrawPictureBorder: Boolean;
- R: TRect;
- AddLeft, AddTop: Integer;
- begin
- DrawNodePicture := True;
- AddLeft := 0;
- AddTop := 0;
- {$region '计算头像的位置,头像跳动时用到'}
- if Node.StateIndex = 1 then
- begin
- Employee := Node.Data;
- if Employee.FFlashStyle = fsJump then
- begin
- case Employee.FHeadImagePosition of
- 1:begin
- AddLeft := -1;
- AddTop := +1;
- end;
- 2:begin
- AddLeft := 0;
- AddTop := -1;
- end;
- 3:begin
- AddLeft := +1;
- AddTop := +1;
- end;
- end;
- end
- else
- begin
- if Employee.FHeadImagePosition mod 2 = 0 then
- DrawNodePicture := True
- else
- DrawNodePicture := False;
- end;
- end;
- {$endregion'}
- ANodePicture := TPicture.Create;
- try
- if Node.StateIndex = 0 then
- begin
- NeedDrawPictureBorder := False;
- Branch := Node.Data;
- Node.Text := Branch.FGroupName;
- if Node.Expanded then
- ANodePicture.Bitmap.Assign(FContacterTreeView.FBranchExpandedPicture.Graphic)
- else
- ANodePicture.Bitmap.Assign(FContacterTreeView.FBranchCollapsedPicture.Graphic);
- end
- else
- begin
- Employee := Node.Data;
- Node.Text := Employee.FLoginName;
- if (Employee.FHeadImagePicture.Graphic <> nil) and (FContacterTreeView.FStyle <> lsNoHeadImage) then
- begin
- NeedDrawPictureBorder := True;
- ANodePicture.Bitmap.Assign(Employee.FHeadImagePicture.Graphic);
- end
- else
- begin
- NeedDrawPictureBorder := False;
- ANodePicture.Bitmap.Assign(FContacterTreeView.FDefaultPicture.Graphic);
- end;
-
- if (Employee.FLoginState = stOffline) or (Employee.FLoginState = stHidden) then
- begin
- if (FContacterTreeView.FDefaultPictureOffline.Graphic <> nil) and
- ((Employee.FHeadImagePicture.Graphic = nil) or (FContacterTreeView.FStyle = lsNoHeadImage)) then
- ANodePicture.Bitmap.Assign(FContacterTreeView.FDefaultPictureOffline.Graphic)
- else
- RealICQColors.Grayscale(ANodePicture.Bitmap);
- end;
- end;
- if NeedDrawPictureBorder and DrawNodePicture then
- begin
- //画头像边框
- ACanvas.Pen.Color := FContacterTreeView.FHeadImageBorderColor;
- ACanvas.Brush.Color := FContacterTreeView.FHeadImageBackColor;
- if Node.StateIndex = 1 then
- begin
- Employee := Node.Data;
- if (Employee.FLoginState = stOffline) or (Employee.FLoginState = stHidden) then
- ACanvas.Pen.Color := ConvertColorToColor(ACanvas.Pen.Color, clGray);
- end;
- R.Left := NodeRect.Left - 2 + AddLeft;
- R.Top := NodeRect.Top + ((NodeRect.Bottom - NodeRect.Top) - 20) div 2 + AddTop;
- R.Right := R.Left + 20;
- R.Bottom := R.Top + 20;
- ACanvas.Rectangle(R);
- end;
-
- R.Left := NodeRect.Left + AddLeft;
- R.Top := NodeRect.Top + ((NodeRect.Bottom - NodeRect.Top) - 16) div 2 + AddTop;
- R.Right := R.Left + 16;
- R.Bottom := R.Top + 16;
-
- if DrawNodePicture then
- begin
- ACanvas.StretchDraw(R, ANodePicture.Graphic);
- if Node.StateIndex = 1 then
- begin
- Employee := Node.Data;
- //Employee.FMouseInHeadImageRect := False;
- Employee.FHeadImageRect.Left := 0;
- Employee.FHeadImageRect.Top := 0;
- Employee.FHeadImageRect.Right := 0;
- Employee.FHeadImageRect.Bottom := 0;
- if FContacterTreeView.FShowHeadImageButton then
- begin
- Employee := Node.Data;
- Employee.FHeadImageRect.Left := Node.DisplayRect(False).Left + R.Left - 2;
- Employee.FHeadImageRect.Top := Node.DisplayRect(False).Top + R.Top - 2;
- Employee.FHeadImageRect.Right := Employee.FHeadImageRect.Left + 20;
- Employee.FHeadImageRect.Bottom := Employee.FHeadImageRect.Top + 20;
- end;
- if PtInRect(Employee.FHeadImageRect, ScreenToClient(Mouse.CursorPos)) then
- begin
- if not Employee.FMouseInHeadImageRect then
- begin
- if FMouseInDown then
- begin
- Employee.FMouseInHeadImageRect := True;
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FHeadImageRect, ibDown);
- end;
- end;
- end;
- end;
- end;
- if Node.StateIndex = 1 then
- begin
- Employee := Node.Data;
- if Employee.FLoginState = stLeave then
- begin
- R.Left := R.Right - FContacterTreeView.FLeavePicture.Width;
- R.Top := R.Bottom - FContacterTreeView.FLeavePicture.Height;
- ACanvas.StretchDraw(R, FContacterTreeView.FLeavePicture.Graphic);
- end;
- end;
- finally
- ANodePicture.Free;
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCNoScrollBarTreeView.DrawContacterItem(ACanvas: TCanvas; Node: TTreeNode; Rect: TRect; State: TCustomDrawState);
- var
- R: TRect;
- ACaption,
- ALeaveMessage,
- ADisplayMessage: String;
- ACaptionWidth,
- ALeaveMessageWidth,
- ADisplayMessageWidth: Integer;
- Employee: TRealICQFriend;
- Branch: TRealICQGroup;
- DecWidthForSmallIcon: Integer;
- BMP: Graphics.TBitmap;
- begin
- ACanvas.Pen.Color := clWhite;
- ACanvas.Brush.Color := clWhite;
- ACanvas.Pen.Style := psSolid;
- ACanvas.Brush.Style := bsSolid;
- ACanvas.FillRect(Rect);
- ACanvas.Rectangle(Rect);
- ACanvas.FillRect(Rect);
- //画展开收起按钮
- Rect.Left := Rect.Left + ((Node.Level) * Indent);
- DrawButton(ACanvas, Rect, Node);
- if (not FContacterTreeView.FShowLine) and
- (not FContacterTreeView.FShowBranchImage) then
- begin
- if (Node.StateIndex = 1) then
- Rect.Left := Rect.Left - ((Node.Level) * Indent) + 8
- else
- Rect.Left := Rect.Left - ((Node.Level) * Indent) - 5;
- end;
- DecWidthForSmallIcon := 0;
- if Node.StateIndex = 1 then
- begin
- Employee := Node.Data;
- with Employee do
- begin
- FCameraRect.Left := 0;
- FCameraRect.Top := 0;
- FCameraRect.Right := 0;
- FCameraRect.Bottom := 0;
-
- FTelephoneRect.Left := 0;
- FTelephoneRect.Top := 0;
- FTelephoneRect.Right := 0;
- FTelephoneRect.Bottom := 0;
- FMobilePhoneRect.Left := 0;
- FMobilePhoneRect.Top := 0;
- FMobilePhoneRect.Right := 0;
- FMobilePhoneRect.Bottom := 0;
- FEmailRect.Left := 0;
- FEmailRect.Top := 0;
- FEmailRect.Right := 0;
- FEmailRect.Bottom := 0;
- FSMSRect.Left := 0;
- FSMSRect.Top := 0;
- FSMSRect.Right := 0;
- FSMSRect.Bottom := 0;
- FTextRect.Left := 0;
- FTextRect.Top := 0;
- FTextRect.Right := 0;
- FTextRect.Bottom := 0;
- end;
- {$region '绘制摄像头图标'}
- if Employee.FHasCamera then
- begin
- if (Employee.FLoginState <> stOffline) and (Employee.FLoginState <> stHidden) then
- begin
- Inc(DecWidthForSmallIcon, 24);
- R.Left := Rect.Right - DecWidthForSmallIcon + (24 - 16) div 2;
- R.Top := Rect.Top + (Rect.Bottom - Rect.Top - 16) div 2;
- R.Right := R.Left + 16;
- R.Bottom := R.Top + 16;
- DrawIconEx(ACanvas.Handle, R.Left, R.Top, FContacterTreeView.FCameraIcon.Handle, 16, 16, 0, 0, DI_NORMAL);
- //ACanvas.StretchDraw(R, FContacterTreeView.FCameraIconBitmap);
- Employee.FCameraRect.Left := Node.DisplayRect(False).Left + R.Left - 2;
- Employee.FCameraRect.Top := Node.DisplayRect(False).Top + R.Top - 2;
- Employee.FCameraRect.Right := Employee.FCameraRect.Left + 20;
- Employee.FCameraRect.Bottom := Employee.FCameraRect.Top + 20;
- if PtInRect(Employee.FCameraRect, ScreenToClient(Mouse.CursorPos)) then
- begin
- if not Employee.FMouseInCameraRect then
- begin
- if FMouseInDown then
- begin
- Employee.FMouseInCameraRect := True;
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FCameraRect, ibDown);
- end;
- end;
- end;
- end;
- end;
- {$endregion}
- {$region '绘制坐机图标'}
- if Employee.FHasTelephone then
- begin
- Inc(DecWidthForSmallIcon, 24);
- R.Left := Rect.Right - DecWidthForSmallIcon + (24 - 16) div 2;
- R.Top := Rect.Top + (Rect.Bottom - Rect.Top - 16) div 2;
- R.Right := R.Left + 16;
- R.Bottom := R.Top + 16;
- DrawIconEx(ACanvas.Handle, R.Left, R.Top, FContacterTreeView.FTelephoneIcon.Handle, 16, 16, 0, 0, DI_NORMAL);
- //ACanvas.StretchDraw(R, FContacterTreeView.FCameraIconBitmap);
- Employee.FTelephoneRect.Left := Node.DisplayRect(False).Left + R.Left - 2;
- Employee.FTelephoneRect.Top := Node.DisplayRect(False).Top + R.Top - 2;
- Employee.FTelephoneRect.Right := Employee.FTelephoneRect.Left + 20;
- Employee.FTelephoneRect.Bottom := Employee.FTelephoneRect.Top + 20;
- if PtInRect(Employee.FTelephoneRect, ScreenToClient(Mouse.CursorPos)) then
- begin
- if not Employee.FMouseInTelephoneRect then
- begin
- if FMouseInDown then
- begin
- Employee.FMouseInTelephoneRect := True;
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FTelephoneRect, ibDown);
- end;
- end;
- end;
- end;
- {$endregion}
- {$region '绘制手机图标'}
- if Employee.FHasMobilePhone then
- begin
- Inc(DecWidthForSmallIcon, 24);
- R.Left := Rect.Right - DecWidthForSmallIcon + (24 - 16) div 2;
- R.Top := Rect.Top + (Rect.Bottom - Rect.Top - 16) div 2;
- R.Right := R.Left + 16;
- R.Bottom := R.Top + 16;
- DrawIconEx(ACanvas.Handle, R.Left, R.Top, FContacterTreeView.FMobilePhoneIcon.Handle, 16, 16, 0, 0, DI_NORMAL);
- //ACanvas.StretchDraw(R, FContacterTreeView.FCameraIconBitmap);
- Employee.FMobilePhoneRect.Left := Node.DisplayRect(False).Left + R.Left - 2;
- Employee.FMobilePhoneRect.Top := Node.DisplayRect(False).Top + R.Top - 2;
- Employee.FMobilePhoneRect.Right := Employee.FMobilePhoneRect.Left + 20;
- Employee.FMobilePhoneRect.Bottom := Employee.FMobilePhoneRect.Top + 20;
- if PtInRect(Employee.FMobilePhoneRect, ScreenToClient(Mouse.CursorPos)) then
- begin
- if not Employee.FMouseInMobilePhoneRect then
- begin
- if FMouseInDown then
- begin
- Employee.FMouseInMobilePhoneRect := True;
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FMobilePhoneRect, ibDown);
- end;
- end;
- end;
- end;
- {$endregion}
- {$region '绘制信箱图标'}
- if Employee.FHasEmail then
- begin
- Inc(DecWidthForSmallIcon, 24);
- R.Left := Rect.Right - DecWidthForSmallIcon + (24 - 16) div 2;
- R.Top := Rect.Top + (Rect.Bottom - Rect.Top - 16) div 2;
- R.Right := R.Left + 16;
- R.Bottom := R.Top + 16;
- DrawIconEx(ACanvas.Handle, R.Left, R.Top, FContacterTreeView.FEmailIcon.Handle, 16, 16, 0, 0, DI_NORMAL);
- Employee.FEmailRect.Left := Node.DisplayRect(False).Left + R.Left - 2;
- Employee.FEmailRect.Top := Node.DisplayRect(False).Top + R.Top - 2;
- Employee.FEmailRect.Right := Employee.FEmailRect.Left + 20;
- Employee.FEmailRect.Bottom := Employee.FEmailRect.Top + 20;
- if PtInRect(Employee.FEmailRect, ScreenToClient(Mouse.CursorPos)) then
- begin
- if not Employee.FMouseInEmailRect then
- begin
- if FMouseInDown then
- begin
- Employee.FMouseInEmailRect := True;
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FEmailRect, ibDown);
- end;
- end;
- end;
- end;
- {$endregion}
- {$region '绘制短信图标'}
- if Employee.FHasSMS then
- begin
- Inc(DecWidthForSmallIcon, 24);
- R.Left := Rect.Right - DecWidthForSmallIcon + (24 - 16) div 2;
- R.Top := Rect.Top + (Rect.Bottom - Rect.Top - 16) div 2;
- R.Right := R.Left + 16;
- R.Bottom := R.Top + 16;
- DrawIconEx(ACanvas.Handle, R.Left, R.Top, FContacterTreeView.FSMSIcon.Handle, 16, 16, 0, 0, DI_NORMAL);
- Employee.FSMSRect.Left := Node.DisplayRect(False).Left + R.Left - 2;
- Employee.FSMSRect.Top := Node.DisplayRect(False).Top + R.Top - 2;
- Employee.FSMSRect.Right := Employee.FSMSRect.Left + 20;
- Employee.FSMSRect.Bottom := Employee.FSMSRect.Top + 20;
- if PtInRect(Employee.FSMSRect, ScreenToClient(Mouse.CursorPos)) then
- begin
- if not Employee.FMouseInSMSRect then
- begin
- if FMouseInDown then
- begin
- Employee.FMouseInSMSRect := True;
- DrawIconButton(Canvas, FContacterTreeView.FIconBtnDefaultColor, FContacterTreeView.FIconBtnLightColor, FContacterTreeView.FIconBtnShadownColor, Employee.FSMSRect, ibDown);
- end;
- end;
- end;
- end;
- {$endregion}
-
- with Employee do
- begin
- if not FContacterTreeView.FShowCameraButton then
- begin
- FCameraRect.Left := 0;
- FCameraRect.Top := 0;
- FCameraRect.Right := 0;
- FCameraRect.Bottom := 0;
- end;
- if not FContacterTreeView.FShowTelButton then
- begin
- FTelephoneRect.Left := 0;
- FTelephoneRect.Top := 0;
- FTelephoneRect.Right := 0;
- FTelephoneRect.Bottom := 0;
- end;
- if not FContacterTreeView.FShowMobileButton then
- begin
- FMobilePhoneRect.Left := 0;
- FMobilePhoneRect.Top := 0;
- FMobilePhoneRect.Right := 0;
- FMobilePhoneRect.Bottom := 0;
- end;
- if not FContacterTreeView.FShowEmailButton then
- begin
- FEmailRect.Left := 0;
- FEmailRect.Top := 0;
- FEmailRect.Right := 0;
- FEmailRect.Bottom := 0;
- end;
- if not FContacterTreeView.FShowSMSButton then
- begin
- FSMSRect.Left := 0;
- FSMSRect.Top := 0;
- FSMSRect.Right := 0;
- FSMSRect.Bottom := 0;
- end;
- end;
- end;
-
- //画图片
- if (Node.StateIndex = 1) or (FContacterTreeView.FShowBranchImage) then
- begin
- if not FContacterTreeView.FShowBranchImage then
- Rect.Left := Rect.Left + 8
- else
- Rect.Left := Rect.Left + 20;
- DrawImage(ACanvas, Rect, Node);
- end;
- ACanvas.Font:= FContacterTreeView.Font;
- Rect.Left := Rect.Left + 20;
- ALeaveMessageWidth := 0;
- ADisplayMessageWidth := 0;
-
- {$region '计算背景宽度,获取节点文字'}
- if Node.StateIndex = 0 then
- begin
- Branch := Node.Data;
- if (Branch.FEmployeeCount = 0) then
- ACaption := Branch.FGroupName
- else
- ACaption := Format('%s(%d/%d)',[Branch.FGroupName, Branch.FOnlineEmployee, Branch.FEmployeeCount]);
- ACaptionWidth := ACanvas.TextWidth(ACaption);
- end
- else
- begin
- Employee := Node.Data;
- if (Length(Employee.FDisplayName) = 0) or (FContacterTreeView.FCaptionStyle = csLoginName) then
- ACaption := Employee.FLoginName
- else if FContacterTreeView.FCaptionStyle = csDisplayName then
- ACaption := Employee.FDisplayName
- else if FContacterTreeView.FCaptionStyle = csDisplayNameAndLoginName then
- ACaption := Employee.FDisplayName + '<' + Employee.FLoginName + '>';
- ACaptionWidth := ACanvas.TextWidth(ACaption);
- if Employee.FLoginState = stLeave then
- ALeaveMessage := '(' + Employee.FLeaveMessage + ')'
- else
- ALeaveMessage := '';
- ALeaveMessageWidth := ACanvas.TextWidth(ALeaveMessage);
- if (Length(Employee.FWatchword) = 0) then
- ADisplayMessage := ''
- else
- ADisplayMessage:= ' - ' + Employee.FWatchword;
- ADisplayMessageWidth := ACanvas.TextWidth(ADisplayMessage);
- end;
- {$endregion}
- {$region '绘制选中状态的背景'}
- if cdsSelected in State then
- begin
- ACanvas.Pen.Color := FContacterTreeView.FSelectedItemBorderColor;
- ACanvas.Brush.Color := FContacterTreeView.FSelectedItemBackColor;
- R.Left := Rect.Left;
- R.Top := Rect.Top + 1;
- R.Right := Rect.Left + ACaptionWidth + ALeaveMessageWidth + ADisplayMessageWidth - 1 + 6;
- if R.Right >= Width - DecWidthForSmallIcon then R.Right := Width - DecWidthForSmallIcon - 1;
- R.Bottom := Rect.Bottom;
- ACanvas.RoundRect(R.Left, R.Top, R.Right, R.Bottom, 5, 5);
-
- R.Left := Rect.Left + 2;
- R.Top := Rect.Top + 3;
- R.Right := R.Right - 2;
- R.Bottom := Rect.Bottom - 2;
- ACanvas.StretchDraw(R, FContacterTreeView.FSelectedItemBackgroud.Graphic);
- ACanvas.Pen.Color := FContacterTreeView.SelectedItemBorderInnerColor;
- ACanvas.Brush.Style := bsClear;
- ACanvas.RoundRect(R.Left - 1, R.Top - 1, R.Right + 1, R.Bottom + 1, 3, 3);
- end
- else
- begin
- ACanvas.Pen.Color := clWhite;
- ACanvas.Brush.Color := clWhite;
- R.Left := Rect.Left;
- R.Top := Rect.Top + 1;
- R.Right := Rect.Left + ACaptionWidth + ALeaveMessageWidth + ADisplayMessageWidth - 1 + 6;
- if R.Right >= Width - DecWidthForSmallIcon then R.Right := Width - DecWidthForSmallIcon - 1;
- R.Bottom := Rect.Bottom;
- ACanvas.RoundRect(R.Left, R.Top, R.Right, R.Bottom, 5, 5);
-
- R.Left := Rect.Left + 2;
- R.Top := Rect.Top + 3;
- R.Right := R.Right - 2;
- R.Bottom := Rect.Bottom - 2;
- BMP := Graphics.TBitmap.Create;
- BMP.SetSize(10, 10);
- BMP.Canvas.Pen.Color := clWhite;
- BMP.Canvas.Brush.Color := clWhite;
- BMP.Canvas.LineTo(9, 9);
- ACanvas.StretchDraw(R, BMP);
- BMP.Free;
- ACanvas.Pen.Color := clWhite;
- ACanvas.Brush.Style := bsClear;
- ACanvas.RoundRect(R.Left - 1, R.Top - 1, R.Right + 1, R.Bottom + 1, 3, 3);
- end;
- {$endregion'}
- {$region '绘制节点文字'}
- Rect.Left := Rect.Left + 3;
- R.Left := Rect.Left;
- R.Top := Rect.Top;
- R.Right := Rect.Left + ACaptionWidth + ALeaveMessageWidth + ADisplayMessageWidth - 1 + 2;
- if R.Right >= Width - DecWidthForSmallIcon then R.Right := Width - DecWidthForSmallIcon - 5;
- ACanvas.Brush.Style := bsClear;
- if Node.StateIndex = 0 then
- begin
- ACanvas.Font.Color := clBlack;
- ACanvas.TextRect(R, Rect.Left, Rect.Top + 6, ACaption);
- end
- else
- begin
- Employee := Node.Data;
- if Employee.FCaptionColor <> $00FFFFFF then
- ACanvas.Font.Color := Employee.FCaptionColor
- else if (Employee.FLoginState = stOffline) or (Employee.FLoginState = stHidden) then
- ACanvas.Font.Color := clGray
- else
- ACanvas.Font.Color := clBlack;
- ACanvas.TextRect(R, Rect.Left, Rect.Top + 6, ACaption);
- ACanvas.Font.Color := clGray;
- ACanvas.TextRect(R, Rect.Left + ACaptionWidth, Rect.Top + 6, ALeaveMessage);
- ACanvas.Font.Color := clGray;
- ACanvas.TextRect(R, Rect.Left + ACaptionWidth + ALeaveMessageWidth, Rect.Top + 6, ADisplayMessage);
- Employee.FTextRect.Left := Node.DisplayRect(False).Left + R.Left;
- Employee.FTextRect.Top := Node.DisplayRect(False).Top;
- Employee.FTextRect.Right := Employee.FTextRect.Left + (R.Right - R.Left);
- Employee.FTextRect.Bottom := Node.DisplayRect(False).Bottom;
- end;
- {$endregion}
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCNoScrollBarTreeView.TreeViewCustomDrawItem(Sender: TCustomTreeView;
- Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
- var
- NodeRect,
- R: TRect;
- begin
- DefaultDraw := False;
- try
- NodeRect := Node.DisplayRect(False);
- //if NodeRect.top - ABS(FContacterTreeView.FNoScrollBarTreeView.Top) > FContacterTreeView.Height then
- // Exit;
- //if NodeRect.Bottom - ABS(FContacterTreeView.FNoScrollBarTreeView.Top) < 0 then
- // Exit;
- //启用缓冲,先在 FBufferedBitmap 绘好图形
- FBufferedBitmap.Width := NodeRect.Right - NodeRect.Left;
- FBufferedBitmap.Height := NodeRect.Bottom - NodeRect.Top;
- FBufferedBitmap.Canvas.Brush.Color := clWhite;
- FBufferedBitmap.Canvas.Pen.Color := clBlack;
- R.Left:= 0;
- R.Top := 0;
- R.Right := FBufferedBitmap.Width;
- R.Bottom := FBufferedBitmap.Height;
- DrawContacterItem(FBufferedBitmap.Canvas, Node, R , State);
- //将绘好的图形复制到Canvas上去
- Canvas.CopyRect(NodeRect, FBufferedBitmap.Canvas, R);
- except
- end;
- end;
- //------------------------------------------------------------------------------
- function TLXUMCNoScrollBarTreeView.GetExpandedItemCount: Integer;
- var
- Node: TTreeNode;
- ExpandedNodeCount: Integer;
- begin
- ExpandedNodeCount := 0;
- Node := Items.GetFirstNode;
- while Node <> nil do
- begin
- if Node.IsVisible then Inc(ExpandedNodeCount, 1);
- Node := Node.GetNext;
- end;
- Result := ExpandedNodeCount;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCNoScrollBarTreeView.WMEraseBKGND(var Message: TWMEraseBKGND);
- begin
- Message.Result := 1; // 已处理
- end;
- //------------------------------------------------------------------------------
- constructor TLXUMCNoScrollBarTreeView.Create(AOwner: TComponent);
- var
- ImageList: TImageList;
- begin
- inherited Create(AOwner);
- ParentColor := False;
- ParentBackground := False;
- DoubleBuffered := False;
-
- FBufferedBitmap := Graphics.TBitMap.Create;
- ImageList := TImageList.Create(Self);
- ImageList.Width := 16;
- ImageList.Height := 16;
- Images := ImageList;
- OnCustomDrawItem := TreeViewCustomDrawItem;
- OnMouseDown := TreeViewMouseDown;
- OnMouseUp := TreeViewMouseUp;
- OnDblClick := TreeViewDblClick;
- OnMouseLeave := TreeViewMouseLeave;
- OnMouseMove := TreeViewMouseMove;
- end;
- //------------------------------------------------------------------------------
- destructor TLXUMCNoScrollBarTreeView.Destroy;
- var
- ImageList: TImageList;
- begin
- try
- FreeAndNil(FBufferedBitmap);
- ImageList := TImageList(Images);
- FreeAndNil(ImageList);
- finally
- inherited Destroy;
- end;
- end;
- {$endregion}
- {TRealICQScrollBar}
- {$region 'TRealICQScrollBar'}
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.TopButtonImageMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- var
- WaitTimes: Integer;
- begin
- FTopButtonImage.Picture.Assign(FContacterTreeView.FScrollTopButtonPictureDown);
- FButtonDown := True;
- WaitTimes := 0;
- while FButtonDown do
- begin
- if (WaitTimes = 0) or (WaitTimes > 10) then
- begin
- if FContacterTreeView.FNoScrollBarTreeView.Top = 0 then Exit;
- FContacterTreeView.FNoScrollBarTreeView.Top := FContacterTreeView.FNoScrollBarTreeView.Top + FContacterTreeView.FNoScrollBarTreeView.ItemHeight;
- DrawScrollBar;
- end;
- Application.ProcessMessages;
- Sleep(30);
- Inc(WaitTimes);
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.TopButtonImageMouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- begin
- FTopButtonImage.Picture.Assign(FContacterTreeView.FScrollTopButtonPictureHover);
- FButtonDown := False;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.TopButtonImageMouseEnter(Sender: TObject);
- begin
- FTopButtonImage.Picture.Assign(FContacterTreeView.FScrollTopButtonPictureHover);
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.TopButtonImageMouseLeave(Sender: TObject);
- begin
- FTopButtonImage.Picture.Assign(FContacterTreeView.FScrollTopButtonPictureNormal);
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.BottomButtonImageMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- var
- WaitTimes: Integer;
- begin
- FBottomButtonImage.Picture.Assign(FContacterTreeView.FScrollBottomButtonPictureDown);
- FButtonDown := True;
- WaitTimes := 0;
- while FButtonDown do
- begin
- if (WaitTimes = 0) or (WaitTimes > 10) then
- begin
- if FContacterTreeView.FNoScrollBarTreeView.Top <= -(FContacterTreeView.FNoScrollBarTreeView.Height - FContacterTreeView.Height) then Exit;
- FContacterTreeView.FNoScrollBarTreeView.Top := FContacterTreeView.FNoScrollBarTreeView.Top - FContacterTreeView.FNoScrollBarTreeView.ItemHeight;
- DrawScrollBar;
- end;
- Application.ProcessMessages;
- Sleep(30);
- Inc(WaitTimes);
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.BottomButtonImageMouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- begin
- FBottomButtonImage.Picture.Assign(FContacterTreeView.FScrollBottomButtonPictureHover);
- FButtonDown := False;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.BottomButtonImageMouseEnter(Sender: TObject);
- begin
- FBottomButtonImage.Picture.Assign(FContacterTreeView.FScrollBottomButtonPictureHover);
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.BottomButtonImageMouseLeave(Sender: TObject);
- begin
- FBottomButtonImage.Picture.Assign(FContacterTreeView.FScrollBottomButtonPictureNormal);
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.BarButtonImageMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- begin
- FBarButtonTopImage.Picture.Assign(FContacterTreeView.FScrollBarButtonTopPictureDown);
- FBarButtonMiddleImage.Picture.Assign(FContacterTreeView.FScrollBarButtonMiddlePictureDown);
- FBarButtonBottomImage.Picture.Assign(FContacterTreeView.FScrollBarButtonBottomPictureDown);
- FTrackingBarDown := True;
- FTrackingBarDonwY := Y;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.BarButtonImageMouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- begin
- FBarButtonTopImage.Picture.Assign(FContacterTreeView.FScrollBarButtonTopPictureHover);
- FBarButtonMiddleImage.Picture.Assign(FContacterTreeView.FScrollBarButtonMiddlePictureHover);
- FBarButtonBottomImage.Picture.Assign(FContacterTreeView.FScrollBarButtonBottomPictureHover);
- FTrackingBarDown := False;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.BarButtonImageMouseEnter(Sender: TObject);
- begin
- FBarButtonTopImage.Picture.Assign(FContacterTreeView.FScrollBarButtonTopPictureHover);
- FBarButtonMiddleImage.Picture.Assign(FContacterTreeView.FScrollBarButtonMiddlePictureHover);
- FBarButtonBottomImage.Picture.Assign(FContacterTreeView.FScrollBarButtonBottomPictureHover);
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.BarButtonImageMouseLeave(Sender: TObject);
- begin
- FBarButtonTopImage.Picture.Assign(FContacterTreeView.FScrollBarButtonTopPictureNormal);
- FBarButtonMiddleImage.Picture.Assign(FContacterTreeView.FScrollBarButtonMiddlePictureNormal);
- FBarButtonBottomImage.Picture.Assign(FContacterTreeView.FScrollBarButtonBottomPictureNormal);
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.BarButtonImageMouseMove(Sender: TObject;
- Shift: TShiftState; X, Y: Integer);
- var
- //ModeValue,
- MovedYValue, Increment: Integer;
- begin
- if FTrackingBarDown then
- begin
- MovedYValue := (Y - FTrackingBarDonwY);
- FMovedYValue := FMovedYValue + MovedYValue;
- if FBarButtonTopImage.Top + MovedYValue < (FTopButtonImage.Height + 1) then
- FBarButtonTopImage.Top := (FTopButtonImage.Height + 1)
- else if FBarButtonTopImage.Top + MovedYValue > (FTopButtonImage.Height + 1) + FTrackingBarTopRange then
- FBarButtonTopImage.Top := (FTopButtonImage.Height + 1) + FTrackingBarTopRange
- else
- FBarButtonTopImage.Top := FBarButtonTopImage.Top + MovedYValue;
- FBarButtonMiddleImage.Top := FBarButtonTopImage.Top + FBarButtonTopImage.Height;
- FBarButtonBottomImage.Top := FBarButtonMiddleImage.Top + FBarButtonMiddleImage.Height;
- Increment := Round((FClientRange - FContacterTreeView.Height) * (FMovedYValue / FTrackingBarTopRange));
- if ABS(Increment) < FContacterTreeView.FNoScrollBarTreeView.ItemHeight then Exit;
- {
- ModeValue := Increment mod FContacterTreeView.FNoScrollBarTreeView.ItemHeight;
- if ModeValue <> 0 then
- begin
- if ModeValue > FContacterTreeView.FNoScrollBarTreeView.ItemHeight / 2 then
- begin
- Increment := Increment + (FContacterTreeView.FNoScrollBarTreeView.ItemHeight - ModeValue);
- end
- else
- begin
- Increment := Increment - ModeValue;
- end;
- end;
- }
-
- if FContacterTreeView.FNoScrollBarTreeView.Top - Increment > 0 then
- FContacterTreeView.FNoScrollBarTreeView.Top := 0
- else if FContacterTreeView.FNoScrollBarTreeView.Top - Increment <= -(FContacterTreeView.FNoScrollBarTreeView.Height - FContacterTreeView.Height) then
- FContacterTreeView.FNoScrollBarTreeView.Top := -(FContacterTreeView.FNoScrollBarTreeView.Height - FContacterTreeView.Height)
- else
- FContacterTreeView.FNoScrollBarTreeView.Top := FContacterTreeView.FNoScrollBarTreeView.Top - Increment;
- FMovedYValue := 0;
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.BackgroundImageMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- var
- WaitTimes: Integer;
- begin
- FBackgroundImage.Picture.Assign(FContacterTreeView.FScrollBackgroundPictureDown);
- if (Y > FBarButtonTopImage.Top - 10) and (Y < (FBarButtonBottomImage.Top + FBarButtonBottomImage.Height) + 10) then exit;
- FButtonDown := True;
- WaitTimes := 0;
- while FButtonDown do
- begin
- if (WaitTimes = 0) or (WaitTimes > 10) then
- begin
- if Y < FBarButtonTopImage.Top then
- begin
- if FContacterTreeView.FNoScrollBarTreeView.Top = 0 then Exit;
- if FContacterTreeView.FNoScrollBarTreeView.Top + FContacterTreeView.FNoScrollBarTreeView.ItemHeight*3 > 0 then
- FContacterTreeView.FNoScrollBarTreeView.Top := 0
- else
- FContacterTreeView.FNoScrollBarTreeView.Top := FContacterTreeView.FNoScrollBarTreeView.Top + FContacterTreeView.FNoScrollBarTreeView.ItemHeight*3;
- end
- else if Y > (FBarButtonBottomImage.Top + FBarButtonBottomImage.Height) then
- begin
- if FContacterTreeView.FNoScrollBarTreeView.Top <= -(FContacterTreeView.FNoScrollBarTreeView.Height - FContacterTreeView.Height) then Exit;
- if (FContacterTreeView.FNoScrollBarTreeView.Top - FContacterTreeView.FNoScrollBarTreeView.ItemHeight*3) < -(FContacterTreeView.FNoScrollBarTreeView.Height - FContacterTreeView.Height) then
- FContacterTreeView.FNoScrollBarTreeView.Top := -(FContacterTreeView.FNoScrollBarTreeView.Height - FContacterTreeView.Height)
- else
- FContacterTreeView.FNoScrollBarTreeView.Top := FContacterTreeView.FNoScrollBarTreeView.Top - FContacterTreeView.FNoScrollBarTreeView.ItemHeight*3;
- end;
- DrawScrollBar;
- end;
- Application.ProcessMessages;
- Sleep(30);
- Inc(WaitTimes);
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.BackgroundImageMouseUp(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- begin
- FBackgroundImage.Picture.Assign(FContacterTreeView.FScrollBackgroundPictureHover);
- FButtonDown := False;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.BackgroundImageMouseEnter(Sender: TObject);
- begin
- FBackgroundImage.Picture.Assign(FContacterTreeView.FScrollBackgroundPictureHover);
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.BackgroundImageMouseLeave(Sender: TObject);
- begin
- FBackgroundImage.Picture.Assign(FContacterTreeView.FScrollBackgroundPictureNormal);
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.TreeViewChange(Sender: TObject; Node: TTreeNode);
- begin
- if Node = nil then Exit;
-
- if Node.DisplayRect(False).Bottom - ABS(FContacterTreeView.FNoScrollBarTreeView.Top) > FContacterTreeView.Height then
- FContacterTreeView.FNoScrollBarTreeView.Top := FContacterTreeView.FNoScrollBarTreeView.Top - FContacterTreeView.FNoScrollBarTreeView.ItemHeight;
- if Node.DisplayRect(False).Top - ABS(FContacterTreeView.FNoScrollBarTreeView.Top) < 0 then
- FContacterTreeView.FNoScrollBarTreeView.Top := FContacterTreeView.FNoScrollBarTreeView.Top + FContacterTreeView.FNoScrollBarTreeView.ItemHeight;
- DrawScrollBar;
- if Node.StateIndex = 1 then
- FContacterTreeView.DoSelectItemChanged(Node.Data);
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
- var
- LastRange: Integer;
- begin
- LastRange := FClientRange;
- DrawScrollBar;
- if Node.HasChildren then
- begin
- if Node.DisplayRect(False).Bottom - ABS(FContacterTreeView.FNoScrollBarTreeView.Top) > FContacterTreeView.Height - FContacterTreeView.FNoScrollBarTreeView.ItemHeight then
- begin
- FContacterTreeView.FNoScrollBarTreeView.Top := FContacterTreeView.FNoScrollBarTreeView.Top - (FClientRange - LastRange);
- DrawScrollBar;
- end;
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
- begin
- DrawScrollBar;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.TreeViewResize(Sender: TObject);
- begin
- DrawScrollBar;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.TreeViewMouseWheelUp(Sender: TObject;
- Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
- begin
- if FContacterTreeView.FNoScrollBarTreeView.Top = 0 then Exit;
- FTrackingBarDown := True;
- FContacterTreeView.FNoScrollBarTreeView.Top := FContacterTreeView.FNoScrollBarTreeView.Top + FContacterTreeView.FNoScrollBarTreeView.ItemHeight;
- Handled := True;
- FTrackingBarDown := False;
- DrawScrollBar;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.TreeViewMouseWheelDown(Sender: TObject;
- Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
- begin
- if FContacterTreeView.FNoScrollBarTreeView.Top <= -(FContacterTreeView.FNoScrollBarTreeView.Height - FContacterTreeView.Height) then Exit;
- FTrackingBarDown := True;
- FContacterTreeView.FNoScrollBarTreeView.Top := FContacterTreeView.FNoScrollBarTreeView.Top - FContacterTreeView.FNoScrollBarTreeView.ItemHeight;
- Handled := True;
- FTrackingBarDown := False;
- DrawScrollBar;
- end;
- //------------------------------------------------------------------------------
- procedure TLXUMCTreeViewScrollBar.DrawScrollBar;
- var
- FixedBarButtonHeight: Integer;
- begin
- if FTrackingBarDown then Exit;
- if FDrawing then Exit;
- FDrawing := True;
- FClientRange := FContacterTreeView.FNoScrollBarTreeView.ExpandedItemCount * FContacterTreeView.FNoScrollBarTreeView.ItemHeight;
- FContacterTreeView.FNoScrollBarTreeView.OnResize := nil;
- DisableAlign;
- try
- FContacterTreeView.FNoScrollBarTreeView.Height := FClientRange;
- if FContacterTreeView.FNoScrollBarTreeView.Top <= -(FContacterTreeView.FNoScrollBarTreeView.Height - FContacterTreeView.Height) then
- if FContacterTreeView.FNoScrollBarTreeView.Height > FContacterTreeView.Height then
- FContacterTreeView.FNoScrollBarTreeView.Top := -(FContacterTreeView.FNoScrollBarTreeView.Height - FContacterTreeView.Height);
- if FContacterTreeView.FNoScrollBarTreeView.Top > 0 then FContacterTreeView.FNoScrollBarTreeView.Top := 0;
- if FContacterTreeView.Height >= FContacterTreeView.FNoScrollBarTreeView.Height then FContacterTreeView.FNoScrollBarTreeView.Top := 0;
- if (FClientRange <= FContacterTreeView.Height) or (FClientRange <= 0) then
- begin
- FContacterTreeView.FNoScrollBarTreeView.Width := FContacterTreeView.Width;
- Visible := False;
- Exit;
- end;
-
- FixedBarButtonHeight := FTopButtonImage.Height + FBottomButtonImage.Height;
- if (FixedBarButtonHeight >= FContacterTreeView.Height) then
- begin
- FContacterTreeView.FNoScrollBarTreeView.Width := FContacterTreeView.Width;
- Visible := False;
- Exit;
- end;
- FixedBarButtonHeight := FixedBarButtonHeight + FContacterTreeView.FScrollBarButtonTopPictureNormal.Height + FContacterTreeView.FScrollBarButtonBottomPictureNormal.Height + 2;
- if (FixedBarButtonHeight >= FContacterTreeView.Height) then
- begin
- FBarButtonTopImage.Visible := False;
- FBarButtonMiddleImage.Visible := False;
- FBarButtonBottomImage.Visible := False;
- end
- else
- begin
- FBarButtonTopImage.Visible := True;
- FBarButtonMiddleImage.Visible := True;
- FBarButtonBottomImage.Visible := True;
- end;
- FClientRange := FClientRange + FContacterTreeView.Height mod FContacterTreeView.FNoScrollBarTreeView.ItemHeight;
- FScrollRange := FContacterTreeView.Height - FixedBarButtonHeight;
- Visible := True;
- Width := FContacterTreeView.FScrollTopButtonPictureNormal.Width;
- Height := FContacterTreeView.Height;
- FContacterTreeView.FNoScrollBarTreeView.Width := FContacterTreeView.Width - Width;
- if not FAssignedPicture then FTopButtonImage.Picture.Assign(FContacterTreeView.FScrollTopButtonPictureNormal);
- FTopButtonImage.Left := 0;
- FTopButtonImage.Top := 0;
-
- if not FAssignedPicture then FBottomButtonImage.Picture.Assign(FContacterTreeView.FScrollBottomButtonPictureNormal);
- FBottomButtonImage.Left := 0;
- FBottomButtonImage.Top := FContacterTreeView.Height - FTopButtonImage.Height;
- if not FAssignedPicture then FBarButtonTopImage.Picture.Assign(FContacterTreeView.FScrollBarButtonTopPictureNormal);
- FBarButtonTopImage.Left := 0;
- if not FAssignedPicture then FBarButtonMiddleImage.Picture.Assign(FContacterTreeView.FScrollBarButtonMiddlePictureNormal);
- FBarButtonMiddleImage.Left := 0;
- FBarButtonMiddleImage.Height := Round(FScrollRange * (FContacterTreeView.Height / FClientRange));
- FBarButtonMiddleImage.Width := FContacterTreeView.FScrollBarButtonMiddlePictureNormal.Width;
- if not FAssignedPicture then FBarButtonBottomImage.Picture.Assign(FContacterTreeView.FScrollBarButtonBottomPictureNormal);
- FBarButtonBottomImage.Left := 0;
- FTrackingBarTopRange := FScrollRange - FBarButtonMiddleImage.Height - 1;
- if FContacterTreeView.FNoScrollBarTreeView.Top = -(FContacterTreeView.FNoScrollBarTreeView.Height - FContacterTreeView.Height) then
- FBarButtonTopImage.Top := (FTopButtonImage.Height + 1) + FTrackingBarTopRange
- else
- FBarButtonTopImage.Top := (FTopButtonImage.Height + 1) + Round(FTrackingBarTopRange * (-FContacterTreeView.FNoScrollBarTreeView.Top/(FClientRange - FContacterTreeView.Height)));
- FBarButtonMiddleImage.Top := FBarButtonTopImage.Top + FBarButtonTopImage.Height;
- FBarButtonBottomImage.Top := FBarButtonMiddleImage.Top + FBarButtonMiddleImage.Height;
- if not FAssignedPicture then FBackgroundImage.Picture.Assign(FContacterTreeView.FScrollBackgroundPictureNormal);
- FBackgroundImage.SendToBack;
- FAssignedPicture := True;
- finally
- EnableAlign;
- FDrawing := False;
- FContacterTreeView.FNoScrollBarTreeView.OnResize := TreeViewResize;
- FContacterTreeView.FNoScrollBarTreeView.Repaint;
- end;
- end;
- //------------------------------------------------------------------------------
- constructor TLXUMCTreeViewScrollBar.Create(AOwner: TComponent);
- begin
- inherited Create(AOwner);
- Width := 20;
- Height := 180;
- Caption := '';
- DoubleBuffered := True;
- ParentColor := True;
- BevelInner := bvNone;
- BevelOuter := bvNone;
- FDrawing := True;
- FTopButtonImage := TRealICQHoverImage.Create(Self);
- FTopButtonImage.Parent := Self;
- FTopButtonImage.AutoSize := True;
- FTopButtonImage.Transparent := True;
- FTopButtonImage.Anchors := [akLeft,akTop];
- FTopButtonImage.OnMouseEnter := TopButtonImageMouseEnter;
- FTopButtonImage.OnMouseLeave := TopButtonImageMouseLeave;
- FTopButtonImage.OnMouseDown := TopButtonImageMouseDown;
- FTopButtonImage.OnMouseUp := TopButtonImageMouseUp;
- FBottomButtonImage := TRealICQHoverImage.Create(Self);
- FBottomButtonImage.Parent := Self;
- FBottomButtonImage.AutoSize := True;
- FBottomButtonImage.Transparent := True;
- FBottomButtonImage.Anchors := [akLeft,akBottom];
- FBottomButtonImage.OnMouseEnter := BottomButtonImageMouseEnter;
- FBottomButtonImage.OnMouseLeave := BottomButtonImageMouseLeave;
- FBottomButtonImage.OnMouseDown := BottomButtonImageMouseDown;
- FBottomButtonImage.OnMouseUp := BottomButtonImageMouseUp;
- FBarButtonTopImage := TRealICQHoverImage.Create(Self);
- FBarButtonTopImage.Parent := Self;
- FBarButtonTopImage.AutoSize := True;
- FBarButtonTopImage.Transparent := False;
- FBarButtonTopImage.OnMouseEnter := BarButtonImageMouseEnter;
- FBarButtonTopImage.OnMouseLeave := BarButtonImageMouseLeave;
- FBarButtonTopImage.OnMouseDown := BarButtonImageMouseDown;
- FBarButtonTopImage.OnMouseUp := BarButtonImageMouseUp;
- FBarButtonTopImage.OnMouseMove := BarButtonImageMouseMove;
- FBarButtonMiddleImage := TRealICQHoverImage.Create(Self);
- FBarButtonMiddleImage.Parent := Self;
- FBarButtonMiddleImage.AutoSize := False;
- FBarButtonMiddleImage.Transparent := False;
- FBarButtonMiddleImage.Stretch := True;
- FBarButtonMiddleImage.OnMouseEnter := BarButtonImageMouseEnter;
- FBarButtonMiddleImage.OnMouseLeave := BarButtonImageMouseLeave;
- FBarButtonMiddleImage.OnMouseDown := BarButtonImageMouseDown;
- FBarButtonMiddleImage.OnMouseUp := BarButtonImageMouseUp;
- FBarButtonMiddleImage.OnMouseMove := BarButtonImageMouseMove;
- FBarButtonBottomImage := TRealICQHoverImage.Create(Self);
- FBarButtonBottomImage.Parent := Self;
- FBarButtonBottomImage.AutoSize := True;
- FBarButtonBottomImage.Transparent := False;
- FBarButtonBottomImage.OnMouseEnter := BarButtonImageMouseEnter;
- FBarButtonBottomImage.OnMouseLeave := BarButtonImageMouseLeave;
- FBarButtonBottomImage.OnMouseDown := BarButtonImageMouseDown;
- FBarButtonBottomImage.OnMouseUp := BarButtonImageMouseUp;
- FBarButtonBottomImage.OnMouseMove := BarButtonImageMouseMove;
- FBackgroundImage := TRealICQHoverImage.Create(Self);
- FBackgroundImage.Parent := Self;
- FBackgroundImage.AutoSize := False;
- FBackgroundImage.Stretch := True;
- FBackgroundImage.Transparent := False;
- FBackgroundImage.Align := alClient;
- FBackgroundImage.OnMouseEnter := BackgroundImageMouseEnter;
- FBackgroundImage.OnMouseLeave := BackgroundImageMouseLeave;
- FBackgroundImage.OnMouseDown := BackgroundImageMouseDown;
- FBackgroundImage.OnMouseUp := BackgroundImageMouseUp;
- FMovedYValue := 0;
- end;
- //------------------------------------------------------------------------------
- destructor TLXUMCTreeViewScrollBar.Destroy;
- begin
- FreeAndNil(FBackgroundImage);
- FreeAndNil(FBarButtonBottomImage);
- FreeAndNil(FBarButtonMiddleImage);
- FreeAndNil(FBarButtonTopImage);
- FreeAndNil(FBottomButtonImage);
- FreeAndNil(FTopButtonImage);
- inherited Destroy;
- end;
- {$endregion}
- {TRealICQGroupListItems}
- {$region 'TRealICQGroupListItems'}
- //------------------------------------------------------------------------------
- constructor TRealICQGroupListItems.Create(AContacterTreeView: TRealICQFriendTreeView);
- begin
- inherited Create;
- FContacterTreeView := AContacterTreeView;
- end;
- //------------------------------------------------------------------------------
- destructor TRealICQGroupListItems.Destroy;
- begin
- Clear;
- inherited Destroy;
- end;
- //------------------------------------------------------------------------------
- function TRealICQGroupListItems.GetObject(Index: Integer): TObject;
- begin
- Result := FContacterTreeView.FBranchs.Objects[Index];
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQGroupListItems.Put(Index: Integer; const S: string);
- begin
- end;
- //------------------------------------------------------------------------------
- function TRealICQGroupListItems.Get(Index: Integer): string;
- begin
- Result := FContacterTreeView.FBranchs[Index];
- end;
- //------------------------------------------------------------------------------
- function TRealICQGroupListItems.GetCount: Integer;
- begin
- Result := FContacterTreeView.FBranchs.Count;
- end;
- //------------------------------------------------------------------------------
- function TRealICQGroupListItems.Add(const S: string): Integer;
- begin
- Result := -1;
- end;
- //------------------------------------------------------------------------------
- function TRealICQGroupListItems.AddObject(const S: string; AObject: TObject): Integer;
- var
- Branch,
- TmpBranch: TRealICQGroup;
- iLoop: Integer;
- begin
- Branch := AObject as TRealICQGroup;
- Branch.FContacterTreeView := FContacterTreeView;
- Branch.FNode := FContacterTreeView.FNoScrollBarTreeView.Items.AddChildObject(nil, Branch.FGroupName, Branch);
- Branch.FNode.StateIndex := 0;
- //FContacterTreeView.FTreeViewScrollBar.DrawScrollBar;
- Result := FContacterTreeView.FBranchs.AddObject(S, Branch);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQGroupListItems.Insert(Index: Integer; const S: string);
- begin
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQGroupListItems.Move(CurIndex, NewIndex: Integer);
- begin
- FContacterTreeView.FBranchs.Move(CurIndex, NewIndex);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQGroupListItems.Clear;
- begin
- if FContacterTreeView.FBranchs = nil then Exit;
- while Count > 0 do
- begin
- Delete(0);
- end;
- FContacterTreeView.FBranchs.Clear;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQGroupListItems.Delete(Index: Integer);
- var
- Branch: TRealICQGroup;
- begin
- Branch := FContacterTreeView.FBranchs.Objects[Index] as TRealICQGroup;
- FreeAndNil(Branch);
- FContacterTreeView.FBranchs.Delete(Index);
- end;
- //------------------------------------------------------------------------------
- function TRealICQGroupListItems.IndexOf(const S: string): Integer;
- begin
- Result := FContacterTreeView.FBranchs.IndexOf(S);
- end;
- {$endregion}
- {TRealICQFriendListItems}
- {$region 'TRealICQFriendListItems'}
- //------------------------------------------------------------------------------
- constructor TRealICQFriendListItems.Create(AContacterTreeView: TRealICQFriendTreeView);
- begin
- inherited Create;
- FContacterTreeView := AContacterTreeView;
- end;
- //------------------------------------------------------------------------------
- destructor TRealICQFriendListItems.Destroy;
- begin
- Clear;
- inherited Destroy;
- end;
- //------------------------------------------------------------------------------
- function TRealICQFriendListItems.GetObject(Index: Integer): TObject;
- begin
- Result := FContacterTreeView.FEmployees.Objects[Index];
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendListItems.Put(Index: Integer; const S: string);
- begin
- end;
- //------------------------------------------------------------------------------
- function TRealICQFriendListItems.Get(Index: Integer): string;
- begin
- Result := FContacterTreeView.FEmployees[Index];
- end;
- //------------------------------------------------------------------------------
- function TRealICQFriendListItems.GetCount: Integer;
- begin
- Result := FContacterTreeView.FEmployees.Count;
- end;
- //------------------------------------------------------------------------------
- function TRealICQFriendListItems.Add(const S: string): Integer;
- begin
- Result := -1;
- end;
- function TRealICQFriendListItems.AddObject(const S: string; AObject: TObject): Integer;
- var
- Friend: TRealICQFriend;
- TmpGroup: TRealICQGroup;
- iLoop: Integer;
- ParentNode: TTreeNode;
- begin
- Friend := AObject as TRealICQFriend;
- Friend.FContacterTreeView := FContacterTreeView;
- with FContacterTreeView.FBranchs do
- begin
- for iLoop :=0 to Count - 1 do {添加至父部门}
- begin
- TmpGroup := TRealICQGroup(Objects[iLoop]);
- if AnsiSameText(Friend.FBranchID, TmpGroup.GroupID) then
- begin
- Friend.FNode := FContacterTreeView.FNoScrollBarTreeView.Items.AddChildObjectFirst(TmpGroup.Node, Friend.FLoginName,Friend);
- Friend.FNode.StateIndex := 1;
- ParentNode := Friend.FNode.Parent;
- // ParentNode.Expanded := False;
- while ParentNode <> nil do
- begin
- TmpGroup := ParentNode.Data;
- Inc(TmpGroup.FEmployeeCount, 1);
- ParentNode := ParentNode.Parent;
- end;
- Break;
- end;
- end;
- end;
- if Friend.FNode = nil then
- begin
- Friend.FNode := FContacterTreeView.FNoScrollBarTreeView.Items.AddChildObjectFirst(nil, Friend.FLoginName, Friend);
- Friend.FNode.StateIndex := 1;
- end;
- //FContacterTreeView.FTreeViewScrollBar.DrawScrollBar;
- Result := FContacterTreeView.FEmployees.AddObject(S, Friend);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendListItems.Insert(Index: Integer; const S: string);
- begin
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendListItems.Move(CurIndex, NewIndex: Integer);
- begin
- FContacterTreeView.FEmployees.Move(CurIndex,NewIndex);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendListItems.Clear;
- begin
- if FContacterTreeView.FEmployees = nil then Exit;
- while Count > 0 do
- begin
- Delete(0);
- end;
- FContacterTreeView.FEmployees.Clear;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFriendListItems.Delete(Index: Integer);
- var
- Employee: TRealICQFriend;
- begin
- Employee := FContacterTreeView.FEmployees.Objects[Index] as TRealICQFriend;
- FreeAndNil(Employee);
- FContacterTreeView.FEmployees.Delete(Index);
- end;
- //------------------------------------------------------------------------------
- function TRealICQFriendListItems.IndexOf(const S: string): Integer;
- begin
- Result := FContacterTreeView.FEmployees.IndexOf(S);
- end;
- {$endregion}
- { TRealICQFlashCaption }
- //------------------------------------------------------------------------------
- constructor TRealICQFlashCaption.Create(AEmployee: TRealICQFriend);
- begin
- inherited Create(True);
- FEmployee := AEmployee;
- FreeOnTerminate := True;
- Resume;
- end;
- //------------------------------------------------------------------------------
- destructor TRealICQFlashCaption.Destroy;
- var
- Rect: TRect;
- begin
- try
- if FEmployee <> nil then
- begin
- FEmployee.FCaptionColor := $00FFFFFF;
- Rect := FEmployee.Node.DisplayRect(False);
- InvalidateRect(FEmployee.FContacterTreeView.FNoScrollBarTreeView.Handle, @Rect, False);
- FEmployee.FFlashCaptionThread := nil;
- end;
- finally
- inherited Destroy;
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFlashCaption.FlashCaptionColor;
- var
- Rect: TRect;
- begin
- if Terminated then exit;
- Rect := FEmployee.Node.DisplayRect(False);
- FEmployee.FCaptionColor := FlashColors[FColorIndex];
- InvalidateRect(FEmployee.FContacterTreeView.FNoScrollBarTreeView.Handle, @Rect, False);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFlashCaption.Execute;
- var
- iLoop,jLoop:Integer;
- begin
- for iLoop:=1 to 3 do
- for jLoop:=1 to FlashColorCount do
- begin
- try
- if Terminated then exit;
- FColorIndex := jLoop;
- Synchronize(FlashCaptionColor);
- if Terminated then exit;
- Sleep(400);
- except
- Exit;
- end;
- end;
- end;
- { TRealICQFlashImage }
- //------------------------------------------------------------------------------
- constructor TRealICQFlashImage.Create(AEmployee: TRealICQFriend);
- begin
- inherited Create(True);
- FEmployee := AEmployee;
- FreeOnTerminate := True;
- Resume;
- end;
- //------------------------------------------------------------------------------
- destructor TRealICQFlashImage.Destroy;
- var
- Rect: TRect;
- begin
- try
- if FEmployee <> nil then
- begin
- FEmployee.FHeadImagePosition := 0;
- Rect := FEmployee.Node.DisplayRect(False);
- InvalidateRect(FEmployee.FContacterTreeView.FNoScrollBarTreeView.Handle, @Rect, False);
- FEmployee.FFlashImageThread := nil;
- end;
- finally
- inherited Destroy;
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFlashImage.FlashImagePosition;
- var
- Rect: TRect;
- begin
- if Terminated then exit;
- Rect := FEmployee.Node.DisplayRect(False);
- FEmployee.FHeadImagePosition := FPosition;
- InvalidateRect(FEmployee.FContacterTreeView.FNoScrollBarTreeView.Handle, @Rect, False);
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQFlashImage.Execute;
- var
- iAdd:Integer;
- begin
- iAdd := 0;
- FPosition := 1;
- while not Terminated do
- begin
- if FPosition=3 then iAdd := -1;
- if FPosition=1 then iAdd := 1;
- FPosition := FPosition + iAdd;
- Synchronize(FlashImagePosition);
- sleep(300);
- end;
- end;
- procedure Register;
- begin
- RegisterComponents('ICQComponnets', [TRealICQFriendTreeView]);
- end;
- end.
|