TalkingFrm.pas 256 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142
  1. unit TalkingFrm;
  2. interface
  3. uses
  4. IdBaseComponent, RealICQDBHistory, IdComponent, IdTCPConnection, IdTCPClient,
  5. IdHTTP, VideoTransmitter, MD5_32, AudioTransmitter, WinInet,
  6. PtoPFileTransmitter, PerlRegEx, TransmitDirection, FileTransmitterObjective,
  7. MD5, RealICQUtils, cvcode, ClipBrd, ShareUtils, DSUtil, DirectShow9,
  8. RealICQModel, MainFrm, GIFImage, pngimage, xFonts, MSHTML, DateUtils, Types,
  9. MyUtils, ShellAPI, RealICQSkinFrm, RealICQUIColor, RealICQColors,
  10. RealICQClient, RealICQContacterListView, Windows, Messages, SysUtils, Variants,
  11. Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, ToolWin, ActnMan,
  12. ActnCtrls, ActnMenus, StdActns, ActnList, XPStyleActnCtrls, RealICQSpeedButton,
  13. ComCtrls, ImgList, StdCtrls, Buttons, RealICQButton, OleCtrls, SHDocVw,
  14. StdStyleActnCtrls, Menus, ActnPopup, RealICQRoundBorderPanel,
  15. RealICQNoBorderPageControl, jpeg, RealICQUserCard, RxRichEd, RealICQRichEdit,
  16. ExtDlgs, StrUtils, ActiveX, XMLDoc, XMLIntf, AppEvnts, RealICQTrackBar,
  17. RealICQMicrophoneVolumeControl, RealICQMasterVolumeControl,
  18. RealICQSingleImageButton, DSPack, ConfirmSendOfflineFileFrm,
  19. RealICQRemoteControlImage, ExtWebBrowser, lxkj_TLB, HTTPApp, UpLoadFileToWeb,
  20. WebBrowserWithUI, MyInputBoxFrm, BlockingTCPClient, FileTransferWithNode,
  21. TransmiteFileMission, UploadOrDownloadFileMission, VCardFrm;
  22. const
  23. TalkingTextColor: string = '#585858'; {对话窗口中系统信息字体颜色}
  24. MaxMessageLength: Integer = 3500; {消息的最大字符数}
  25. type
  26. PImageInfo = ^TImageInfo;
  27. TImageInfo = record
  28. Name: string;
  29. iFlag: Integer;
  30. end;
  31. TTalkingCategory = (tcNormal, tcTeam);
  32. TTalkingForm = class(TRealICQSkinForm)
  33. pnlClient: TPanel;
  34. ActionManager1: TActionManager;
  35. actSaveAsTextFile: TAction;
  36. EditCut: TEditCut;
  37. EditCopy: TEditCopy;
  38. EditPaste: TEditPaste;
  39. EditSelectAll: TEditSelectAll;
  40. EditUndo: TEditUndo;
  41. EditDelete: TEditDelete;
  42. actAlwayOnTop: TAction;
  43. pnlToolBar: TPanel;
  44. Shape1: TShape;
  45. ImgLstForActions: TImageList;
  46. pnlForActionToolBar: TPanel;
  47. actAddUser: TAction;
  48. actSendFile: TAction;
  49. actVideo: TAction;
  50. actAudio: TAction;
  51. ImgLstForShowHideUserPanel: TImageList;
  52. TimerForGetUserInformation: TTimer;
  53. ppMyOptions: TPopupActionBar;
  54. N2: TMenuItem;
  55. V1: TMenuItem;
  56. miShowMyHeadImage: TMenuItem;
  57. miShowMyCard: TMenuItem;
  58. ppYourOptions: TPopupActionBar;
  59. miShowYourHeadImage: TMenuItem;
  60. miShowYourCard: TMenuItem;
  61. miShowYourVideo: TMenuItem;
  62. miShowMyVideo: TMenuItem;
  63. N11: TMenuItem;
  64. miSeeYourDetailInformation: TMenuItem;
  65. FontDialog: TFontDialog;
  66. ppForWebBrowser: TPopupActionBar;
  67. miCopyFromIE: TMenuItem;
  68. miSelAllFromIE: TMenuItem;
  69. ppForInputer: TPopupActionBar;
  70. U1: TMenuItem;
  71. N14: TMenuItem;
  72. C1: TMenuItem;
  73. C2: TMenuItem;
  74. P1: TMenuItem;
  75. T1: TMenuItem;
  76. A1: TMenuItem;
  77. EditFontSet: TAction;
  78. OpenDialog: TOpenDialog;
  79. miSaveImageAs: TMenuItem;
  80. miAddImageToCustomFaces: TMenuItem;
  81. ApplicationEvents: TApplicationEvents;
  82. miSplitAtWebBrowser: TMenuItem;
  83. actPrint: TAction;
  84. actPageSet: TAction;
  85. actPreview: TAction;
  86. actClose: TAction;
  87. actSaveAsHTMLFile: TAction;
  88. actShowHistory: TAction;
  89. actEnter: TAction;
  90. actCtrlEnter: TAction;
  91. ClearInputtingMessageTimer: TTimer;
  92. ImgLstForAudio: TImageList;
  93. ppAudioSet: TPopupActionBar;
  94. miOpenSpeak: TMenuItem;
  95. miCloseSpeak: TMenuItem;
  96. miOpenMic: TMenuItem;
  97. MenuItem14: TMenuItem;
  98. miStopAudioTransmite: TMenuItem;
  99. miCloseMic: TMenuItem;
  100. miStopVideo: TMenuItem;
  101. actStopVideo: TAction;
  102. S1: TMenuItem;
  103. miMyVideoSize: TMenuItem;
  104. miMyVideoMiddleSize: TMenuItem;
  105. miMyVideoSmallSize: TMenuItem;
  106. miYourVideoSize: TMenuItem;
  107. miYourVideoSmallSize: TMenuItem;
  108. miYourVideoBigSize: TMenuItem;
  109. miMyVideoBigSize: TMenuItem;
  110. miYourVideoMiddleSize: TMenuItem;
  111. ReEnabledVideoActionTimer: TTimer;
  112. miSaveYourVideoImageAs: TMenuItem;
  113. miSaveMyVideoImageAs: TMenuItem;
  114. OpenPictureDialog: TOpenPictureDialog;
  115. miSeeTeamDetailInformation: TMenuItem;
  116. ppUserItemRightMenu: TPopupActionBar;
  117. miSendMessage: TMenuItem;
  118. miSeeUserInformation: TMenuItem;
  119. actSeeTeamOptions: TAction;
  120. actQuitTeam: TAction;
  121. actDisbandTeam: TAction;
  122. pnlAdvertisement: TPanel;
  123. pnlForWebBrowserAdvertisement: TPanel;
  124. WebBrowserForAdvertisement: TWebBrowser;
  125. pnlForHideWebBrowserAdvertisement: TPanel;
  126. ppColors: TPopupActionBar;
  127. MenuItem18: TMenuItem;
  128. miMoreColors: TMenuItem;
  129. miShowVideoForm: TMenuItem;
  130. imgToolbarBack: TImage;
  131. spbAddUser: TRealICQSpeedButton;
  132. spbSendFile: TRealICQSpeedButton;
  133. spbAudio: TRealICQSpeedButton;
  134. spbVideo: TRealICQSpeedButton;
  135. spbSeeTeamOptions: TRealICQSpeedButton;
  136. spbQuitTeam: TRealICQSpeedButton;
  137. spbDisbandTeam: TRealICQSpeedButton;
  138. miVideoSet: TMenuItem;
  139. spbUploadFile: TRealICQSpeedButton;
  140. spbRemoteControl: TRealICQSpeedButton;
  141. pnlRC: TPanel;
  142. pnlTalkingArea: TPanel;
  143. Splitter1: TSplitter;
  144. pnlDisplayer: TPanel;
  145. ShpDisplayerTopMiddle: TShape;
  146. ShpDisplayerClient: TShape;
  147. ImgDisplayerTopLeft: TImage;
  148. ImgDisplayerTopRight: TImage;
  149. lblDest: TLabel;
  150. pnlForWebBrowser: TPanel;
  151. pnlHint: TPanel;
  152. Image1: TImage;
  153. LblHint: TLabel;
  154. pnlUserInformation: TPanel;
  155. pnlMyInfo: TPanel;
  156. rndMyInfo: TRealICQRoundBorderPanel;
  157. SpbForMyInfo: TRealICQSpeedButton;
  158. spbMic: TRealICQSpeedButton;
  159. MicrophoneVolume: TRealICQMicrophoneVolumeControl;
  160. pnlTeamCallBoard: TPanel;
  161. rndTeamCallBoard: TRealICQRoundBorderPanel;
  162. Image2: TImage;
  163. lblTeamCallBoardTitle: TLabel;
  164. mmTeamCallBoard: TMemo;
  165. pnlRemoteControl: TPanel;
  166. rndRemoteControl: TRealICQRoundBorderPanel;
  167. btSetControl: TRealICQSpeedButton;
  168. btClose: TRealICQSpeedButton;
  169. btReleaseControl: TRealICQSpeedButton;
  170. lblRCState: TLabel;
  171. SplitterRC: TSplitter;
  172. ppForTeamMenu: TPopupActionBar;
  173. miTeamSendMessage: TMenuItem;
  174. miTeamSMS: TMenuItem;
  175. miTeamSeeUserInfo: TMenuItem;
  176. miTeamAddFriend: TMenuItem;
  177. miAddFriend: TMenuItem;
  178. miSendSms: TMenuItem;
  179. ppForInputerImg: TPopupActionBar;
  180. MenuItem3: TMenuItem;
  181. miCopyImage: TMenuItem;
  182. miPasteImg: TMenuItem;
  183. MenuItem6: TMenuItem;
  184. MenuItem7: TMenuItem;
  185. S2: TMenuItem;
  186. actSaveImgAs: TAction;
  187. actAddImageToCustomFaces: TAction;
  188. F2: TMenuItem;
  189. spbSendFolder: TRealICQSpeedButton;
  190. miSaveToWeb: TMenuItem;
  191. LblSendSMS: TLabel;
  192. LblSendSMS1: TLabel;
  193. PnlShowHideUserInfo: TPanel;
  194. ImgHideShowUserInformation: TImage;
  195. spbTeamNetWorkDisk: TRealICQSpeedButton;
  196. PnlTeamWebDisk: TPanel;
  197. pnlTeamMembers: TPanel;
  198. rndTeamMembers: TRealICQRoundBorderPanel;
  199. SpbForTeamMemberInfo: TRealICQSpeedButton;
  200. rndTeamMemberContainer: TRealICQRoundBorderPanel;
  201. pnlTeamMemberContainer: TPanel;
  202. FLVTeamMembers: TRealICQContacterListView;
  203. rndTeamWebDisk: TRealICQRoundBorderPanel;
  204. Panel2: TPanel;
  205. imgTeamWebDiskToolbarBack: TImage;
  206. lblTeamWebDiskHint: TLabel;
  207. spbCloseTeamWebDisk: TRealICQSpeedButton;
  208. Panel4: TPanel;
  209. WebBrowserForTeamDiskold: TWebBrowser;
  210. pnlForHideTeamDisk: TPanel;
  211. N3: TMenuItem;
  212. N4: TMenuItem;
  213. N5: TMenuItem;
  214. N6: TMenuItem;
  215. N7: TMenuItem;
  216. N8: TMenuItem;
  217. N9: TMenuItem;
  218. N10: TMenuItem;
  219. N17: TMenuItem;
  220. TimerForCheckPastedContent: TTimer;
  221. actCopyScreenHideForm: TAction;
  222. spbSendSMS: TRealICQSpeedButton;
  223. SaveDialog: TSaveDialog;
  224. miAddWorkOrder: TMenuItem;
  225. spbUploadTeamFile: TRealICQSpeedButton;
  226. spbUploadTeamFileProcess: TRealICQSpeedButton;
  227. WebBrowserForTeamDisk: TWebBrowserWithUI;
  228. UpdateAlias: TMenuItem;
  229. CaptureGraph: TFilterGraph;
  230. VideoSourceFilter: TFilter;
  231. spbPostSMS: TRealICQSpeedButton;
  232. pnlInputer: TPanel;
  233. ImgInputerTopLeft: TImage;
  234. ImgInputerTopRight: TImage;
  235. ImgInputerTopMiddle: TImage;
  236. ShpInputerClient: TShape;
  237. spbFont: TRealICQSpeedButton;
  238. spbFace: TRealICQSpeedButton;
  239. lblState: TLabel;
  240. spbSendImage: TRealICQSpeedButton;
  241. spbCopyScreen: TRealICQSpeedButton;
  242. spbSelUIColor: TRealICQSpeedButton;
  243. spbShakeWindow: TRealICQSpeedButton;
  244. spbBackground: TRealICQSpeedButton;
  245. spbHistroyMessage: TRealICQSpeedButton;
  246. pnlInputeBack: TPanel;
  247. Panel1: TPanel;
  248. RichEditTemp: TRealICQRichEdit;
  249. RichEdInputer: TRealICQRichEdit;
  250. Panel5: TPanel;
  251. Image3: TImage;
  252. btSend: TRealICQButton;
  253. btCloseTalk: TRealICQButton;
  254. spbUserInfo: TRealICQSpeedButton;
  255. lblTeamMemberCount: TLabel;
  256. actClearWeb: TAction;
  257. E1: TMenuItem;
  258. N12: TMenuItem;
  259. E2: TMenuItem;
  260. actClearEdit: TAction;
  261. btDownArrow: TRealICQButton;
  262. ppForSnap: TPopupActionBar;
  263. ppForDown: TPopupActionBar;
  264. H1: TMenuItem;
  265. N16: TMenuItem;
  266. Enter: TMenuItem;
  267. CtrlEnter: TMenuItem;
  268. ppForMsg: TPopupActionBar;
  269. H2: TMenuItem;
  270. MClearWindow: TMenuItem;
  271. spbNormalMsg: TRealICQSpeedButton;
  272. spbEncryMsg: TRealICQSpeedButton;
  273. Image4: TImage;
  274. pnlYourInfo: TPanel;
  275. rndYourInfo: TRealICQRoundBorderPanel;
  276. SpbForYourInfo: TRealICQSpeedButton;
  277. spbSpk: TRealICQSpeedButton;
  278. MasterVolume: TRealICQMasterVolumeControl;
  279. rndMy: TRealICQRoundBorderPanel;
  280. pgcMyInfo: TRealICQNoBorderPageControl;
  281. tsMyHeadImage: TTabSheet;
  282. ImgHeadForMyInfo: TImage;
  283. tsMyCard: TTabSheet;
  284. cardMine: TRealICQUserCard;
  285. tsMyVideo: TTabSheet;
  286. ImgMyVideo: TImage;
  287. lblMyInfo: TLabel;
  288. N18: TMenuItem;
  289. ShpHeadBackForMyInfo: TShape;
  290. lblYourInfo: TLabel;
  291. rndYour: TRealICQRoundBorderPanel;
  292. pgcYourInfo: TRealICQNoBorderPageControl;
  293. tsYourHeadImage: TTabSheet;
  294. ShpHeadBackForYourInfo: TShape;
  295. ImgHeadForYourInfo: TImage;
  296. tsYourCard: TTabSheet;
  297. cardYour: TRealICQUserCard;
  298. tsYourVideo: TTabSheet;
  299. ImgYourVideo: TImage;
  300. N1: TMenuItem;
  301. HTML1: TMenuItem;
  302. N19: TMenuItem;
  303. N20: TMenuItem;
  304. V2: TMenuItem;
  305. U2: TMenuItem;
  306. pnlForHideWebBrowser: TPanel;
  307. WebBrowser: TWebBrowser;
  308. spbSet: TRealICQSpeedButton;
  309. ppForSet: TPopupActionBar;
  310. O1: TMenuItem;
  311. N13: TMenuItem;
  312. I1: TMenuItem;
  313. W1: TMenuItem;
  314. spbAbout: TRealICQSpeedButton;
  315. O2: TMenuItem;
  316. btnQR: TRealICQSpeedButton;
  317. //ImgMyVideoBorder: TImage;
  318. procedure spbHistroyMessageClick(Sender: TObject);
  319. procedure UpdateAliasClick(Sender: TObject);
  320. procedure spbUploadTeamFileClick(Sender: TObject);
  321. procedure miAddWorkOrderClick(Sender: TObject);
  322. procedure spbSendSMSClick(Sender: TObject);
  323. procedure sbpSMSClick(Sender: TObject);
  324. procedure actCopyScreenHideFormExecute(Sender: TObject);
  325. procedure ppForWebBrowserPopup(Sender: TObject);
  326. procedure ppForInputerImgPopup(Sender: TObject);
  327. procedure TimerForCheckPastedContentTimer(Sender: TObject);
  328. procedure RichEdInputerInsertObject(Sender: TObject);
  329. procedure RichEdInputerDropFiles(Sender: TObject; AFiles: TStringList);
  330. procedure WebBrowserForTeamDiskoldBeforeNavigate2(ASender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool);
  331. procedure WebBrowserForTeamDiskoldDocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
  332. procedure RichEdInputerSelectionChange(Sender: TObject);
  333. procedure EditPasteUpdate(Sender: TObject);
  334. procedure EditPasteExecute(Sender: TObject);
  335. procedure spbCloseTeamWebDiskClick(Sender: TObject);
  336. procedure spbTeamNetWorkDiskClick(Sender: TObject);
  337. procedure FormResize(Sender: TObject);
  338. procedure ImgHideShowUserInformationClick(Sender: TObject);
  339. procedure ImgHideShowUserInformationMouseLeave(Sender: TObject);
  340. procedure ImgHideShowUserInformationMouseEnter(Sender: TObject);
  341. procedure LblSendSMSClick(Sender: TObject);
  342. procedure LblSendSMSMouseLeave(Sender: TObject);
  343. procedure LblSendSMSMouseEnter(Sender: TObject);
  344. procedure miSaveToWebClick(Sender: TObject);
  345. procedure spbSendFolderClick(Sender: TObject);
  346. procedure miPasteImgClick(Sender: TObject);
  347. procedure actAddImageToCustomFacesExecute(Sender: TObject);
  348. procedure actSaveImgAsExecute(Sender: TObject);
  349. procedure ppForInputerImgGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  350. procedure miCopyImageClick(Sender: TObject);
  351. procedure miTeamAddFriendClick(Sender: TObject);
  352. procedure miAddFriendClick(Sender: TObject);
  353. procedure miTeamSeeUserInfoClick(Sender: TObject);
  354. procedure ppForTeamMenuPopup(Sender: TObject);
  355. procedure miSendSmsClick(Sender: TObject);
  356. procedure miTeamSMSClick(Sender: TObject);
  357. procedure miTeamSendMessageClick(Sender: TObject);
  358. procedure ppForTeamMenuGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  359. procedure btCloseClick(Sender: TObject);
  360. procedure btReleaseControlClick(Sender: TObject);
  361. procedure btSetControlClick(Sender: TObject);
  362. procedure spbRemoteControlClick(Sender: TObject);
  363. procedure spbUploadFileClick(Sender: TObject);
  364. procedure miMoreColorsClick(Sender: TObject);
  365. procedure ppColorsPopup(Sender: TObject);
  366. procedure ppColorsGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  367. procedure actShowHistoryExecute(Sender: TObject);
  368. procedure WebBrowserForAdvertisementBeforeNavigate2(ASender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool);
  369. procedure WebBrowserForAdvertisementDocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
  370. procedure actAddUserExecute(Sender: TObject);
  371. procedure actDisbandTeamExecute(Sender: TObject);
  372. procedure actQuitTeamExecute(Sender: TObject);
  373. procedure actSeeTeamOptionsExecute(Sender: TObject);
  374. procedure miSeeUserInformationClick(Sender: TObject);
  375. procedure miSendMessageClick(Sender: TObject);
  376. procedure ppUserItemRightMenuPopup(Sender: TObject);
  377. procedure ppUserItemRightMenuGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  378. procedure miSeeTeamDetailInformationClick(Sender: TObject);
  379. procedure spbCopyScreenClick(Sender: TObject);
  380. procedure miSaveYourVideoImageAsClick(Sender: TObject);
  381. procedure miSaveMyVideoImageAsClick(Sender: TObject);
  382. procedure ReEnabledVideoActionTimerTimer(Sender: TObject);
  383. procedure miMyVideoSmallSizeClick(Sender: TObject);
  384. procedure miYourVideoSmallSizeClick(Sender: TObject);
  385. procedure actStopVideoExecute(Sender: TObject);
  386. procedure actVideoExecute(Sender: TObject);
  387. procedure miStopAudioTransmiteClick(Sender: TObject);
  388. procedure miOpenMicClick(Sender: TObject);
  389. procedure miCloseMicClick(Sender: TObject);
  390. procedure miOpenSpeakClick(Sender: TObject);
  391. procedure miCloseSpeakClick(Sender: TObject);
  392. procedure spbMicClick(Sender: TObject);
  393. procedure spbSpkClick(Sender: TObject);
  394. procedure ppAudioSetGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  395. procedure actAudioExecute(Sender: TObject);
  396. procedure FormShow(Sender: TObject);
  397. procedure ClearInputtingMessageTimerTimer(Sender: TObject);
  398. procedure actCtrlEnterExecute(Sender: TObject);
  399. procedure actEnterExecute(Sender: TObject);
  400. procedure actAlwayOnTopExecute(Sender: TObject);
  401. procedure actEmptyWebExecute(Sender: TObject);
  402. procedure spbSendImageClick(Sender: TObject);
  403. procedure actSaveAsHTMLFileExecute(Sender: TObject);
  404. procedure actPreviewExecute(Sender: TObject);
  405. procedure actPrintExecute(Sender: TObject);
  406. procedure actPageSetExecute(Sender: TObject);
  407. procedure actSaveAsTextFileExecute(Sender: TObject);
  408. procedure actCloseExecute(Sender: TObject);
  409. procedure ApplicationEventsMessage(var Msg: tagMSG; var Handled: Boolean);
  410. procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  411. procedure actSendFileExecute(Sender: TObject);
  412. procedure EditFontSetExecute(Sender: TObject);
  413. procedure RichEdInputerMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  414. procedure ppForInputerGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  415. procedure miSelAllFromIEClick(Sender: TObject);
  416. procedure miCopyFromIEClick(Sender: TObject);
  417. procedure ppForWebBrowserGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  418. procedure WebBrowserBeforeNavigate2(ASender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool);
  419. procedure WebBrowserDocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
  420. procedure spbFaceClick(Sender: TObject);
  421. procedure spbFontClick(Sender: TObject);
  422. procedure RichEdInputerChange(Sender: TObject);
  423. procedure btSendClick(Sender: TObject);
  424. procedure lblDestMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  425. procedure lblDestMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  426. procedure lblDestClick(Sender: TObject);
  427. procedure lblDestMouseLeave(Sender: TObject);
  428. procedure lblDestMouseEnter(Sender: TObject);
  429. procedure miSeeYourDetailInformationClick(Sender: TObject);
  430. procedure rndMyInfoResize(Sender: TObject);
  431. procedure tsMyVideoShow(Sender: TObject);
  432. procedure miShowMyVideoClick(Sender: TObject);
  433. procedure tsYourVideoShow(Sender: TObject);
  434. procedure miShowYourVideoClick(Sender: TObject);
  435. procedure tsMyCardShow(Sender: TObject);
  436. procedure tsMyHeadImageShow(Sender: TObject);
  437. procedure miShowMyCardClick(Sender: TObject);
  438. procedure miShowMyHeadImageClick(Sender: TObject);
  439. procedure tsYourCardShow(Sender: TObject);
  440. procedure tsYourHeadImageShow(Sender: TObject);
  441. procedure miShowYourCardClick(Sender: TObject);
  442. procedure miShowYourHeadImageClick(Sender: TObject);
  443. procedure SpbForYourInfoClick(Sender: TObject);
  444. procedure ppYourOptionsGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  445. procedure ppMyOptionsGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  446. procedure SpbForMyInfoClick(Sender: TObject);
  447. procedure pnlDisplayerResize(Sender: TObject);
  448. procedure TimerForGetUserInformationTimer(Sender: TObject);
  449. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  450. //procedure spbShowHideUserInformationClick(Sender: TObject);
  451. procedure spbSelUIColorClick(Sender: TObject);
  452. procedure FormDestroy(Sender: TObject);
  453. procedure FormCreate(Sender: TObject);
  454. procedure spbShakeWindowClick(Sender: TObject);
  455. procedure spbBackgroundClick(Sender: TObject);
  456. procedure miShowVideoFormClick(Sender: TObject);
  457. procedure ApplicationEventsException(Sender: TObject; E: Exception);
  458. procedure miVideoSetClick(Sender: TObject);
  459. //procedure pnlTeamCallBoardClick(Sender: TObject);
  460. procedure WebBrowserForTeamDiskBeforeNavigate2(ASender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool);
  461. //procedure spbCopyScreen2Click(Sender: TObject);
  462. procedure spbUserInfoClick(Sender: TObject);
  463. //procedure chkEncryMessageClick(Sender: TObject);
  464. procedure actClearWebExecute(Sender: TObject);
  465. procedure actClearEditExecute(Sender: TObject);
  466. procedure btDownArrowClick(Sender: TObject);
  467. procedure ppForSnapGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  468. procedure ppForDownGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  469. procedure ppForMsgGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  470. procedure ppForSetGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  471. procedure MClearWindowClick(Sender: TObject);
  472. procedure spbEncryMsgClick(Sender: TObject);
  473. procedure spbNormalMsgClick(Sender: TObject);
  474. procedure Splitter1CanResize(Sender: TObject; var NewSize: Integer; var Accept: Boolean);
  475. procedure spbSetClick(Sender: TObject);
  476. procedure spbAboutClick(Sender: TObject);
  477. procedure btnQRClick(Sender: TObject);
  478. procedure pnlTalkingAreaClick(Sender: TObject);
  479. procedure cardYourResize(Sender: TObject);
  480. procedure btCloseTalkClick(Sender: TObject);
  481. //procedure tsMyVideoContextPopup(Sender: TObject; MousePos: TPoint;
  482. // var Handled: Boolean);
  483. private
  484. FVCardFrom: TVCardForm;
  485. FTcpClient: TBlockingTCPClient;
  486. FCategory: TTalkingCategory;
  487. FRightMouseClickedFace: TFaceInRichEdit;
  488. FTeamID: string;
  489. FTeamUpLoadFile: TUpLoadFile;
  490. //显示群组成员列表的ListView
  491. FFileTransmitters: TStringList;
  492. FOldWidth, FOldHeight, FOldWidthOfUserInfo, FMinWidthOfYourPanel, FMinWidthOfMyPanel: Integer;
  493. FSender, FReceiver: string;
  494. FFaceMenuAtFileName: string; //在自定义表情上弹出右键菜单时所指的图片文件的名称
  495. FSetFaceMenuAtFileNameTicket: Cardinal;
  496. FLastSendInputtingMessageTicket: Cardinal;
  497. FAudioMission: TAudioMission;
  498. FVideoMission: TVideoMission;
  499. FRemoteControlMission: TRemoteControlMission;
  500. FWindowColor: TColor;
  501. FUseSelfColor: Boolean;
  502. FBackGroundImage: string;
  503. FOfflinefilesAddr: string;
  504. FOfflinefilesPort: Integer;
  505. FPackageSize: Integer;
  506. FTransmiteFileMissions: TList;
  507. FUpDownFileMissions: TList;
  508. FNodeTransferMissions: TList;
  509. FSettedYourVideImageSize, FSettedMyVideImageSize: Boolean;
  510. FLastSendShakeWindowTicket: Cardinal;
  511. FLastRecvShakeWindowTicket: Cardinal;
  512. FLastSendMsgTicket: Cardinal;
  513. FRidrected: Boolean;
  514. FRidrectURL: string;
  515. FImageSize: Integer;
  516. FBaseURL: string;
  517. FMaxID: Integer;
  518. procedure LoadOfflinefilesConfig;
  519. procedure LoadWindowColor;
  520. procedure SaveWindowColor;
  521. procedure miColorClick(Sender: TObject);
  522. procedure LoadBackGround;
  523. procedure SaveBackGround;
  524. procedure IdHTTPOnRedirect(Sender: TObject; var dest: string; var NumRedirect: Integer; var Handled: boolean; var VMethod: TIdHTTPMethod);
  525. procedure IdHTTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);
  526. procedure IdHTTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer);
  527. procedure IdHTTPWorkEnd(ASender: TObject; AWorkMode: TWorkMode);
  528. function GetHTMLUBBCode(AHTML: string; var ABaseURL: string): string;
  529. function ReAlighHTMLContent(ABaseURL: string): Boolean;
  530. function CheckImageExists(AImageFile: string): string;
  531. function FindIECacheImage(ADir, AImageFile: string): string;
  532. procedure CheckPastedContent(ADeleteOtherObj: Boolean = False);
  533. procedure AddImageToInput(AFileName: string; ARichEd: TRealICQRichEdit);
  534. procedure ChangePopupActionBarColor(PopupActionBar: TPopupActionBar);
  535. function CheckNotCompletedMission: Integer;
  536. procedure LoadNotReadMessages;
  537. procedure UpdateMyInfo;
  538. procedure UpdateTeamMembers;
  539. procedure SetTeamID(Value: string);
  540. procedure SetReceiver(Value: string);
  541. procedure ShowSpbShowHideUserInformationState;
  542. function GetInputerLength: Integer;
  543. procedure InvokeCMD(InvokeIE: Boolean; Value1, Value2: Integer; var vaIn, vaOut: OleVariant);
  544. procedure SetDOMStyle(Doc: IHTMLDocument2);
  545. procedure LoadAdvertisement;
  546. procedure P2PTypeChanged(Sender: TObject);
  547. function GetCanWriteMessage: Boolean;
  548. procedure CancelAllSendFile;
  549. procedure CloseAllMissions;
  550. procedure CancelAllUpDdownFile;
  551. procedure CancelAllUpDdownNodeFile;
  552. procedure CalculatedWaveInVolume(Sender: TObject; ALoginName: string; AVolume: Integer);
  553. procedure CalculatedWaveOutVolume(Sender: TObject; ALoginName: string; AVolume: Integer);
  554. procedure CapturedVideoImage(Sender: TObject; ALoginName: string; ABitmap: TBitmap);
  555. procedure ReceivedVideoImage(Sender: TObject; ALoginName: string; ABitmap: TBitmap);
  556. procedure CreateTeamResult(Sender: TObject; ATeamCaption: string; ACreated: Boolean; ATeamID: string; AFailingCause: string);
  557. procedure AddMessageToWebBrowser(SenderID: string; SenderName, FontStr, MessageStr: string; SendDateTime: TDateTime; IsEncry: Boolean; ShowSendFailed: Boolean = False; IsHistory: Boolean = False);
  558. procedure ShakeWindow;
  559. procedure SetLblSendSMSPosition(HIntMsg: string);
  560. procedure AddMessageToWebBrowserTop(SenderID: string; SenderName, FontStr, MessageStr: string; SendDateTime: TDateTime; IsEncry: Boolean; ShowSendFailed: Boolean = False; IsHistory: Boolean = False);
  561. protected
  562. procedure CMWininichange(var Message: TWMWinIniChange); message CM_WININICHANGE;
  563. procedure CreateParams(var Params: TCreateParams); override;
  564. procedure DropFiles(var Message: TMessage); message WM_DropFiles;
  565. procedure OnKeyDown(var Msg: TMessage); message WM_KEYDOWN;
  566. procedure OnKeyUp(var Msg: TMessage); message WM_KEYUP;
  567. public
  568. FRealICQClient: TRealICQClient;
  569. procedure LoadHistoryMessages;
  570. procedure UpdateTeamMember(ARealICQUser: TRealICQUser);
  571. function PasteImage(AUseTemp: Boolean = True): Boolean;
  572. procedure LoadNotReadMessagesFromDBHistory(DBHistorySearchResult: TDBHistorySearchResult);
  573. procedure OpenSendFolderForm(FolderName: string);
  574. procedure SendFile(FileName: string);
  575. procedure ChangeUIColor(AColor: TColor); override;
  576. procedure InsertFaceToRichEdit(Face: TFace; FaceID: Integer);
  577. procedure ShowMessage(RealICQMessage: TRealICQMessage; ShowSendFailed: Boolean = False);
  578. procedure ShowTeamMessage(RealICQTeamMessage: TRealICQTeamMessage; ShowSendFailed: Boolean = False);
  579. procedure SendDropFile(AFileName: string);
  580. procedure ShowGettedSendFileRequest(ASendFileRequestInfo: TSendFileRequestInfo);
  581. procedure ShowCancelSendFile(AOppositeID: Cardinal);
  582. procedure ShowSendOfflineFileRequest(AOppositeID: Cardinal);
  583. procedure ShowSendedSendFileRequest(APtoPFileTransmitter: TPtoPFileTransmitter);
  584. procedure ShowGettedAudioTransmiteRequest;
  585. procedure ShowSendedAudioTransmiteRequest;
  586. procedure ShowCanceledAudioTransmite;
  587. procedure ShowGettedAudioTransmiteResponse(AAcceptted: Boolean);
  588. procedure ShowStoppedAudioTransmite(AIsStopper: Boolean);
  589. procedure ShowGettedAudioTransmiteConnectted;
  590. procedure ShowGettedRemoteControlTransmiteRequest;
  591. procedure ShowSendedRemoteControlTransmiteRequest;
  592. procedure ShowCanceledRemoteControlTransmite;
  593. procedure ShowGettedRemoteControlTransmiteResponse(AAcceptted: Boolean);
  594. procedure ShowStoppedRemoteControlTransmite(AIsStopper: Boolean);
  595. procedure ShowGettedRemoteControlTransmiteConnectted;
  596. procedure ShowGettedRemoteControlTransmiteRecvedScreenSize(AWidth, AHeight: Integer);
  597. procedure ShowGettedRemoteControlTransmiteControlRequest;
  598. procedure ShowSendedRemoteControlTransmiteControlRequest;
  599. procedure ShowCancelControlRemoteControlTransmite;
  600. procedure ShowGettedRemoteControlTransmiteControlControlResponse(AAcceptted: Boolean);
  601. procedure ShowGettedRemoteControlTransmiteControlBeControlResponse(AAcceptted: Boolean);
  602. procedure FullScreenRemoteControlPanel;
  603. procedure CloseRemoteControlPanel;
  604. procedure OpenRemoteControlPanel;
  605. procedure ShowGettedVideoTransmiteRequest;
  606. procedure ShowSendedVideoTransmiteRequest;
  607. procedure ShowCanceledVideoTransmite;
  608. procedure ShowGettedVideoTransmiteResponse(AAcceptted: Boolean);
  609. procedure ShowStoppedVideoTransmite(AIsStopper: Boolean);
  610. procedure ShowGettedVideoTransmiteConnectted(ASendBigBmp, ARecvBigBmp: Boolean);
  611. procedure ShowInputting(AInputting: Boolean);
  612. procedure ShowShakeWindow(AIsSource: Boolean);
  613. //TODO: 发送离线文件
  614. procedure SendOfflineFile(AFileName: string);
  615. //保存用户剪切屏幕的图片
  616. procedure SaveImageInfo(TempFaceFileName: string; iFlag: Integer);
  617. procedure SetBrowserBg(BackImage: string);
  618. function FindTransmitFileByBaseID(ABaseID: string): TTransmiteFileMission;
  619. function FindFileTransmitByBaseID(ABaseID: string): TUploadOrDownloadFileMission;
  620. function FindUpDownFileByBaseID(ABaseID: string): TUploadOrDownloadFileMission;
  621. function FindUpNodeFileByBaseID(ABaseID: string): TFileTransferWithNode;
  622. property TransmiteFileMissions: TList read FTransmiteFileMissions;
  623. property UpDownFileMissions: TList read FUpDownFileMissions;
  624. property FileTransmitters: TStringList read FFileTransmitters;
  625. property NodeTransferMissions: TList read FNodeTransferMissions;
  626. property SettedYourVideImageSize: Boolean read FSettedYourVideImageSize write FSettedYourVideImageSize;
  627. property SettedMyVideImageSize: Boolean read FSettedMyVideImageSize write FSettedMyVideImageSize;
  628. property AudioMission: TAudioMission read FAudioMission write FAudioMission;
  629. property VideoMission: TVideoMission read FVideoMission write FVideoMission;
  630. property RemoteControlMission: TRemoteControlMission read FRemoteControlMission write FRemoteControlMission;
  631. property FaceMenuAtFileName: string read FFaceMenuAtFileName write FFaceMenuAtFileName;
  632. property SetFaceMenuAtFileNameTicket: Cardinal read FSetFaceMenuAtFileNameTicket write FSetFaceMenuAtFileNameTicket;
  633. property Category: TTalkingCategory read FCategory;
  634. property TeamID: string read FTeamID write SetTeamID;
  635. property Receiver: string read FReceiver write SetReceiver;
  636. property CanWriteMessage: Boolean read GetCanWriteMessage;
  637. property WindowColor: TColor read FWindowColor;
  638. property LastRecvShakeWindowTicket: Cardinal read FLastRecvShakeWindowTicket write FLastRecvShakeWindowTicket;
  639. property OfflinefilesAddr: string read FOfflinefilesAddr write FOfflinefilesAddr;
  640. property OfflinefilesPort: Integer read FOfflinefilesPort write FOfflinefilesPort;
  641. property PackageSize: Integer read FPackageSize write FPackageSize;
  642. property TeamUpLoadFile: TUpLoadFile read FTeamUpLoadFile;
  643. public
  644. ImagesList: TList;
  645. ALoginName: string;
  646. function HasMobilePhone(LoginName: string): Boolean;
  647. procedure DownFileComplete(ASource, ADest, ARemark: string; AStatus: boolean; AFileSize: Integer; IsNeedNotify: Boolean);
  648. procedure TeamUpFileProgress(ulProgress, ulProgressMax, ulStatusCode: integer; szStatusText: string);
  649. property LVTeamMembers: TRealICQContacterListView read FLVTeamMembers;
  650. end;
  651. function GetTalkingFormCount: Integer;
  652. procedure CloseAllTalkingForm;
  653. procedure SetAllTakingFormEnabledState(AEnableValue: Boolean);
  654. procedure UpdateAllTakingFormGIFHeadImage;
  655. procedure UpdateAllTakingFormHotKeySet;
  656. procedure ChangeTalkingFormVisible(AVisible: Boolean);
  657. function OpenTalkingForm(AReceiver: string; AShowActive: Boolean = True; ARealICQClient: TRealICQClient = nil): TTalkingForm;
  658. function GetTalkingForm(AReceiver: string; ARealICQClient: TRealICQClient = nil): TTalkingForm;
  659. procedure UpdateTalkingForm(ARealICQUser: TRealICQUser);
  660. function OpenTeamTalkingForm(ATeamID: string; AShowActive: Boolean = True; ARealICQClient: TRealICQClient = nil): TTalkingForm;
  661. function GetTeamTalkingForm(ATeamID: string; ARealICQClient: TRealICQClient = nil): TTalkingForm;
  662. procedure UpdateTeamTalkingForm(ATeam: TRealICQTeam);
  663. function InTalkingFormAdvertisement(AHandle: THandle): Boolean;
  664. function InTalkingFormTeamDisk(AHandle: THandle): Boolean;
  665. procedure ChangeTalkingFormColor(AColor: TColor);
  666. procedure ChangeTalkingFormSkin(ASkinName: string);
  667. procedure UpdateTalkingFormAdversement;
  668. procedure ShowCopyScreenForm(ATalkingForm: TTalkingForm);
  669. function FindURLCache(pstrDatfile: PAnsiChar; pstrURL: PAnsiChar): PAnsiChar; stdcall external 'binary/DATReader.dll';
  670. implementation
  671. uses
  672. UserCardDetailView, SMSFrm, AddFriendFrm, SelFaceFrm, AddFaceFrm,
  673. CopyScreenFrm, TrueHiddenMainFrm, TeamOptionsFrm, AddUserFrm,
  674. MessagesManagerFrm, SelBackFrm, UserCardFrm, VideoFrm, RemoteControlFrm,
  675. SendFolderFrm, NotReadMessageBoxFrm, TeamsAdapter, LoggerImport,
  676. TeamShareAdapter, LimitCondition, AsynActions, FileTransmitAdapter,
  677. TalkFormController, UsersService, GroupConfig, ConditionConfig, UploaderTask,
  678. MessagesHander, RealICQUtility;
  679. {$R *.dfm}
  680. {$R TalkImg.RES}
  681. {TTalkingForm}
  682. procedure TTalkingForm.LoadBackGround;
  683. var
  684. XMLFile: string;
  685. XMLDocument: TXMLDocument;
  686. BackGroundImagesNode: IXMLNode;
  687. NodeName: string;
  688. begin
  689. XMLFile := TRealICQClient.GetUserDir + BackGroundImagesXMLFile;
  690. XMLDocument := TXMLDocument.Create(Self);
  691. try
  692. XMLDocument.Active := True;
  693. if not FileExists(XMLFile) then
  694. begin
  695. CopyFile(PChar(ExtractFilePath(paramstr(0)) + ConfigXMLFilePath + BackGroundImagesXMLFile), PChar(XMLFile), False);
  696. XMLDocument.Active := True;
  697. end;
  698. XMLDocument.LoadFromFile(XMLFile);
  699. BackGroundImagesNode := XMLDocument.DocumentElement;
  700. if FCategory = tcNormal then
  701. NodeName := 'U' + FReceiver
  702. else
  703. NodeName := 'T' + FTeamID;
  704. try
  705. if BackGroundImagesNode.ChildNodes.FindNode(NodeName) <> nil then
  706. begin
  707. FBackGroundImage := BackGroundImagesNode.ChildNodes.FindNode(NodeName).Attributes['BackGroundImage'];
  708. if not FileExists(FBackGroundImage) then
  709. FBackGroundImage := '';
  710. try
  711. SetDomStyle(WebBrowser.Document as IHtmlDocument2);
  712. except
  713. end;
  714. end;
  715. except
  716. end;
  717. finally
  718. XMLDocument.Free;
  719. end;
  720. end;
  721. //------------------------------------------------------------------------------
  722. procedure TTalkingForm.SaveBackGround;
  723. var
  724. XMLFile: string;
  725. XMLDocument: TXMLDocument;
  726. BackGroundImagesNode: IXMLNode;
  727. NodeName: string;
  728. begin
  729. XMLFile := TRealICQClient.GetUserDir + BackGroundImagesXMLFile;
  730. XMLDocument := TXMLDocument.Create(Self);
  731. try
  732. XMLDocument.Active := True;
  733. if not FileExists(XMLFile) then
  734. begin
  735. CopyFile(PChar(ExtractFilePath(paramstr(0)) + ConfigXMLFilePath + BackGroundImagesXMLFile), PChar(XMLFile), False);
  736. XMLDocument.Active := True;
  737. end;
  738. XMLDocument.LoadFromFile(XMLFile);
  739. BackGroundImagesNode := XMLDocument.DocumentElement;
  740. if FCategory = tcNormal then
  741. NodeName := 'U' + FReceiver
  742. else
  743. NodeName := 'T' + FTeamID;
  744. try
  745. BackGroundImagesNode.ChildNodes.FindNode(NodeName).Attributes['BackGroundImage'] := FBackGroundImage;
  746. except
  747. BackGroundImagesNode.AddChild(NodeName).Attributes['BackGroundImage'] := FBackGroundImage;
  748. end;
  749. XMLDocument.SaveToFile();
  750. finally
  751. XMLDocument.Free;
  752. end;
  753. end;
  754. //------------------------------------------------------------------------------
  755. procedure TTalkingForm.LoadWindowColor;
  756. var
  757. XMLFile: string;
  758. XMLDocument: TXMLDocument;
  759. WindowColorsNode: IXMLNode;
  760. NodeName: string;
  761. begin
  762. XMLFile := TRealICQClient.GetUserDir + WindowColorsXMLFile;
  763. XMLDocument := TXMLDocument.Create(Self);
  764. try
  765. XMLDocument.Active := True;
  766. if not FileExists(XMLFile) then
  767. begin
  768. CopyFile(PChar(ExtractFilePath(paramstr(0)) + ConfigXMLFilePath + WindowColorsXMLFile), PChar(XMLFile), False);
  769. XMLDocument.Active := True;
  770. end;
  771. XMLDocument.LoadFromFile(XMLFile);
  772. WindowColorsNode := XMLDocument.DocumentElement;
  773. if FCategory = tcNormal then
  774. NodeName := 'U' + FReceiver
  775. else
  776. NodeName := 'T' + FTeamID;
  777. FWindowColor := MainForm.UIMainColor;
  778. FUseSelfColor := False;
  779. try
  780. if WindowColorsNode.ChildNodes.FindNode(NodeName) <> nil then
  781. begin
  782. FWindowColor := WindowColorsNode.ChildNodes.FindNode(NodeName).Attributes['WindowColor'];
  783. if FWindowColor <> MainForm.UIMainColor then
  784. FUseSelfColor := True;
  785. end;
  786. except
  787. end;
  788. ChangeUIColor(FWindowColor);
  789. finally
  790. XMLDocument.Free;
  791. end;
  792. end;
  793. //------------------------------------------------------------------------------
  794. procedure TTalkingForm.AddImageToInput(AFileName: string; ARichEd: TRealICQRichEdit);
  795. var
  796. gifImage: TGifImage;
  797. newBitmap: TBitmap;
  798. newJpg: TJPegImage;
  799. TempFaceFileName: string;
  800. Face: TFace;
  801. MD5HashValue: MD5Digest;
  802. MD5HashString: string;
  803. AOldFileName: string;
  804. iLoop: Integer;
  805. Sys32Dir: string;
  806. pSys32Dir: array[0..Max_Path] of char;
  807. begin
  808. try
  809. //判断是否为系统表情
  810. for iLoop := 0 to MainForm.FaceList.Count - 1 do
  811. begin
  812. Face := MainForm.FaceList.Objects[iLoop] as TFace;
  813. if AnsiSameText(ReplaceStr(Face.FileName, '/', '\'), ReplaceStr(AFileName, '/', '\')) then
  814. begin
  815. ARichEd.InsertImage(Face.FileName, iLoop);
  816. Exit;
  817. end;
  818. end;
  819. newJpg := TJPegImage.Create;
  820. newBitmap := Tbitmap.create;
  821. gifImage := TGifImage.Create;
  822. try
  823. if AnsiSameText(ExtractFileExt(AFileName), '.BMP') then
  824. begin
  825. newBitmap.LoadFromFile(AFileName);
  826. newJpg.Assign(newBitmap);
  827. newJpg.CompressionQuality := 90;
  828. newJpg.Compress;
  829. end
  830. else if AnsiSameText(ExtractFileExt(AFileName), '.GIF') then
  831. begin
  832. gifImage.LoadFromFile(AFileName);
  833. end
  834. else if AnsiSameText(ExtractFileExt(AFileName), '.PNG') then
  835. begin
  836. end
  837. else
  838. begin
  839. newJpg.LoadFromFile(AFileName);
  840. end;
  841. if AnsiSameText(ExtractFileExt(AFileName), '.GIF') then
  842. begin
  843. AFileName := MainForm.RealICQClient.GetReceivedFaceDir + 'SC' + IntToStr(GetTickCount) + '.GIF';
  844. gifImage.SaveToFile(AFileName);
  845. end
  846. else if AnsiSameText(ExtractFileExt(AFileName), '.PNG') then
  847. begin
  848. AOldFileName := AFileName;
  849. AFileName := MainForm.RealICQClient.GetReceivedFaceDir + 'SC' + IntToStr(GetTickCount) + '.PNG';
  850. CopyFile(PChar(AOldFileName), PChar(AFileName), False);
  851. end
  852. else
  853. begin
  854. AFileName := MainForm.RealICQClient.GetReceivedFaceDir + 'SC' + IntToStr(GetTickCount) + '.JPG';
  855. newJpg.SaveToFile(AFileName);
  856. end;
  857. MD5HashValue := MD5File(AFileName);
  858. MD5HashString := MD5.MD5Print(MD5HashValue);
  859. if AnsiSameText(ExtractFileExt(AFileName), '.GIF') then
  860. TempFaceFileName := ExtractFilePath(AFileName) + MD5HashString + '.GIF'
  861. else if AnsiSameText(ExtractFileExt(AFileName), '.PNG') then
  862. TempFaceFileName := ExtractFilePath(AFileName) + MD5HashString + '.PNG'
  863. else
  864. TempFaceFileName := ExtractFilePath(AFileName) + MD5HashString + '.JPG';
  865. RenameFile(AFileName, TempFaceFileName);
  866. Face := TFace.Create(TempFaceFileName, '', '', MD5HashString, '');
  867. try
  868. ARichEd.InsertImage(TempFaceFileName, BaseTempFaceIndex + MainForm.TempFaceList.AddObject(MD5HashString, Face));
  869. except
  870. on e: exception do
  871. begin
  872. Log(E.Message, 'ARichEd.InsertImage');
  873. GetSystemDirectory(pSys32Dir, Max_Path);
  874. Sys32Dir := StrPas(pSys32Dir);
  875. CopyFile(PChar(ExtractFilePath(paramstr(0)) + ImageX2_DLL_PACH), PChar(Sys32Dir + '\ImageX2.dll'), False);
  876. try
  877. WinExec(PChar('regsvr32 /s "' + 'ImageX2.dll"'), SW_HIDE);
  878. except
  879. end;
  880. Sleep(500);
  881. ARichEd.InsertImage(TempFaceFileName, BaseTempFaceIndex + MainForm.TempFaceList.AddObject(MD5HashString, Face));
  882. end;
  883. end;
  884. finally
  885. gifImage.Free;
  886. newbitmap.free;
  887. newjpg.Free;
  888. end;
  889. except
  890. on E: Exception do
  891. begin
  892. Log(E.Message, 'TTalkingForm.AddImageToInput');
  893. raise;
  894. end;
  895. //
  896. end;
  897. end;
  898. //------------------------------------------------------------------
  899. procedure TTalkingForm.MClearWindowClick(Sender: TObject);
  900. begin
  901. actClearWeb.Execute;
  902. actClearEdit.Execute;
  903. end;
  904. //------------------------------------------------------------------------------
  905. procedure TTalkingForm.SaveWindowColor;
  906. var
  907. XMLFile: string;
  908. XMLDocument: TXMLDocument;
  909. WindowColorsNode: IXMLNode;
  910. NodeName: string;
  911. begin
  912. XMLFile := TRealICQClient.GetUserDir + WindowColorsXMLFile;
  913. XMLDocument := TXMLDocument.Create(Self);
  914. try
  915. XMLDocument.Active := True;
  916. if not FileExists(XMLFile) then
  917. begin
  918. CopyFile(PChar(ExtractFilePath(paramstr(0)) + ConfigXMLFilePath + WindowColorsXMLFile), PChar(XMLFile), False);
  919. XMLDocument.Active := True;
  920. end;
  921. XMLDocument.LoadFromFile(XMLFile);
  922. WindowColorsNode := XMLDocument.DocumentElement;
  923. if FCategory = tcNormal then
  924. NodeName := 'U' + FReceiver
  925. else
  926. NodeName := 'T' + FTeamID;
  927. try
  928. WindowColorsNode.ChildNodes.FindNode(NodeName).Attributes['WindowColor'] := FWindowColor;
  929. except
  930. WindowColorsNode.AddChild(NodeName).Attributes['WindowColor'] := FWindowColor;
  931. end;
  932. XMLDocument.SaveToFile();
  933. FUseSelfColor := (FWindowColor <> MainForm.UIMainColor);
  934. finally
  935. XMLDocument.Free;
  936. end;
  937. end;
  938. procedure TTalkingForm.sbpSMSClick(Sender: TObject);
  939. begin
  940. if (not MainForm.RealICQClient.UserPermission.EnableMultiSendSms) or (not MainForm.RealICQClient.UserPermission.EnableSendSms) then
  941. begin
  942. Dialogs.ShowMessage('您没有手机短信群发权限! ');
  943. Exit;
  944. end;
  945. OpenTeamSMSForm(self.TeamID);
  946. end;
  947. //------------------------------------------------------------------------------
  948. procedure TTalkingForm.miColorClick(Sender: TObject);
  949. begin
  950. ChangeUIColor((Sender as TMenuItem).Tag);
  951. FWindowColor := (Sender as TMenuItem).Tag;
  952. SaveWindowColor;
  953. end;
  954. //------------------------------------------------------------------------------
  955. procedure TTalkingForm.miMoreColorsClick(Sender: TObject);
  956. begin
  957. MainForm.ColorDialog.Color := FWindowColor;
  958. if MainForm.ColorDialog.Execute then
  959. begin
  960. ChangeUIColor(MainForm.ColorDialog.Color);
  961. FWindowColor := MainForm.ColorDialog.Color;
  962. SaveWindowColor;
  963. end;
  964. end;
  965. //------------------------------------------------------------------------------
  966. procedure TTalkingForm.CapturedVideoImage(Sender: TObject; ALoginName: string; ABitmap: TBitmap);
  967. begin
  968. try
  969. if not FSettedMyVideImageSize then
  970. begin
  971. miShowMyVideo.Click;
  972. //ImgMyVideoBorder.Refresh;
  973. Application.ProcessMessages;
  974. if ABitmap.Width >= 320 then
  975. miMyVideoBigSize.Click
  976. else
  977. miMyVideoSmallSize.Click;
  978. FSettedMyVideImageSize := True;
  979. end;
  980. ImgMyVideo.Picture.Bitmap.Assign(ABitmap);
  981. except
  982. end;
  983. end;
  984. procedure TTalkingForm.cardYourResize(Sender: TObject);
  985. begin
  986. end;
  987. //------------------------------------------------------------------------------
  988. procedure TTalkingForm.ReceivedVideoImage(Sender: TObject; ALoginName: string; ABitmap: TBitmap);
  989. begin
  990. try
  991. if not FSettedYourVideImageSize then
  992. begin
  993. miShowYourVideo.Visible := True;
  994. miYourVideoSize.Visible := True;
  995. miSaveYourVideoImageAs.Visible := True;
  996. miShowVideoForm.Visible := True;
  997. miShowYourVideo.Click;
  998. Application.ProcessMessages;
  999. if ABitmap.Width >= 320 then
  1000. miYourVideoBigSize.Click
  1001. else
  1002. miYourVideoSmallSize.Click;
  1003. FSettedYourVideImageSize := True;
  1004. end;
  1005. if VideoForm <> nil then
  1006. VideoForm.ImgYourVideo.Picture.Bitmap.Assign(ABitmap)
  1007. else
  1008. ImgYourVideo.Picture.Bitmap.Assign(ABitmap);
  1009. except
  1010. end;
  1011. end;
  1012. //------------------------------------------------------------------------------
  1013. procedure TTalkingForm.ReEnabledVideoActionTimerTimer(Sender: TObject);
  1014. begin
  1015. ReEnabledVideoActionTimer.Enabled := False;
  1016. actVideo.Enabled := True;
  1017. end;
  1018. //------------------------------------------------------------------------------
  1019. procedure TTalkingForm.ShowGettedVideoTransmiteRequest;
  1020. begin
  1021. try
  1022. if FVideoMission <> nil then
  1023. begin
  1024. if FVideoMission.FIsSource then
  1025. begin
  1026. if FVideoMission.FAccepted then
  1027. FVideoMission.ShowStopped(True)
  1028. else
  1029. FVideoMission.ShowCancel;
  1030. end
  1031. else
  1032. begin
  1033. if FVideoMission.FAccepted then
  1034. FVideoMission.ShowStopped(True)
  1035. else
  1036. FVideoMission.ShowDeclined;
  1037. end;
  1038. FreeAndNil(FVideoMission);
  1039. end;
  1040. finally
  1041. FVideoMission := TVideoMission.Create(Self, False);
  1042. end;
  1043. end;
  1044. //------------------------------------------------------------------------------
  1045. procedure TTalkingForm.ShowSendedVideoTransmiteRequest;
  1046. begin
  1047. try
  1048. FreeAndNil(FVideoMission);
  1049. finally
  1050. FVideoMission := TVideoMission.Create(Self, True);
  1051. end;
  1052. end;
  1053. //------------------------------------------------------------------------------
  1054. procedure TTalkingForm.ShowCanceledVideoTransmite;
  1055. begin
  1056. try
  1057. if FVideoMission <> nil then
  1058. FVideoMission.ShowCancel;
  1059. finally
  1060. FreeAndNil(FVideoMission);
  1061. end;
  1062. end;
  1063. //------------------------------------------------------------------------------
  1064. procedure TTalkingForm.ShowStoppedVideoTransmite(AIsStopper: Boolean);
  1065. var
  1066. NeedEnabledVideoAction: Boolean;
  1067. begin
  1068. NeedEnabledVideoAction := False;
  1069. if actVideo.Enabled then
  1070. begin
  1071. NeedEnabledVideoAction := True;
  1072. actVideo.Enabled := False;
  1073. end;
  1074. try
  1075. try
  1076. if FVideoMission <> nil then
  1077. FVideoMission.ShowStopped(AIsStopper);
  1078. finally
  1079. FreeAndNil(FVideoMission);
  1080. actStopVideo.Visible := False;
  1081. miShowYourVideo.Visible := False;
  1082. miYourVideoSize.Visible := False;
  1083. miSaveYourVideoImageAs.Visible := False;
  1084. miShowVideoForm.Visible := False;
  1085. if pgcYourInfo.ActivePage = tsYourVideo then
  1086. miShowYourHeadImage.Click;
  1087. miShowMyVideo.Visible := False;
  1088. miMyVideoSize.Visible := False;
  1089. miVideoSet.Visible := False;
  1090. miSaveMyVideoImageAs.Visible := False;
  1091. if pgcMyInfo.ActivePage = tsMyVideo then
  1092. miShowMyHeadImage.Click;
  1093. FreeAndNil(VideoForm);
  1094. end;
  1095. finally
  1096. if NeedEnabledVideoAction then
  1097. ReEnabledVideoActionTimer.Enabled := True;
  1098. end;
  1099. end;
  1100. //------------------------------------------------------------------------------
  1101. procedure TTalkingForm.ShowGettedVideoTransmiteConnectted(ASendBigBmp, ARecvBigBmp: Boolean);
  1102. begin
  1103. try
  1104. if FVideoMission <> nil then
  1105. begin
  1106. FVideoMission.ShowConnectted(ASendBigBmp, ARecvBigBmp);
  1107. end;
  1108. except
  1109. end;
  1110. end;
  1111. //------------------------------------------------------------------------------
  1112. procedure TTalkingForm.ShowGettedVideoTransmiteResponse(AAcceptted: Boolean);
  1113. begin
  1114. try
  1115. if FVideoMission <> nil then
  1116. begin
  1117. if AAcceptted then
  1118. begin
  1119. FVideoMission.ShowAcceptted;
  1120. TVideoTransmitter.SetVideoCapContainer(Self);
  1121. FRealICQClient.OnCapturedVideoImage := nil;
  1122. FRealICQClient.OnReceivedVideoImage := nil;
  1123. FRealICQClient.OnCapturedVideoImage := CapturedVideoImage;
  1124. FRealICQClient.OnReceivedVideoImage := ReceivedVideoImage;
  1125. actStopVideo.Visible := True;
  1126. try
  1127. ImgYourVideo.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + WorldCamPicture);
  1128. except
  1129. end;
  1130. if FRealICQClient.InstalledCamera then
  1131. begin
  1132. try
  1133. ImgMyVideo.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + WorldCamPicture);
  1134. except
  1135. end;
  1136. miShowMyVideo.Visible := True;
  1137. miMyVideoSize.Visible := True;
  1138. miVideoSet.Visible := True;
  1139. miSaveMyVideoImageAs.Visible := True;
  1140. miShowMyVideo.Click;
  1141. end;
  1142. end
  1143. else
  1144. FVideoMission.ShowDeclined;
  1145. end;
  1146. finally
  1147. if not AAcceptted then
  1148. FreeAndNil(FVideoMission);
  1149. end;
  1150. end;
  1151. //------------------------------------------------------------------------------
  1152. procedure TTalkingForm.ShowGettedAudioTransmiteRequest;
  1153. begin
  1154. try
  1155. if FAudioMission <> nil then
  1156. begin
  1157. if FAudioMission.FIsSource then
  1158. begin
  1159. if FAudioMission.FAccepted then
  1160. FAudioMission.ShowStopped(True)
  1161. else
  1162. FAudioMission.ShowCancel;
  1163. end
  1164. else
  1165. begin
  1166. if FAudioMission.FAccepted then
  1167. FAudioMission.ShowStopped(True)
  1168. else
  1169. FAudioMission.ShowDeclined;
  1170. end;
  1171. FreeAndNil(FAudioMission);
  1172. end;
  1173. finally
  1174. FAudioMission := TAudioMission.Create(Self, False);
  1175. end;
  1176. end;
  1177. //------------------------------------------------------------------------------
  1178. procedure TTalkingForm.ShowSendedAudioTransmiteRequest;
  1179. begin
  1180. try
  1181. FreeAndNil(FAudioMission);
  1182. finally
  1183. FAudioMission := TAudioMission.Create(Self, True);
  1184. end;
  1185. end;
  1186. //------------------------------------------------------------------------------
  1187. procedure TTalkingForm.ShowCanceledAudioTransmite;
  1188. begin
  1189. try
  1190. if FAudioMission <> nil then
  1191. FAudioMission.ShowCancel;
  1192. finally
  1193. FreeAndNil(FAudioMission);
  1194. end;
  1195. end;
  1196. //------------------------------------------------------------------------------
  1197. procedure TTalkingForm.ShowStoppedAudioTransmite(AIsStopper: Boolean);
  1198. begin
  1199. try
  1200. if FAudioMission <> nil then
  1201. FAudioMission.ShowStopped(AIsStopper);
  1202. spbSpk.Visible := False;
  1203. spbMic.Visible := False;
  1204. MasterVolume.Visible := False;
  1205. MicrophoneVolume.Visible := False;
  1206. finally
  1207. FreeAndNil(FAudioMission);
  1208. end;
  1209. end;
  1210. procedure TTalkingForm.CalculatedWaveInVolume(Sender: TObject; ALoginName: string; AVolume: Integer);
  1211. begin
  1212. try
  1213. MicrophoneVolume.PeakValue := AVolume;
  1214. except
  1215. end;
  1216. end;
  1217. //------------------------------------------------------------------------------
  1218. procedure TTalkingForm.CalculatedWaveOutVolume(Sender: TObject; ALoginName: string; AVolume: Integer);
  1219. begin
  1220. try
  1221. MasterVolume.PeakValue := AVolume;
  1222. except
  1223. end;
  1224. end;
  1225. //------------------------------------------------------------------------------
  1226. procedure TTalkingForm.ShowGettedRemoteControlTransmiteRequest;
  1227. begin
  1228. try
  1229. if FRemoteControlMission <> nil then
  1230. begin
  1231. if FRemoteControlMission.FIsSource then
  1232. begin
  1233. if FRemoteControlMission.FAccepted then
  1234. FRemoteControlMission.ShowStopped(True)
  1235. else
  1236. FRemoteControlMission.ShowCancel;
  1237. end
  1238. else
  1239. begin
  1240. if FRemoteControlMission.FAccepted then
  1241. FRemoteControlMission.ShowStopped(True)
  1242. else
  1243. FRemoteControlMission.ShowDeclined;
  1244. end;
  1245. FreeAndNil(FRemoteControlMission);
  1246. end;
  1247. finally
  1248. FRemoteControlMission := TRemoteControlMission.Create(Self, False);
  1249. end;
  1250. end;
  1251. //------------------------------------------------------------------------------
  1252. procedure TTalkingForm.ShowSendedRemoteControlTransmiteRequest;
  1253. begin
  1254. try
  1255. FreeAndNil(FRemoteControlMission);
  1256. finally
  1257. FRemoteControlMission := TRemoteControlMission.Create(Self, True);
  1258. end;
  1259. end;
  1260. //------------------------------------------------------------------------------
  1261. procedure TTalkingForm.ShowCanceledRemoteControlTransmite;
  1262. begin
  1263. try
  1264. if FRemoteControlMission <> nil then
  1265. FRemoteControlMission.ShowCancel;
  1266. finally
  1267. FreeAndNil(FRemoteControlMission);
  1268. end;
  1269. end;
  1270. //------------------------------------------------------------------------------
  1271. procedure TTalkingForm.ShowStoppedRemoteControlTransmite(AIsStopper: Boolean);
  1272. begin
  1273. try
  1274. if FRemoteControlMission <> nil then
  1275. FRemoteControlMission.ShowStopped(AIsStopper);
  1276. finally
  1277. pnlRemoteControl.Visible := False;
  1278. // pnlMyInfo.Visible := True;
  1279. pnlYourInfo.Visible := True;
  1280. pnlShowHideUserInfo.Visible := True;
  1281. pnlShowHideUserInfo.Width := 10;
  1282. if (not FRemoteControlMission.FIsSource) and (RemoteControlForm <> nil) then
  1283. begin
  1284. LockWindowUpdate(GetDesktopWindow);
  1285. try
  1286. OpenRemoteControlPanel;
  1287. RemoteControlForm.FTalkingForm := nil;
  1288. try
  1289. RemoteControlForm.Close;
  1290. finally
  1291. FreeAndNil(RemoteControlForm);
  1292. end;
  1293. pnlRC.Visible := False;
  1294. SplitterRC.Visible := False;
  1295. pnlUserInformation.Visible := True;
  1296. Width := FOldWidth;
  1297. Height := FOldHeight;
  1298. finally
  1299. LockWindowUpdate(0);
  1300. end;
  1301. end;
  1302. FreeAndNil(FRemoteControlMission);
  1303. end;
  1304. end;
  1305. //------------------------------------------------------------------------------
  1306. procedure TTalkingForm.FullScreenRemoteControlPanel;
  1307. begin
  1308. if RemoteControlForm = nil then
  1309. Exit;
  1310. LockWindowUpdate(GetDesktopWindow);
  1311. try
  1312. RemoteControlForm.Parent := nil;
  1313. RemoteControlForm.BorderStyle := bsNone;
  1314. RemoteControlForm.Align := alNone;
  1315. RemoteControlForm.btUP.Caption := '浮动停靠';
  1316. RemoteControlForm.pnlScreen.Visible := True;
  1317. RemoteControlForm.pnlRCWorkArea.Constraints.MaxWidth := 0;
  1318. RemoteControlForm.pnlRCWorkArea.Constraints.MaxHeight := 0;
  1319. RemoteControlForm.pnlClient.Constraints.MaxWidth := 0;
  1320. RemoteControlForm.pnlClient.Constraints.MaxHeight := 0;
  1321. RemoteControlForm.Constraints.MaxWidth := 0;
  1322. RemoteControlForm.Constraints.MaxHeight := 0;
  1323. RemoteControlForm.Left := -3;
  1324. RemoteControlForm.Top := -(3 + RemoteControlForm.pnlTop.Height);
  1325. RemoteControlForm.Width := Screen.Width + 6;
  1326. RemoteControlForm.Height := Screen.Height + 6 + RemoteControlForm.pnlTop.Height + RemoteControlForm.pnlBottom.Height;
  1327. pnlRC.Visible := False;
  1328. SplitterRC.Visible := False;
  1329. pnlUserInformation.Visible := True;
  1330. Width := FOldWidth;
  1331. Height := FOldHeight;
  1332. finally
  1333. LockWindowUpdate(0);
  1334. end;
  1335. end;
  1336. //------------------------------------------------------------------------------
  1337. procedure TTalkingForm.CloseRemoteControlPanel;
  1338. begin
  1339. if RemoteControlForm = nil then
  1340. Exit;
  1341. LockWindowUpdate(GetDesktopWindow);
  1342. try
  1343. RemoteControlForm.Parent := nil;
  1344. RemoteControlForm.BorderStyle := bsSizeable;
  1345. RemoteControlForm.Align := alNone;
  1346. RemoteControlForm.btUP.Caption := '浮动停靠';
  1347. RemoteControlForm.pnlScreen.Visible := False;
  1348. RemoteControlForm.pnlRCWorkArea.Constraints.MaxWidth := RemoteControlForm.imgRCScreen.Width + 4;
  1349. RemoteControlForm.pnlRCWorkArea.Constraints.MaxHeight := RemoteControlForm.imgRCScreen.Height + 4;
  1350. RemoteControlForm.pnlClient.Constraints.MaxWidth := RemoteControlForm.pnlRCWorkArea.Constraints.MaxWidth;
  1351. RemoteControlForm.pnlClient.Constraints.MaxHeight := RemoteControlForm.pnlRCWorkArea.Constraints.MaxHeight + RemoteControlForm.pnlTop.Height + RemoteControlForm.pnlBottom.Height;
  1352. RemoteControlForm.Constraints.MaxWidth := RemoteControlForm.pnlClient.Constraints.MaxWidth + (RemoteControlForm.Width - RemoteControlForm.pnlClient.Width);
  1353. RemoteControlForm.Constraints.MaxHeight := RemoteControlForm.pnlClient.Constraints.MaxHeight + (RemoteControlForm.Height - RemoteControlForm.pnlClient.Height);
  1354. if RemoteControlForm.Constraints.MaxWidth < Screen.WorkAreaWidth then
  1355. RemoteControlForm.Width := RemoteControlForm.Constraints.MaxWidth
  1356. else
  1357. RemoteControlForm.Width := Round(Screen.WorkAreaWidth * 0.8);
  1358. if RemoteControlForm.Constraints.MaxHeight < Screen.WorkAreaHeight then
  1359. RemoteControlForm.Height := RemoteControlForm.Constraints.MaxHeight
  1360. else
  1361. RemoteControlForm.Height := Round(Screen.WorkAreaHeight * 0.8);
  1362. RemoteControlForm.Left := (Screen.WorkAreaWidth - RemoteControlForm.Width) div 2;
  1363. RemoteControlForm.Top := (Screen.WorkAreaHeight - RemoteControlForm.Height) div 2;
  1364. pnlRC.Visible := False;
  1365. SplitterRC.Visible := False;
  1366. pnlUserInformation.Visible := True;
  1367. Width := FOldWidth;
  1368. Height := FOldHeight;
  1369. finally
  1370. LockWindowUpdate(0);
  1371. end;
  1372. end;
  1373. //------------------------------------------------------------------------------
  1374. procedure TTalkingForm.OpenRemoteControlPanel;
  1375. begin
  1376. if RemoteControlForm = nil then
  1377. Exit;
  1378. LockWindowUpdate(GetDesktopWindow);
  1379. try
  1380. Left := 0;
  1381. Top := 0;
  1382. Width := Screen.Width;
  1383. Height := Screen.WorkAreaHeight;
  1384. pnlRC.Visible := True;
  1385. SplitterRC.Visible := True;
  1386. RemoteControlForm.pnlRCWorkArea.Constraints.MaxWidth := 0;
  1387. RemoteControlForm.pnlRCWorkArea.Constraints.MaxHeight := 0;
  1388. RemoteControlForm.pnlClient.Constraints.MaxWidth := 0;
  1389. RemoteControlForm.pnlClient.Constraints.MaxHeight := 0;
  1390. RemoteControlForm.Constraints.MaxWidth := 0;
  1391. RemoteControlForm.Constraints.MaxHeight := 0;
  1392. RemoteControlForm.Parent := pnlRC;
  1393. RemoteControlForm.BorderStyle := bsNone;
  1394. RemoteControlForm.ParentWindow := pnlRC.Handle;
  1395. RemoteControlForm.Align := alClient;
  1396. RemoteControlForm.WindowState := wsMaximized;
  1397. RemoteControlForm.btUP.Caption := '浮动窗口';
  1398. RemoteControlForm.pnlScreen.Visible := False;
  1399. //if Width - 258 - 50 < RemoteControlForm.imgRCScreen.Width + 20 then
  1400. // pnlRC.Width := Width - 258 - 50
  1401. //else
  1402. // pnlRC.Width := RemoteControlForm.imgRCScreen.Width + 10;
  1403. SplitterRC.Left := pnlRC.Left - 5;
  1404. pnlUserInformation.Visible := False;
  1405. PostMessage(RemoteControlForm.Handle, WM_SIZE, 0, 0);
  1406. finally
  1407. LockWindowUpdate(0);
  1408. end;
  1409. end;
  1410. //------------------------------------------------------------------------------
  1411. procedure TTalkingForm.ShowGettedRemoteControlTransmiteRecvedScreenSize(AWidth, AHeight: Integer);
  1412. begin
  1413. try
  1414. if FRemoteControlMission <> nil then
  1415. begin
  1416. FRemoteControlMission.RecvedScreenSize;
  1417. if (not FRemoteControlMission.FIsSource) then
  1418. begin
  1419. LockWindowUpdate(GetDesktopWindow);
  1420. try
  1421. if RemoteControlForm = nil then
  1422. begin
  1423. FOldWidth := Width;
  1424. FOldHeight := Height;
  1425. Left := 0;
  1426. Top := 0;
  1427. Width := Screen.Width;
  1428. Height := Screen.WorkAreaHeight;
  1429. pnlRC.Visible := True;
  1430. SplitterRC.Visible := True;
  1431. RemoteControlForm := TRemoteControlForm.Create(pnlRC);
  1432. RemoteControlForm.FTalkingForm := Self;
  1433. RemoteControlForm.Parent := pnlRC;
  1434. RemoteControlForm.ParentWindow := pnlRC.Handle;
  1435. RemoteControlForm.Align := alClient;
  1436. RemoteControlForm.WindowState := wsMaximized;
  1437. RemoteControlForm.ChangeUIColor(FormColor);
  1438. RemoteControlForm.imgRCScreen.Picture.Bitmap.SetSize(AWidth, AHeight);
  1439. RemoteControlForm.imgRCScreen.Width := AWidth;
  1440. RemoteControlForm.imgRCScreen.Height := AHeight;
  1441. RemoteControlForm.imgRCScreen.Cursor := crDefault;
  1442. RemoteControlForm.lblRCState.Caption := '控制中。';
  1443. RemoteControlForm.lblRCState2.Caption := '控制中。';
  1444. RemoteControlForm.Show;
  1445. if Width - 258 - 50 < RemoteControlForm.imgRCScreen.Width + 20 then
  1446. pnlRC.Width := Width - 258 - 50
  1447. else
  1448. pnlRC.Width := RemoteControlForm.imgRCScreen.Width + 10;
  1449. SplitterRC.Left := pnlRC.Left - 5;
  1450. pnlUserInformation.Visible := False;
  1451. end
  1452. else
  1453. begin
  1454. RemoteControlForm.imgRCScreen.Picture.Bitmap.SetSize(AWidth, AHeight);
  1455. RemoteControlForm.imgRCScreen.Width := AWidth;
  1456. RemoteControlForm.imgRCScreen.Height := AHeight;
  1457. end;
  1458. PostMessage(RemoteControlForm.Handle, WM_SIZE, 0, 0);
  1459. finally
  1460. LockWindowUpdate(0);
  1461. end;
  1462. end;
  1463. end;
  1464. except
  1465. end;
  1466. end;
  1467. //------------------------------------------------------------------------------
  1468. procedure TTalkingForm.ShowGettedRemoteControlTransmiteControlBeControlResponse(AAcceptted: Boolean);
  1469. begin
  1470. try
  1471. if FRemoteControlMission <> nil then
  1472. begin
  1473. FRemoteControlMission.ShowBeControlResponse(AAcceptted);
  1474. if not FRemoteControlMission.FIsSource then
  1475. begin
  1476. if RemoteControlForm <> nil then
  1477. begin
  1478. if AAcceptted then
  1479. begin
  1480. RemoteControlForm.imgRCScreen.Cursor := crDefault;
  1481. RemoteControlForm.lblRCState.Caption := '控制中。';
  1482. RemoteControlForm.lblRCState2.Caption := '控制中。';
  1483. end
  1484. else
  1485. begin
  1486. RemoteControlForm.imgRCScreen.Cursor := crNo;
  1487. RemoteControlForm.lblRCState.Caption := '未被控制。';
  1488. RemoteControlForm.lblRCState2.Caption := '未被控制。';
  1489. end;
  1490. end;
  1491. end
  1492. else
  1493. begin
  1494. if AAcceptted then
  1495. lblRCState.Caption := '控制中。'
  1496. else
  1497. lblRCState.Caption := '未被控制。';
  1498. end;
  1499. end;
  1500. except
  1501. end;
  1502. end;
  1503. //------------------------------------------------------------------------------
  1504. procedure TTalkingForm.ShowGettedRemoteControlTransmiteControlControlResponse(AAcceptted: Boolean);
  1505. begin
  1506. try
  1507. if FRemoteControlMission <> nil then
  1508. begin
  1509. FRemoteControlMission.ShowControlResponse(AAcceptted);
  1510. end;
  1511. except
  1512. end;
  1513. end;
  1514. //------------------------------------------------------------------------------
  1515. procedure TTalkingForm.ShowGettedRemoteControlTransmiteControlRequest;
  1516. begin
  1517. try
  1518. if FRemoteControlMission <> nil then
  1519. begin
  1520. FRemoteControlMission.AccepteControl;
  1521. end;
  1522. except
  1523. end;
  1524. end;
  1525. //------------------------------------------------------------------------------
  1526. procedure TTalkingForm.ShowSendedRemoteControlTransmiteControlRequest;
  1527. begin
  1528. try
  1529. if FRemoteControlMission <> nil then
  1530. begin
  1531. FRemoteControlMission.ShowControlRequest;
  1532. end;
  1533. except
  1534. end;
  1535. end;
  1536. //------------------------------------------------------------------------------
  1537. procedure TTalkingForm.ShowCancelControlRemoteControlTransmite;
  1538. begin
  1539. try
  1540. if FRemoteControlMission <> nil then
  1541. begin
  1542. FRemoteControlMission.ShowCancelControl;
  1543. if RemoteControlForm <> nil then
  1544. begin
  1545. RemoteControlForm.imgRCScreen.Cursor := crNo;
  1546. RemoteControlForm.lblRCState.Caption := '未被控制。';
  1547. RemoteControlForm.lblRCState2.Caption := '未被控制。';
  1548. end;
  1549. lblRCState.Caption := '未被控制。';
  1550. end;
  1551. except
  1552. end;
  1553. end;
  1554. //------------------------------------------------------------------------------
  1555. procedure TTalkingForm.ShowGettedRemoteControlTransmiteConnectted;
  1556. begin
  1557. try
  1558. if FRemoteControlMission <> nil then
  1559. begin
  1560. FRemoteControlMission.AccepteSend;
  1561. end;
  1562. except
  1563. end;
  1564. end;
  1565. //------------------------------------------------------------------------------
  1566. procedure TTalkingForm.ShowGettedRemoteControlTransmiteResponse(AAcceptted: Boolean);
  1567. begin
  1568. try
  1569. if FRemoteControlMission <> nil then
  1570. begin
  1571. if AAcceptted then
  1572. begin
  1573. FRemoteControlMission.ShowAcceptted;
  1574. end
  1575. else
  1576. FRemoteControlMission.ShowDeclined;
  1577. end;
  1578. finally
  1579. if not AAcceptted then
  1580. FreeAndNil(FRemoteControlMission);
  1581. end;
  1582. end;
  1583. //------------------------------------------------------------------------------
  1584. procedure TTalkingForm.ShowGettedAudioTransmiteConnectted;
  1585. begin
  1586. try
  1587. if FAudioMission <> nil then
  1588. begin
  1589. FAudioMission.ShowConnectted;
  1590. spbSpk.Visible := True;
  1591. spbMic.Visible := True;
  1592. MasterVolume.Visible := True;
  1593. MicrophoneVolume.Visible := True;
  1594. FRealICQClient.OnCalculatedWaveInVolume := CalculatedWaveInVolume;
  1595. FRealICQClient.OnCalculatedWaveOutVolume := CalculatedWaveOutVolume;
  1596. end;
  1597. except
  1598. end;
  1599. end;
  1600. //------------------------------------------------------------------------------
  1601. procedure TTalkingForm.ShowGettedAudioTransmiteResponse(AAcceptted: Boolean);
  1602. begin
  1603. try
  1604. if FAudioMission <> nil then
  1605. begin
  1606. if AAcceptted then
  1607. begin
  1608. FAudioMission.ShowAcceptted;
  1609. FRealICQClient.OnCalculatedWaveInVolume := nil;
  1610. FRealICQClient.OnCalculatedWaveOutVolume := nil;
  1611. end
  1612. else
  1613. FAudioMission.ShowDeclined;
  1614. end;
  1615. finally
  1616. if not AAcceptted then
  1617. FreeAndNil(FAudioMission);
  1618. end;
  1619. end;
  1620. //------------------------------------------------------------------------------
  1621. function TTalkingForm.FindUpDownFileByBaseID(ABaseID: string): TUploadOrDownloadFileMission;
  1622. var
  1623. iLoop: Integer;
  1624. AUpDownFileMissions: TUploadOrDownloadFileMission;
  1625. begin
  1626. Result := nil;
  1627. for iLoop := 0 to FUpDownFileMissions.Count - 1 do
  1628. begin
  1629. AUpDownFileMissions := TUploadOrDownloadFileMission(FUpDownFileMissions[iLoop]);
  1630. if AnsiSameStr(AUpDownFileMissions.BaseID, ABaseID) then
  1631. begin
  1632. Result := AUpDownFileMissions;
  1633. Exit;
  1634. end;
  1635. end;
  1636. end;
  1637. function TTalkingForm.FindUpNodeFileByBaseID(ABaseID: string): TFileTransferWithNode;
  1638. var
  1639. iLoop: Integer;
  1640. AUpDownFileMissions: TFileTransferWithNode;
  1641. begin
  1642. Result := nil;
  1643. for iLoop := 0 to FNodeTransferMissions.Count - 1 do
  1644. begin
  1645. AUpDownFileMissions := TFileTransferWithNode(FNodeTransferMissions[iLoop]);
  1646. if AnsiSameStr(AUpDownFileMissions.BaseID, ABaseID) then
  1647. begin
  1648. Result := AUpDownFileMissions;
  1649. Exit;
  1650. end;
  1651. end;
  1652. end;
  1653. //------------------------------------------------------------------------------
  1654. function TTalkingForm.FindTransmitFileByBaseID(ABaseID: string): TTransmiteFileMission;
  1655. var
  1656. iLoop: Integer;
  1657. ATransmiteFileMission: TTransmiteFileMission;
  1658. begin
  1659. Result := nil;
  1660. for iLoop := 0 to FTransmiteFileMissions.Count - 1 do
  1661. begin
  1662. ATransmiteFileMission := TTransmiteFileMission(FTransmiteFileMissions[iLoop]);
  1663. if AnsiSameStr(ATransmiteFileMission.BaseID, ABaseID) then
  1664. begin
  1665. Result := ATransmiteFileMission;
  1666. Exit;
  1667. end;
  1668. end;
  1669. end;
  1670. //------------------------------------------------------------------------------
  1671. function TTalkingForm.FindFileTransmitByBaseID(ABaseID: string): TUploadOrDownloadFileMission;
  1672. var
  1673. iLoop: Integer;
  1674. AUploadOrDownloadFileMission: TUploadOrDownloadFileMission;
  1675. begin
  1676. Result := nil;
  1677. for iLoop := 0 to FFileTransmitters.Count - 1 do
  1678. begin
  1679. AUploadOrDownloadFileMission := FFileTransmitters.Objects[iLoop] as TUploadOrDownloadFileMission;
  1680. if AnsiSameStr(AUploadOrDownloadFileMission.BaseID, ABaseID) then
  1681. begin
  1682. Result := AUploadOrDownloadFileMission;
  1683. Exit;
  1684. end;
  1685. end;
  1686. end;
  1687. //------------------------------------------------------------------------------
  1688. procedure TTalkingForm.ShowGettedSendFileRequest(ASendFileRequestInfo: TSendFileRequestInfo);
  1689. var
  1690. ATransmiteFileMission, ATransmiteFileMissionTemp: TTransmiteFileMission;
  1691. iLoop, ReceivingFaceCount: Integer;
  1692. FileExt: string;
  1693. begin
  1694. ATransmiteFileMission := TTransmiteFileMission.Create(Self, tdReceiver, ASendFileRequestInfo.FileName, ASendFileRequestInfo.MD5Code, ASendFileRequestInfo.FileLength, ASendFileRequestInfo.Objective, ASendFileRequestInfo.FileExtImage);
  1695. ATransmiteFileMission.FOppositeID := ASendFileRequestInfo.OppositeID;
  1696. if ASendFileRequestInfo.Objective = foFace then
  1697. begin
  1698. ReceivingFaceCount := 0;
  1699. for iLoop := 0 to FTransmiteFileMissions.Count - 1 do
  1700. begin
  1701. ATransmiteFileMissionTemp := TTransmiteFileMission(FTransmiteFileMissions[iLoop]);
  1702. if ATransmiteFileMissionTemp = ATransmiteFileMission then
  1703. continue;
  1704. if ATransmiteFileMissionTemp.FObjective = foFile then
  1705. continue;
  1706. if (ATransmiteFileMissionTemp.FDirection = tdReceiver) and (ATransmiteFileMissionTemp.FAccepted = True) then
  1707. begin
  1708. Inc(ReceivingFaceCount);
  1709. if ReceivingFaceCount >= 1 then
  1710. Exit; //同时只允许传送1个表情
  1711. end;
  1712. end;
  1713. ATransmiteFileMission.Accept(TRealICQClient.GetReceivedFaceDir + ASendFileRequestInfo.FileName);
  1714. end
  1715. else
  1716. begin
  1717. FileExt := ExtractFileExt(ASendFileRequestInfo.FileName);
  1718. if (MainForm.RecvFileSafeLevel = fsHigh) or ((MainForm.RecvFileSafeLevel = fsMiddle) and (AnsiSameText(FileExt, '.EXE') or AnsiSameText(FileExt, '.COM'))) then
  1719. begin
  1720. ATransmiteFileMission.Decline;
  1721. FreeAndNil(ATransmiteFileMission);
  1722. end;
  1723. end;
  1724. end;
  1725. //------------------------------------------------------------------------------
  1726. procedure TTalkingForm.ShowSendOfflineFileRequest(AOppositeID: Cardinal);
  1727. var
  1728. iLoop: Integer;
  1729. ATransmiteFileMission: TTransmiteFileMission;
  1730. begin
  1731. for iLoop := 0 to FTransmiteFileMissions.Count - 1 do
  1732. begin
  1733. ATransmiteFileMission := TTransmiteFileMission(FTransmiteFileMissions[iLoop]);
  1734. if ATransmiteFileMission.FOppositeID = AOppositeID then
  1735. begin
  1736. ATransmiteFileMission.GettedSendOfflineFileRequest;
  1737. FreeAndNil(ATransmiteFileMission);
  1738. Exit;
  1739. end;
  1740. end;
  1741. end;
  1742. //------------------------------------------------------------------------------
  1743. procedure TTalkingForm.ShowCancelSendFile(AOppositeID: Cardinal);
  1744. var
  1745. iLoop: Integer;
  1746. ATransmiteFileMission: TTransmiteFileMission;
  1747. begin
  1748. for iLoop := 0 to FTransmiteFileMissions.Count - 1 do
  1749. begin
  1750. ATransmiteFileMission := TTransmiteFileMission(FTransmiteFileMissions[iLoop]);
  1751. if ATransmiteFileMission.FOppositeID = AOppositeID then
  1752. begin
  1753. ATransmiteFileMission.Cancel;
  1754. FreeAndNil(ATransmiteFileMission);
  1755. Exit;
  1756. end;
  1757. end;
  1758. end;
  1759. //------------------------------------------------------------------------------
  1760. procedure TTalkingForm.CancelAllSendFile;
  1761. var
  1762. iLoop: Integer;
  1763. ATransmiteFileMission: TTransmiteFileMission;
  1764. begin
  1765. for iLoop := FTransmiteFileMissions.Count - 1 downto 0 do
  1766. begin
  1767. ATransmiteFileMission := TTransmiteFileMission(FTransmiteFileMissions[iLoop]);
  1768. if not ATransmiteFileMission.FAccepted then
  1769. begin
  1770. if ATransmiteFileMission.FDirection = tdSender then
  1771. ATransmiteFileMission.Cancel
  1772. else
  1773. ATransmiteFileMission.Decline;
  1774. end
  1775. else if not ATransmiteFileMission.FMovingFile then
  1776. begin
  1777. ATransmiteFileMission.Stop;
  1778. end;
  1779. FreeAndNil(ATransmiteFileMission);
  1780. end;
  1781. end;
  1782. //------------------------------------------------------------------------------
  1783. procedure TTalkingForm.CancelAllUpDdownFile;
  1784. var
  1785. iLoop: Integer;
  1786. ATransmiteFileMission: TUploadOrDownloadFileMission;
  1787. begin
  1788. for iLoop := FUpDownFileMissions.Count - 1 downto 0 do
  1789. begin
  1790. ATransmiteFileMission := TUploadOrDownloadFileMission(FUpDownFileMissions[iLoop]);
  1791. ATransmiteFileMission.Stop;
  1792. FreeAndNil(ATransmiteFileMission);
  1793. end;
  1794. end;
  1795. procedure TTalkingForm.CancelAllUpDdownNodeFile;
  1796. var
  1797. iLoop: Integer;
  1798. ATransmiteFileMission: TFileTransferWithNode;
  1799. begin
  1800. for iLoop := FNodeTransferMissions.Count - 1 downto 0 do
  1801. begin
  1802. ATransmiteFileMission := TFileTransferWithNode(FNodeTransferMissions[iLoop]);
  1803. FreeAndNil(ATransmiteFileMission);
  1804. end;
  1805. end;
  1806. //------------------------------------------------------------------------------
  1807. procedure TTalkingForm.ShowSendedSendFileRequest(APtoPFileTransmitter: TPtoPFileTransmitter);
  1808. var
  1809. ATransmiteFileMission: TTransmiteFileMission;
  1810. begin
  1811. ATransmiteFileMission := TTransmiteFileMission.Create(Self, tdSender, APtoPFileTransmitter.FileName, APtoPFileTransmitter.MD5Code, APtoPFileTransmitter.StreamLength, APtoPFileTransmitter.Objective, APtoPFileTransmitter.FileExtImage);
  1812. ATransmiteFileMission.FPtoPFileTransmitter := APtoPFileTransmitter;
  1813. ATransmiteFileMission.FPtoPFileTransmitter.OnAcceptted := ATransmiteFileMission.FileTransmitterAcceptted;
  1814. ATransmiteFileMission.FPtoPFileTransmitter.OnDeclined := ATransmiteFileMission.FileTransmitterDeclined;
  1815. end;
  1816. {将消息内容显示在WebBrowser中}
  1817. //------------------------------------------------------------------------------
  1818. procedure TTalkingForm.AddMessageToWebBrowser(SenderID: string; SenderName, FontStr, MessageStr: string; SendDateTime: TDateTime; IsEncry: Boolean; ShowSendFailed: Boolean = False; IsHistory: Boolean = False);
  1819. var
  1820. MsgContent, HexString, HTML, SenderColor: string;
  1821. TextFont: TFont;
  1822. ID: string;
  1823. begin
  1824. ID := IntToStr(GetTickCount);
  1825. TextFont := TFont.Create;
  1826. StringToFont(FontStr, TextFont);
  1827. MsgContent := FilterHTMLCode(SenderName, MainForm.AllowURL);
  1828. if Category = tcTeam then
  1829. MsgContent := MsgContent + '(<a href="OpenRightMenu,' + SenderId + '">' + Copy(SenderId, Pos('-', SenderId) + 1, Length(SenderId)) + '</a>)';
  1830. if CompareDate(Now, SendDateTime) = EqualsValue then
  1831. MsgContent := MsgContent + ' ' + TimeToStr(SendDateTime)
  1832. else
  1833. MsgContent := MsgContent + ' ' + DateTimeToStr(SendDateTime);
  1834. if ShowSendFailed then
  1835. MsgContent := MsgContent + '(发送消息超时)'
  1836. else if (not AnsiSameText(SenderID, MainForm.RealICQClient.LoginName)) and (not IsHistory) then
  1837. MsgContent := MsgContent + ' <a href="about:blankAddToWebRemark://_' + ID + '" title="添加至备忘录"><img src="' + ExtractFilePath(Application.ExeName) + Action_Paste_GIF + '" width="16" height="16" hspace="1" align="absBottom" border="0"></a><br>';
  1838. if not IsHistory then
  1839. begin
  1840. if AnsiSameText(SenderID, FReceiver) then
  1841. SenderColor := '#009900'
  1842. else
  1843. SenderColor := '#0000FF';
  1844. end
  1845. else
  1846. SenderColor := '#686868';
  1847. HTML := '<DIV style="padding-bottom:2px; padding-top:2px; color:' + SenderColor + '">' + MsgContent + '</DIV>';
  1848. HTML := HTML + '<DIV style="padding-left:9px; padding-bottom:2px;';
  1849. //设置字体
  1850. HTML := HTML + ';font-family:' + TextFont.Name;
  1851. HexString := IntToHex(TextFont.Color, 6); //获取颜色的16进制格式
  1852. HTML := HTML + ';color:#' + Copy(HexString, 5, 2) + Copy(HexString, 3, 2) + Copy(HexString, 1, 2); //将BGR颜色转换为RGB颜色
  1853. HTML := HTML + ';font-size:' + IntToStr(TextFont.Size) + 'pt';
  1854. if fsBold in TextFont.Style then
  1855. HTML := HTML + ';font-weight:bold';
  1856. if fsItalic in TextFont.Style then
  1857. HTML := HTML + ';font-style:italic';
  1858. HTML := HTML + ';text-decoration:';
  1859. if fsUnderline in TextFont.Style then
  1860. HTML := HTML + ' underline ';
  1861. if fsStrikeOut in TextFont.Style then
  1862. HTML := HTML + ' line-through ';
  1863. if IsEncry then
  1864. begin
  1865. if AnsiSameText(MainForm.RealICQClient.LoginName, SenderId) then
  1866. MsgContent := '<span id=SeePrivateMessage' + MessageStr + '><a href="SeePrivateMessage,' + MessageStr + '">' + '签收消息已发送' + '</a></span>'
  1867. else
  1868. MsgContent := '<span id=SeePrivateMessage' + MessageStr + '><a href="SeePrivateMessage,' + MessageStr + '">' + '收到一条待签收消息' + '</a></span>'
  1869. end
  1870. else
  1871. begin
  1872. MsgContent := FilterHTMLCode(MessageStr, MainForm.AllowURL); //过滤HTML代码
  1873. GetFaces(Self, SenderID, MsgContent, not (IsHistory or ShowSendFailed));
  1874. end;
  1875. //如果对方和自己的语言版本相同,则不要进行转换
  1876. //此处的代码,应该要移到存储消息记录到数据库之前
  1877. //if 自己是简体版 and 对方是繁体版 then MsgContent := BIG5toGB(MsgContent);
  1878. //if 自己是繁体版 and 对方是简体版 then MsgContent := GBtoBIG5(MsgContent);
  1879. HTML := HTML + '"><span id="' + ID + '">' + MsgContent + '</span> </DIV>';
  1880. InsertHTML(WebBrowser, HTML);
  1881. end;
  1882. procedure TTalkingForm.AddMessageToWebBrowserTop(SenderID: string; SenderName, FontStr, MessageStr: string; SendDateTime: TDateTime; IsEncry: Boolean; ShowSendFailed: Boolean = False; IsHistory: Boolean = False);
  1883. var
  1884. MsgContent, HexString, HTML, SenderColor: string;
  1885. TextFont: TFont;
  1886. ID: string;
  1887. begin
  1888. ID := IntToStr(GetTickCount);
  1889. TextFont := TFont.Create;
  1890. StringToFont(FontStr, TextFont);
  1891. MsgContent := FilterHTMLCode(SenderName, MainForm.AllowURL);
  1892. if Category = tcTeam then
  1893. MsgContent := MsgContent + '(<a href="OpenRightMenu,' + SenderId + '">' + Copy(SenderId, Pos('-', SenderId) + 1, Length(SenderId)) + '</a>)';
  1894. if CompareDate(Now, SendDateTime) = EqualsValue then
  1895. MsgContent := MsgContent + ' ' + TimeToStr(SendDateTime)
  1896. else
  1897. MsgContent := MsgContent + ' ' + DateTimeToStr(SendDateTime);
  1898. if ShowSendFailed then
  1899. MsgContent := MsgContent + '(发送消息超时)'
  1900. else if (not AnsiSameText(SenderID, MainForm.RealICQClient.LoginName)) and (not IsHistory) then
  1901. MsgContent := MsgContent + ' <a href="about:blankAddToWebRemark://_' + ID + '" title="添加至备忘录"><img src="' + ExtractFilePath(Application.ExeName) + Action_Paste_GIF + '" width="16" height="16" hspace="1" align="absBottom" border="0"></a><br>';
  1902. if not IsHistory then
  1903. begin
  1904. if AnsiSameText(SenderID, FReceiver) then
  1905. SenderColor := '#009900'
  1906. else
  1907. SenderColor := '#0000FF';
  1908. end
  1909. else
  1910. SenderColor := '#686868';
  1911. HTML := '<DIV style="padding-bottom:2px; padding-top:2px; color:' + SenderColor + '">' + MsgContent + '</DIV>';
  1912. HTML := HTML + '<DIV style="padding-left:9px; padding-bottom:2px;';
  1913. //设置字体
  1914. HTML := HTML + ';font-family:' + TextFont.Name;
  1915. HexString := IntToHex(TextFont.Color, 6); //获取颜色的16进制格式
  1916. HTML := HTML + ';color:#' + Copy(HexString, 5, 2) + Copy(HexString, 3, 2) + Copy(HexString, 1, 2); //将BGR颜色转换为RGB颜色
  1917. HTML := HTML + ';font-size:' + IntToStr(TextFont.Size) + 'pt';
  1918. if fsBold in TextFont.Style then
  1919. HTML := HTML + ';font-weight:bold';
  1920. if fsItalic in TextFont.Style then
  1921. HTML := HTML + ';font-style:italic';
  1922. HTML := HTML + ';text-decoration:';
  1923. if fsUnderline in TextFont.Style then
  1924. HTML := HTML + ' underline ';
  1925. if fsStrikeOut in TextFont.Style then
  1926. HTML := HTML + ' line-through ';
  1927. if IsEncry then
  1928. begin
  1929. if AnsiSameText(MainForm.RealICQClient.LoginName, SenderId) then
  1930. MsgContent := '<span id=SeePrivateMessage' + MessageStr + '><a href="SeePrivateMessage,' + MessageStr + '">' + '签收消息已发送' + '</a></span>'
  1931. else
  1932. MsgContent := '<span id=SeePrivateMessage' + MessageStr + '><a href="SeePrivateMessage,' + MessageStr + '">' + '收到一条待签收消息' + '</a></span>'
  1933. end
  1934. else
  1935. begin
  1936. MsgContent := FilterHTMLCode(MessageStr, MainForm.AllowURL); //过滤HTML代码
  1937. GetFaces(Self, SenderID, MsgContent, not (IsHistory or ShowSendFailed));
  1938. end;
  1939. //如果对方和自己的语言版本相同,则不要进行转换
  1940. //此处的代码,应该要移到存储消息记录到数据库之前
  1941. //if 自己是简体版 and 对方是繁体版 then MsgContent := BIG5toGB(MsgContent);
  1942. //if 自己是繁体版 and 对方是简体版 then MsgContent := GBtoBIG5(MsgContent);
  1943. HTML := HTML + '"><span id="' + ID + '">' + MsgContent + '</span> </DIV>';
  1944. InsertHTMLTop(WebBrowser, HTML);
  1945. end;
  1946. {显示群组消息}
  1947. //------------------------------------------------------------------------------
  1948. procedure TTalkingForm.ShowTeamMessage(RealICQTeamMessage: TRealICQTeamMessage; ShowSendFailed: Boolean = False);
  1949. var
  1950. AFileName, AMessageStr: string;
  1951. SenderName: string;
  1952. FRealICQUser: TRealICQUser;
  1953. HTML: string;
  1954. Alias: string;
  1955. begin
  1956. Alias := TTeamsAdapter.GetAlias(RealICQTeamMessage.TeamID, RealICQTeamMessage.Sender);
  1957. FRealICQUser := TUsersService.GetUsersService.GetOrRequestUser(RealICQTeamMessage.Sender);
  1958. if Alias = '' then
  1959. begin
  1960. if Length(Trim(FRealICQUser.DisplayName)) = 0 then
  1961. SenderName := FRealICQUser.LoginName
  1962. else
  1963. SenderName := FRealICQUser.DisplayName;
  1964. end
  1965. else
  1966. SenderName := Alias;
  1967. if Copy(RealICQTeamMessage.MessageStr, 1, 11) = '<TeamShare>' then
  1968. begin
  1969. if Copy(RealICQTeamMessage.MessageStr, Length(RealICQTeamMessage.MessageStr) - 11, 12) = '</TeamShare>' then
  1970. begin
  1971. HTML := '<table width="100%" style="font-size:9pt;border:0px; padding:2px; color:#000000; margin-top:2px;margin-bottom:5px;"><tr><td>';
  1972. HTML := HTML + '<img src="' + ExtractFilePath(Application.ExeName) + TeamSharePic + '" align="absmiddle"> ';
  1973. HTML := HTML + '<span>';
  1974. AFileName := ReplaceStr(ReplaceStr(RealICQTeamMessage.MessageStr, '<TeamShare>', ''), '</TeamShare>', '');
  1975. HTML := HTML + FilterHtmlCode(SenderName, MainForm.AllowURL) + ' 共享了文件:' + AFileName + ' <a href="ShowTeamShare_' + AFileName + '" title="点击查看群共享空间" >查看</a> ';
  1976. HTML := HTML + '</span>';
  1977. HTML := HTML + '</td></tr></table>';
  1978. InsertHTML(WebBrowser, HTML);
  1979. Exit;
  1980. end;
  1981. end;
  1982. if RealICQTeamMessage.IsEncryMessage then
  1983. begin
  1984. AMessageStr := IntToStr(RealICQTeamMessage.ID)
  1985. end
  1986. else
  1987. AMessageStr := RealICQTeamMessage.MessageStr;
  1988. AddMessageToWebBrowser(FRealICQUser.LoginName, SenderName, RealICQTeamMessage.FontStr, AMessageStr, RealICQTeamMessage.SendDateTime, RealICQTeamMessage.IsEncryMessage, ShowSendFailed);
  1989. end;
  1990. {显示消息}
  1991. //------------------------------------------------------------------------------
  1992. procedure TTalkingForm.ShowMessage(RealICQMessage: TRealICQMessage; ShowSendFailed: Boolean = False);
  1993. var
  1994. SenderName, AMessageStr: string;
  1995. FRealICQUser: TRealICQUser;
  1996. begin
  1997. FRealICQUser := TUsersService.GetUsersService.GetOrRequestUser(RealICQMessage.Sender);
  1998. if Length(Trim(FRealICQUser.DisplayName)) = 0 then
  1999. SenderName := FRealICQUser.LoginName
  2000. else
  2001. SenderName := FRealICQUser.DisplayName;
  2002. if RealICQMessage.IsEncryMessage then
  2003. begin
  2004. AMessageStr := IntToStr(RealICQMessage.ID)
  2005. end
  2006. else
  2007. AMessageStr := RealICQMessage.MessageStr;
  2008. AddMessageToWebBrowser(FRealICQUser.LoginName, SenderName, RealICQMessage.FontStr, AMessageStr, RealICQMessage.SendDateTime, RealICQMessage.IsEncryMessage, ShowSendFailed);
  2009. if AnsiSameText(RealICQMessage.Sender, Receiver) then
  2010. begin
  2011. ClearInputtingMessageTimerTimer(nil);
  2012. end;
  2013. end;
  2014. //------------------------------------------------------------------------------
  2015. procedure TTalkingForm.ImgHideShowUserInformationClick(Sender: TObject);
  2016. begin
  2017. imgHideShowUserInformation.Enabled := False;
  2018. try
  2019. if pnlUserInformation.Width = 0 then
  2020. begin
  2021. Width := Width + FOldWidthOfUserInfo;
  2022. pnlUserInformation.Width := FOldWidthOfUserInfo;
  2023. end
  2024. else
  2025. begin
  2026. FOldWidthOfUserInfo := pnlUserInformation.Width;
  2027. pnlUserInformation.Width := 0;
  2028. Width := Width - FOldWidthOfUserInfo;
  2029. end;
  2030. finally
  2031. imgHideShowUserInformation.Enabled := True;
  2032. ShowspbShowHideUserInformationState;
  2033. if ImgHideShowUserInformation.Hint = '隐藏侧边' then
  2034. ImgHideShowUserInformation.Picture.Bitmap.Handle := LoadBitmap(hInstance, 'HideBmp')
  2035. else
  2036. ImgHideShowUserInformation.Picture.Bitmap.Handle := LoadBitmap(hInstance, 'ShowBmp');
  2037. ConvertBitmapToColor(ImgHideShowUserInformation.Picture.Bitmap, MainForm.UIMainColor);
  2038. ImgHideShowUserInformation.Invalidate;
  2039. end;
  2040. end;
  2041. //------------------------------------------------------------------------------
  2042. procedure TTalkingForm.ShowSpbShowHideUserInformationState;
  2043. begin
  2044. if pnlUserInformation.Width = 0 then
  2045. begin
  2046. imgHideShowUserInformation.Hint := '显示侧边';
  2047. end
  2048. else
  2049. begin
  2050. imgHideShowUserInformation.Hint := '隐藏侧边';
  2051. end;
  2052. end;
  2053. procedure TTalkingForm.ImgHideShowUserInformationMouseEnter(Sender: TObject);
  2054. begin
  2055. if ImgHideShowUserInformation.Hint = '隐藏侧边' then
  2056. ImgHideShowUserInformation.Picture.Bitmap.Handle := LoadBitmap(hInstance, 'HideBmp')
  2057. else
  2058. ImgHideShowUserInformation.Picture.Bitmap.Handle := LoadBitmap(hInstance, 'ShowBmp');
  2059. ConvertBitmapToColor(ImgHideShowUserInformation.Picture.Bitmap, MainForm.UIMainColor);
  2060. ImgHideShowUserInformation.Invalidate;
  2061. end;
  2062. procedure TTalkingForm.ImgHideShowUserInformationMouseLeave(Sender: TObject);
  2063. begin
  2064. ImgHideShowUserInformation.Picture.Bitmap := nil;
  2065. ImgHideShowUserInformation.Invalidate;
  2066. end;
  2067. procedure TTalkingForm.InsertFaceToRichEdit(Face: TFace; FaceID: Integer);
  2068. var
  2069. Sys32Dir: string;
  2070. pSys32Dir: array[0..Max_Path] of char;
  2071. begin
  2072. try
  2073. RichEdInputer.InsertImage(Face.FileName, FaceID);
  2074. except
  2075. on e: exception do
  2076. begin
  2077. GetSystemDirectory(pSys32Dir, Max_Path);
  2078. Sys32Dir := StrPas(pSys32Dir);
  2079. CopyFile(PChar(ExtractFilePath(paramstr(0)) + ImageX2_DLL_PACH), PChar(Sys32Dir + '\ImageX2.dll'), False);
  2080. try
  2081. WinExec(PChar('regsvr32 /s "' + 'ImageX2.dll"'), SW_HIDE);
  2082. except
  2083. end;
  2084. Sleep(500);
  2085. RichEdInputer.InsertImage(Face.FileName, FaceID);
  2086. end;
  2087. end;
  2088. end;
  2089. //------------------------------------------------------------------------------
  2090. procedure TTalkingForm.ChangeUIColor(AColor: TColor);
  2091. begin
  2092. inherited ChangeUIColor(AColor);
  2093. spbCloseTeamWebDisk.ChangeUIColor(AColor);
  2094. PnlShowHideUserInfo.Color := FormColor;
  2095. pnlClient.Color := FormColor;
  2096. //pnlMenu.Color := FormColor;
  2097. pnlUserInformation.Color := FormColor;
  2098. pnlTalkingArea.Color := FormColor;
  2099. //Splitter1.Color := ConvertColorToColor(Splitter1.Color, AColor);
  2100. Panel5.Color := FormColor;
  2101. ConvertBitmapToColor(ImgInputerTopLeft.Picture.Bitmap, AColor);
  2102. ImgInputerTopLeft.Invalidate;
  2103. ConvertBitmapToColor(ImgInputerTopRight.Picture.Bitmap, AColor);
  2104. ImgInputerTopRight.Invalidate;
  2105. //pnlForActionMainMenuBar.Color := FormColor;
  2106. pnlForActionToolBar.Color := FormColor;
  2107. pnlTeamMembers.Color := FormColor;
  2108. pnlTeamCallBoard.Color := FormColor;
  2109. //ActionMainMenuBar.ColorMap.Color := FormColor;
  2110. //ActionMainMenuBar.ColorMap.SelectedColor := ConvertColorToColor(ActionMainMenuBar.ColorMap.SelectedColor, AColor);
  2111. //ActionMainMenuBar.ColorMap.BtnFrameColor := ConvertColorToColor(ActionMainMenuBar.ColorMap.BtnFrameColor, AColor);
  2112. //ActionMainMenuBar.Font.Name := '宋体';
  2113. //ActionMainMenuBar.Font.Size := 9;
  2114. if FVCardFrom <> nil then
  2115. FVCardFrom.ChangeUIColor(AColor);
  2116. spbAddUser.ChangeUIColor(AColor);
  2117. spbSendFile.ChangeUIColor(AColor);
  2118. spbAudio.ChangeUIColor(AColor);
  2119. spbVideo.ChangeUIColor(AColor);
  2120. spbSeeTeamOptions.ChangeUIColor(AColor);
  2121. spbQuitTeam.ChangeUIColor(AColor);
  2122. spbDisbandTeam.ChangeUIColor(AColor);
  2123. spbUploadFile.ChangeUIColor(AColor);
  2124. spbRemoteControl.ChangeUIColor(AColor);
  2125. spbSendFolder.ChangeUIColor(AColor);
  2126. spbTeamNetWorkDisk.ChangeUIColor(AColor);
  2127. spbSendSMS.ChangeUIColor(AColor);
  2128. spbPostSMS.ChangeUIColor(AColor);
  2129. spbUserInfo.ChangeUIColor(AColor);
  2130. spbSet.ChangeUIColor(AColor);
  2131. spbAbout.ChangeUIColor(AColor);
  2132. btnQR.ChangeUIColor(AColor);
  2133. spbSelUIColor.ChangeUIColor(AColor);
  2134. spbUploadTeamFile.ChangeUIColor(AColor);
  2135. spbUploadTeamFileProcess.ChangeUIColor(AColor);
  2136. ConvertBitmapToColor(imgToolbarBack.Picture.Bitmap, AColor);
  2137. imgToolbarBack.Invalidate;
  2138. ConvertBitmapToColor(ImgDisplayerTopLeft.Picture.Bitmap, AColor);
  2139. ImgDisplayerTopLeft.Invalidate;
  2140. ConvertBitmapToColor(ImgDisplayerTopRight.Picture.Bitmap, AColor);
  2141. ImgDisplayerTopRight.Invalidate;
  2142. ConvertBitmapToColor(imgTeamWebDiskToolbarBack.Picture.Bitmap, AColor);
  2143. imgTeamWebDiskToolbarBack.Invalidate;
  2144. ShpDisplayerTopMiddle.Pen.Color := ConvertColorToColor(ShpDisplayerTopMiddle.Pen.Color, AColor);
  2145. ShpDisplayerTopMiddle.Brush.Color := ConvertColorToColor(ShpDisplayerTopMiddle.Brush.Color, AColor);
  2146. ShpDisplayerClient.Pen.Color := ConvertColorToColor(ShpDisplayerClient.Pen.Color, AColor);
  2147. ConvertBitmapToColor(ImgInputerTopLeft.Picture.Bitmap, AColor);
  2148. ImgInputerTopLeft.Invalidate;
  2149. //ConvertBitmapToColor(ImgInputerTopMiddle.Picture.Bitmap, AColor);
  2150. //ImgInputerTopMiddle.Invalidate;
  2151. ConvertBitmapToColor(ImgInputerTopRight.Picture.Bitmap, AColor);
  2152. ImgInputerTopRight.Invalidate;
  2153. //ConvertBitmapToColor(ImgInputerBottomLeft.Picture.Bitmap, AColor);
  2154. //ImgInputerBottomLeft.Invalidate;
  2155. //ConvertBitmapToColor(ImgInputerBottomMiddle.Picture.Bitmap, AColor);
  2156. //ImgInputerBottomMiddle.Invalidate;
  2157. //ConvertBitmapToColor(ImgInputerBottomRight.Picture.Bitmap, AColor);
  2158. //ImgInputerBottomRight.Invalidate;
  2159. //ConvertBitmapToColor(ImgMyVideoBorder.Picture.Bitmap, AColor);
  2160. //ImgMyVideoBorder.Invalidate;
  2161. //ConvertBitmapToColor(ImgYourVideoBorder.Picture.Bitmap, AColor);
  2162. //ImgYourVideoBorder.Invalidate;
  2163. ShpInputerClient.Pen.Color := ConvertColorToColor(ShpInputerClient.Pen.Color, AColor);
  2164. //ConvertBitmapToColor(ImgHeadBorderForMyInfo.Picture.Bitmap, AColor);
  2165. //ImgHeadBorderForMyInfo.Invalidate;
  2166. SpbForMyInfo.ChangeUIColor(AColor);
  2167. //rndMyInfo.ChangeUIColor(AColor);
  2168. //pgcMyInfo.Color := rndMyInfo.BackColor;
  2169. //ConvertBitmapToColor(ImgHeadBorderForYourInfo.Picture.Bitmap, AColor);
  2170. //ImgHeadBorderForYourInfo.Invalidate;
  2171. SpbForYourInfo.ChangeUIColor(AColor);
  2172. //pgcYourInfo.Color := rndYourInfo.BackColor;
  2173. //rndYourInfo.ChangeUIColor(AColor);
  2174. SpbForTeamMemberInfo.ChangeUIColor(AColor);
  2175. PnlTeamWebDisk.Color := FormColor;
  2176. RndTeamWebDisk.ChangeUIColor(AColor);
  2177. rndTeamMembers.ChangeUIColor(AColor);
  2178. rndTeamCallBoard.ChangeUIColor(AColor);
  2179. lblTeamMemberCount.Font.Color := ConvertColorToColor(lblTeamMemberCount.Font.Color, AColor);
  2180. rndTeamMemberContainer.ChangeUIColor(AColor);
  2181. //ShpHint.Pen.Color := ConvertColorToColor(ShpHint.Pen.Color, AColor);
  2182. //CardYour.ChangeUIColor(AColor);
  2183. //CardMine.ChangeUIColor(AColor);
  2184. btSend.ChangeUIColor(AColor);
  2185. btCloseTalk.ChangeUIColor(AColor);
  2186. btDownArrow.ChangeUIColor(AColor);
  2187. spbFont.ChangeUIColor(AColor);
  2188. spbFace.ChangeUIColor(AColor);
  2189. spbSendImage.ChangeUIColor(AColor);
  2190. spbCopyScreen.ChangeUIColor(AColor);
  2191. //spbCopyScreen2.ChangeUIColor(AColor);
  2192. spbShakeWindow.ChangeUIColor(AColor);
  2193. spbBackground.ChangeUIColor(AColor);
  2194. spbHistroyMessage.ChangeUIColor(AColor);
  2195. spbNormalMsg.ChangeUIColor(AColor);
  2196. spbEncryMsg.ChangeUIColor(AColor);
  2197. MicrophoneVolume.ChangeUIColor(AColor);
  2198. //MicrophoneVolume.Color := rndMyInfo.BackColor;
  2199. MasterVolume.ChangeUIColor(AColor);
  2200. //MasterVolume.Color := rndYourInfo.BackColor;
  2201. rndMyInfo.BorderColor := ConvertColorToColor(rndMyInfo.BorderColor, AColor);
  2202. rndYourInfo.BorderColor := ConvertColorToColor(rndYourInfo.BorderColor, AColor);
  2203. spbSpk.ChangeUIColor(AColor);
  2204. spbMic.ChangeUIColor(AColor);
  2205. if FLVTeamMembers <> nil then
  2206. FLVTeamMembers.ChangeUIColor(AColor);
  2207. if VideoForm <> nil then
  2208. begin
  2209. if VideoForm.TalkingForm = Self then
  2210. VideoForm.ChangeUIColor(AColor);
  2211. end;
  2212. try
  2213. FWindowColor := AColor;
  2214. if not WebBrowser.Busy then
  2215. SetDomStyle(WebBrowser.Document as IHtmlDocument2);
  2216. except
  2217. end;
  2218. end;
  2219. //------------------------------------------------------------------------------
  2220. procedure TTalkingForm.ClearInputtingMessageTimerTimer(Sender: TObject);
  2221. var
  2222. RealICQUser: TRealICQUser;
  2223. UserName: string;
  2224. begin
  2225. lblState.Caption := '';
  2226. if FCategory = tcNormal then
  2227. begin
  2228. RealICQUser := TUsersService.GetUsersService.GetOrRequestUser(Receiver);
  2229. if not Assigned(RealICQUser) then
  2230. UserName := FReceiver
  2231. else if RealICQUser.DisplayName = '' then
  2232. UserName := RealICQUser.LoginName
  2233. else
  2234. UserName := RealICQUser.DisplayName;
  2235. Caption := UserName;
  2236. PostMessage(Handle, WM_SIZE, 0, 0);
  2237. end;
  2238. end;
  2239. procedure TTalkingForm.EditFontSetExecute(Sender: TObject);
  2240. begin
  2241. FontDialog.Font := RichEdInputer.Font;
  2242. if FontDialog.Execute then
  2243. begin
  2244. RichEdInputer.Font := FontDialog.Font;
  2245. MainForm.InputFont := RichEdInputer.Font;
  2246. RichEdInputer.DisableAlign;
  2247. try
  2248. PostMessage(RichEdInputer.Handle, WM_SIZE, 0, 0);
  2249. finally
  2250. RichEdInputer.EnableAlign;
  2251. end;
  2252. end;
  2253. end;
  2254. //------------------------------------------------------------------------------
  2255. procedure TTalkingForm.FormClose(Sender: TObject; var Action: TCloseAction);
  2256. begin
  2257. Action := caFree;
  2258. FreeAndNil(FTeamUpLoadFile);
  2259. end;
  2260. //------------------------------------------------------------------------------
  2261. function TTalkingForm.CheckNotCompletedMission: Integer;
  2262. begin
  2263. Result := 0;
  2264. //是否有音频对话任务未结束
  2265. if FAudioMission <> nil then
  2266. Inc(Result);
  2267. //是否有音频对话任务未结束
  2268. if FVideoMission <> nil then
  2269. Inc(Result);
  2270. //是否有文件传输任务未结束
  2271. Inc(Result, FTransmiteFileMissions.Count);
  2272. //是否有文件传输任务未结束
  2273. Inc(Result, FUpDownFileMissions.Count);
  2274. //是否有远程协助任务未结束
  2275. if FRemoteControlMission <> nil then
  2276. Inc(Result);
  2277. //是否有离线文件传输任务未结束
  2278. Inc(Result, FNodeTransferMissions.Count);
  2279. end;
  2280. procedure TTalkingForm.CloseAllMissions;
  2281. var
  2282. iLoop: Integer;
  2283. WaitingFace: TWaitingFace;
  2284. begin
  2285. try
  2286. {$region '结束音频对话'}
  2287. try
  2288. if FAudioMission <> nil then
  2289. begin
  2290. if FAudioMission.FAccepted then
  2291. FRealICQClient.StopAudioTransmitter(Receiver)
  2292. else if FAudioMission.FIsSource then
  2293. FRealICQClient.CancelAudioTransmitter(Receiver)
  2294. else
  2295. FRealICQClient.DeclineAudioTransmitter(Receiver);
  2296. end;
  2297. except
  2298. end;
  2299. {$endregion}
  2300. {$region '结束视频对话'}
  2301. try
  2302. if FVideoMission <> nil then
  2303. begin
  2304. if FVideoMission.FAccepted then
  2305. FRealICQClient.StopVideoTransmitter(Receiver)
  2306. else if FVideoMission.FIsSource then
  2307. FRealICQClient.CancelVideoTransmitter(Receiver)
  2308. else
  2309. FRealICQClient.DeclineVideoTransmitter(Receiver);
  2310. end;
  2311. except
  2312. end;
  2313. {$endregion}
  2314. {$region '结束程协助'}
  2315. try
  2316. if FRemoteControlMission <> nil then
  2317. begin
  2318. if FRemoteControlMission.FAccepted then
  2319. FRealICQClient.StopRemoteControlTransmitter(Receiver)
  2320. else if FRemoteControlMission.FIsSource then
  2321. FRealICQClient.CancelRemoteControlTransmitter(Receiver)
  2322. else
  2323. FRealICQClient.DeclineRemoteControlTransmitter(Receiver);
  2324. for iLoop := 0 to 10 do
  2325. begin
  2326. Sleep(50);
  2327. Application.ProcessMessages;
  2328. end;
  2329. end;
  2330. except
  2331. end;
  2332. {$endregion}
  2333. {$region '结束文件传输'}
  2334. try
  2335. CancelAllSendFile;
  2336. except
  2337. end;
  2338. {$endregion}
  2339. {$region '结束离线文件传输'}
  2340. try
  2341. CancelAllUpDdownFile;
  2342. except
  2343. end;
  2344. {$endregion}
  2345. {$region '删除等待表情的任务'}
  2346. for iLoop := WaitingFaces.Count - 1 downto 0 do
  2347. begin
  2348. WaitingFace := WaitingFaces.Objects[iLoop] as TWaitingFace;
  2349. if WaitingFace.WebBrowser = Self.WebBrowser then
  2350. begin
  2351. WaitingFaces.Delete(iLoop);
  2352. FreeAndNil(WaitingFace);
  2353. end;
  2354. end;
  2355. {$endregion}
  2356. {$region '结束Node文件传输'}
  2357. try
  2358. CancelAllUpDdownNodeFile;
  2359. except
  2360. end;
  2361. {$endregion}
  2362. except
  2363. end;
  2364. end;
  2365. //------------------------------------------------------------------------------
  2366. procedure TTalkingForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  2367. var
  2368. NotCompletedMission, iIndex: Integer;
  2369. ATeam: TRealICQTeam;
  2370. begin
  2371. try
  2372. if FCategory = tcTeam then
  2373. begin
  2374. iIndex := FRealICQClient.Teams.IndexOf(FTeamID);
  2375. if iIndex = -1 then
  2376. Exit;
  2377. ATeam := FRealICQClient.Teams.Objects[iIndex] as TRealICQTeam;
  2378. if ATeam.IsTempTeam then
  2379. begin
  2380. if AnsiSameText(ATeam.TeamCreater, FRealICQClient.LoginName) then
  2381. begin
  2382. if MessageBox(Handle, '关闭窗口将会解散该临时群组会话,确定要关闭吗? ', '提示', MB_ICONQUESTION or MB_OKCANCEL) <> ID_OK then
  2383. begin
  2384. CanClose := False;
  2385. Exit;
  2386. end
  2387. else
  2388. begin
  2389. FRealICQClient.DisbandTeam(FTeamID);
  2390. end;
  2391. end
  2392. else
  2393. begin
  2394. if MessageBox(Handle, '闭窗口将会解散该临时群组会话,确定要关闭吗? ', '提示', MB_ICONQUESTION or MB_OKCANCEL) <> ID_OK then
  2395. begin
  2396. CanClose := False;
  2397. Exit;
  2398. end
  2399. else
  2400. begin
  2401. FRealICQClient.QuitTeam(FTeamID);
  2402. end;
  2403. end;
  2404. end;
  2405. NotCompletedMission := CheckNotCompletedMission;
  2406. if NotCompletedMission > 0 then
  2407. begin
  2408. if MessageBox(Handle, PChar('当前还有 ' + IntToStr(NotCompletedMission) + ' 个任务未结束,确定要关闭窗口吗? '), '提示', MB_ICONQUESTION or MB_OKCANCEL) <> ID_OK then
  2409. begin
  2410. CanClose := False;
  2411. Exit;
  2412. end;
  2413. end;
  2414. CloseAllMissions;
  2415. end
  2416. else
  2417. begin
  2418. NotCompletedMission := CheckNotCompletedMission;
  2419. if NotCompletedMission > 0 then
  2420. begin
  2421. if MessageBox(Handle, PChar('当前还有 ' + IntToStr(NotCompletedMission) + ' 个任务未结束,确定要关闭窗口吗? '), '提示', MB_ICONQUESTION or MB_OKCANCEL) <> ID_OK then
  2422. begin
  2423. CanClose := False;
  2424. Exit;
  2425. end;
  2426. end;
  2427. CloseAllMissions;
  2428. end;
  2429. except
  2430. end;
  2431. CanClose := True;
  2432. end;
  2433. //------------------------------------------------------------------------------
  2434. procedure TTalkingForm.FormCreate(Sender: TObject);
  2435. var
  2436. iLoop: Integer;
  2437. begin
  2438. FMaxID := MaxInt;
  2439. FTeamUpLoadFile := TUpLoadFile.Create;
  2440. FTeamUpLoadFile.OnProgress := TeamUpFileProgress;
  2441. FTeamUpLoadFile.OnComplete := DownFileComplete;
  2442. TalkingForms.Add(Self);
  2443. ImagesList := TList.Create;
  2444. DoubleBuffered := True;
  2445. pnlClient.DoubleBuffered := True;
  2446. pnlToolBar.DoubleBuffered := True;
  2447. //pnlMenu.DoubleBuffered := True;
  2448. pnlUserInformation.DoubleBuffered := True;
  2449. pnlTalkingArea.DoubleBuffered := True;
  2450. pnlInputer.DoubleBuffered := True;
  2451. pnlDisplayer.DoubleBuffered := True;
  2452. pnlMyInfo.DoubleBuffered := True;
  2453. pnlYourInfo.DoubleBuffered := True;
  2454. pnlHint.DoubleBuffered := True;
  2455. pnlForWebBrowser.DoubleBuffered := True;
  2456. tsMyHeadImage.DoubleBuffered := True;
  2457. tsYourHeadImage.DoubleBuffered := True;
  2458. btSend.DoubleBuffered := True;
  2459. WebBrowser.DoubleBuffered := False;
  2460. tsYourVideo.DoubleBuffered := True;
  2461. tsMyVideo.DoubleBuffered := True;
  2462. ImgYourVideo.Parent.DoubleBuffered := True;
  2463. //ImgYourVideoBorder.Parent.DoubleBuffered := True;
  2464. ImgMyVideo.Parent.DoubleBuffered := True;
  2465. //ImgMyVideoBorder.Parent.DoubleBuffered := True;
  2466. pnlForActionToolBar.DoubleBuffered := True;
  2467. pnlInputeBack.DoubleBuffered := True;
  2468. RichEdInputer.DoubleBuffered := True;
  2469. TTalkFormController.GetController.ChangeStyle(Self);
  2470. for iLoop := 0 to RichEdInputer.ControlCount - 1 do
  2471. begin
  2472. if RichEdInputer.Controls[iLoop] is TWinControl then
  2473. TWinControl(RichEdInputer.Controls[iLoop]).DoubleBuffered := True;
  2474. end;
  2475. RichEdInputer.Parent.DoubleBuffered := True;
  2476. //pnlSendButtonBack.DoubleBuffered := True;
  2477. FLastSendMsgTicket := 0;
  2478. FVCardFrom := TVCardForm.Create(Self);
  2479. FReceiver := '';
  2480. FTeamID := '';
  2481. Left := MainForm.TalkingFormLeft;
  2482. Top := MainForm.TalkingFormTop;
  2483. Width := MainForm.TalkingFormWidth - pnlRC.Width - SplitterRC.Width;
  2484. Height := MainForm.TalkingFormHeight;
  2485. if Left < 0 then
  2486. Left := 0;
  2487. if Left + Width > Screen.WorkAreaWidth then
  2488. Left := Screen.WorkAreaWidth - Width;
  2489. if Top < 0 then
  2490. Top := 0;
  2491. if Top + Height > Screen.WorkAreaHeight then
  2492. Top := Screen.WorkAreaHeight - Height;
  2493. FLastSendInputtingMessageTicket := 0;
  2494. FormStyle := fsNormal;
  2495. actCtrlEnter.Checked := MainForm.CtrlEnterSendMessage;
  2496. actEnter.Checked := not MainForm.CtrlEnterSendMessage;
  2497. actCopyScreenHideForm.Checked := MainForm.CopyScreenHideTalkForm;
  2498. FAudioMission := nil;
  2499. FTransmiteFileMissions := TList.Create;
  2500. FUpDownFileMissions := TList.Create;
  2501. FNodeTransferMissions := TList.Create;
  2502. FFileTransmitters := TStringList.Create;
  2503. RichEdInputer.MaxLength := MaxMessageLength;
  2504. RichEdInputer.DoubleBuffered := False;
  2505. RichEdInputer.Color := 16645629;
  2506. RichEdInputer.Font := MainForm.InputFont;
  2507. FSender := '';
  2508. FReceiver := '';
  2509. SkinName := AnsiReplaceText(MainForm.SkinName, 'MainForm', '');
  2510. FWindowColor := MainForm.UIMainColor;
  2511. //ChangeUIColor(FWindowColor);
  2512. FOldWidthOfUserInfo := pnlUserInformation.Width;
  2513. FMinWidthOfYourPanel := 114;
  2514. FMinWidthOfMyPanel := 114;
  2515. FLastSendShakeWindowTicket := 0;
  2516. ShowSpbShowHideUserInformationState;
  2517. LoadOfflinefilesConfig;
  2518. //Exit;
  2519. WebBrowser.OnBeforeNavigate2 := nil;
  2520. WebBrowser.Navigate(ExtractFilePath(paramstr(0)) + 'html\chat.html');
  2521. FBaseURL := ExtractFilePath(paramstr(0)) + 'html\';
  2522. FBaseURL := UpperCase(FBaseURL);
  2523. WebBrowser.OnBeforeNavigate2 := WebBrowserBeforeNavigate2;
  2524. DragAcceptFiles(Handle, True);
  2525. DragAcceptFiles(RichEdInputer.Handle, True);
  2526. DragAcceptFiles(WebBrowser.Handle, True);
  2527. DragAcceptFiles(RichEditTemp.Handle, True);
  2528. end;
  2529. //------------------------------------------------------------------------------
  2530. procedure TTalkingForm.FormDestroy(Sender: TObject);
  2531. begin
  2532. try
  2533. try
  2534. if FVCardFrom <> nil then
  2535. FreeAndNil(FVCardFrom);
  2536. if WindowState <> wsMaximized then
  2537. begin
  2538. MainForm.TalkingFormLeft := Left;
  2539. MainForm.TalkingFormTop := Top;
  2540. MainForm.TalkingFormWidth := Width;
  2541. MainForm.TalkingFormHeight := Height;
  2542. MainForm.SaveDefaultConfigs;
  2543. end;
  2544. CloseAllMissions;
  2545. while (ImagesList.Count > 0) do
  2546. begin
  2547. dispose(ImagesList.First);
  2548. ImagesList.Delete(0);
  2549. end;
  2550. ImagesList.Free;
  2551. finally
  2552. TalkingForms.Remove(Self);
  2553. FreeAndNil(FTransmiteFileMissions);
  2554. FreeAndNil(FUpDownFileMissions);
  2555. FreeAndNil(FNodeTransferMissions);
  2556. FreeAndNil(FFileTransmitters);
  2557. end;
  2558. FLVTeamMembers.Items.Clear;
  2559. //if FLVTeamMembers <> nil then FreeAndNil(FLVTeamMembers);
  2560. except
  2561. end;
  2562. end;
  2563. procedure TTalkingForm.FormResize(Sender: TObject);
  2564. begin
  2565. ImgHideShowUserInformation.Top := (PnlShowHideUserInfo.Height - ImgHideShowUserInformation.Height) div 2 - 20;
  2566. end;
  2567. //------------------------------------------------------------------------------
  2568. procedure TTalkingForm.FormShow(Sender: TObject);
  2569. var
  2570. iWaitTimes: Integer;
  2571. begin
  2572. if TConditionConfig.GetConfig.GradeSystem and (FCategory = tcNormal) then
  2573. begin
  2574. btCloseTalk.Caption := '邀请评分';
  2575. btCloseTalk.Width := 96;
  2576. btCloseTalk.Left := 233;
  2577. end;
  2578. pnlRC.Visible := False;
  2579. SplitterRC.Visible := False;
  2580. pnlTalkingArea.Align := alLeft;
  2581. pnlTalkingArea.Align := alClient;
  2582. Left := MainForm.TalkingFormLeft;
  2583. Top := MainForm.TalkingFormTop;
  2584. Width := MainForm.TalkingFormWidth;
  2585. Height := MainForm.TalkingFormHeight;
  2586. if Left < 0 then
  2587. Left := 0;
  2588. if Left + Width > Screen.WorkAreaWidth then
  2589. Left := Screen.WorkAreaWidth - Width;
  2590. if Top < 0 then
  2591. Top := 0;
  2592. if Top + Height > Screen.WorkAreaHeight then
  2593. Top := Screen.WorkAreaHeight - Height;
  2594. Application.ProcessMessages;
  2595. iWaitTimes := 0;
  2596. while not CanWriteMessage do
  2597. begin
  2598. Application.ProcessMessages;
  2599. Inc(iWaitTimes);
  2600. if iWaitTimes > 1000 then
  2601. break;
  2602. Sleep(10);
  2603. end;
  2604. try
  2605. LoadNotReadMessages;
  2606. except
  2607. end;
  2608. LoadAdvertisement;
  2609. FreeAndNil(UserCardForm);
  2610. end;
  2611. //------------------------------------------------------------------------------
  2612. procedure TTalkingForm.lblDestClick(Sender: TObject);
  2613. begin
  2614. if FCategory = tcNormal then
  2615. miSeeYourDetailInformationClick(nil)
  2616. else
  2617. miSeeTeamDetailInformationClick(nil);
  2618. end;
  2619. //------------------------------------------------------------------------------
  2620. procedure TTalkingForm.lblDestMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  2621. begin
  2622. lblDest.Left := lblDest.Left + 1;
  2623. lblDest.Top := lblDest.Top + 1;
  2624. end;
  2625. //------------------------------------------------------------------------------
  2626. procedure TTalkingForm.lblDestMouseEnter(Sender: TObject);
  2627. begin
  2628. lblDest.Cursor := crHandPoint;
  2629. lblDest.Font.Style := [fsUnderline]
  2630. end;
  2631. //------------------------------------------------------------------------------
  2632. procedure TTalkingForm.lblDestMouseLeave(Sender: TObject);
  2633. begin
  2634. lblDest.Cursor := crDefault;
  2635. lblDest.Font.Style := []
  2636. end;
  2637. //------------------------------------------------------------------------------
  2638. procedure TTalkingForm.lblDestMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  2639. begin
  2640. lblDest.Left := lblDest.Left - 1;
  2641. lblDest.Top := lblDest.Top - 1;
  2642. end;
  2643. //------------------------------------------------------------------------------
  2644. procedure TTalkingForm.ChangePopupActionBarColor(PopupActionBar: TPopupActionBar);
  2645. begin
  2646. PopupActionBar.PopupMenu.ColorMap.Color := FormColor;
  2647. PopupActionBar.PopupMenu.ColorMap.SelectedColor := ConvertColorToColor(PopupActionBar.PopupMenu.ColorMap.SelectedColor, FWindowColor);
  2648. PopupActionBar.PopupMenu.ColorMap.BtnFrameColor := ConvertColorToColor(PopupActionBar.PopupMenu.ColorMap.BtnFrameColor, FWindowColor);
  2649. PopupActionBar.PopupMenu.Font.Name := '宋体';
  2650. PopupActionBar.PopupMenu.Font.Size := 9;
  2651. end;
  2652. //------------------------------------------------------------------------------
  2653. procedure TTalkingForm.ppAudioSetGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  2654. begin
  2655. ChangePopupActionBarColor(ppAudioSet);
  2656. end;
  2657. //------------------------------------------------------------------------------
  2658. procedure TTalkingForm.ppColorsGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  2659. begin
  2660. ChangePopupActionBarColor(ppColors);
  2661. end;
  2662. //------------------------------------------------------------------------------
  2663. procedure TTalkingForm.ppColorsPopup(Sender: TObject);
  2664. var
  2665. iLoop: Integer;
  2666. ColorStr: string;
  2667. MenuItem: TMenuItem;
  2668. Bitmap: TBitmap;
  2669. begin
  2670. MainForm.ImgLstColors.Clear;
  2671. while ppColors.Items.Count > 2 do
  2672. ppColors.Items.Delete(0);
  2673. Bitmap := TBitmap.Create;
  2674. Bitmap.SetSize(16, 16);
  2675. try
  2676. for iLoop := MainForm.ColorDialog.CustomColors.Count - 1 downto 0 do
  2677. begin
  2678. ColorStr := Copy(MainForm.ColorDialog.CustomColors[iLoop], 8, 6);
  2679. if ColorStr = 'FFFFFF' then
  2680. continue;
  2681. ColorStr := '$00' + ColorStr;
  2682. Bitmap.Canvas.Pen.Color := clGray;
  2683. Bitmap.Canvas.Pen.Style := psSolid;
  2684. Bitmap.Canvas.Brush.Color := StrToInt(ColorStr);
  2685. Bitmap.Canvas.Brush.Style := bsSolid;
  2686. Bitmap.Canvas.Rectangle(0, 0, Width, Height);
  2687. MainForm.ImgLstColors.Add(Bitmap, nil);
  2688. MenuItem := TMenuItem.Create(ppColors);
  2689. MenuItem.Caption := '颜色' + IntToStr(iLoop);
  2690. MenuItem.Tag := StrToInt(ColorStr);
  2691. MenuItem.ImageIndex := MainForm.ImgLstColors.Count - 1;
  2692. MenuItem.OnClick := miColorClick;
  2693. MenuItem.Enabled := MenuItem.Tag <> FWindowColor;
  2694. MenuItem.Checked := MenuItem.Tag = FWindowColor;
  2695. if MenuItem.Checked then
  2696. MenuItem.ImageIndex := -1;
  2697. ppColors.Items.Insert(0, MenuItem);
  2698. end;
  2699. finally
  2700. Bitmap.Free;
  2701. end;
  2702. end;
  2703. //------------------------------------------------------------------------------
  2704. procedure TTalkingForm.ppForDownGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  2705. begin
  2706. ChangePopupActionBarColor(ppForDown);
  2707. end;
  2708. procedure TTalkingForm.ppForInputerGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  2709. begin
  2710. ChangePopupActionBarColor(ppForInputer);
  2711. end;
  2712. procedure TTalkingForm.ppForInputerImgGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  2713. begin
  2714. ChangePopupActionBarColor(ppForInputerImg);
  2715. end;
  2716. procedure TTalkingForm.ppForInputerImgPopup(Sender: TObject);
  2717. begin
  2718. ppForInputerImg.Tag := 1;
  2719. end;
  2720. procedure TTalkingForm.ppForMsgGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  2721. begin
  2722. ChangePopupActionBarColor(ppForMsg);
  2723. end;
  2724. procedure TTalkingForm.ppForSnapGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  2725. begin
  2726. ChangePopupActionBarColor(ppForSnap);
  2727. end;
  2728. procedure TTalkingForm.ppForTeamMenuGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  2729. begin
  2730. ChangePopupActionBarColor(ppForTeamMenu);
  2731. end;
  2732. procedure TTalkingForm.ppForTeamMenuPopup(Sender: TObject);
  2733. begin
  2734. ppForTeamMenu.Items[1].Enabled := HasMobilePhone(ALoginName);
  2735. end;
  2736. //------------------------------------------------------------------------------
  2737. procedure TTalkingForm.ppForWebBrowserGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  2738. begin
  2739. ChangePopupActionBarColor(ppForWebBrowser);
  2740. if WebBrowser.OleObject.Document.queryCommandEnabled('Copy') then
  2741. miCopyFromIE.Enabled := True
  2742. else
  2743. miCopyFromIE.Enabled := False;
  2744. miSaveToWeb.Enabled := miCopyFromIE.Enabled;
  2745. if not miCopyFromIE.Enabled then
  2746. miCopyFromIE.Enabled := actSaveImgAs.Enabled;
  2747. end;
  2748. procedure TTalkingForm.ppForWebBrowserPopup(Sender: TObject);
  2749. begin
  2750. ppForInputerImg.Tag := 0;
  2751. end;
  2752. //------------------------------------------------------------------------------
  2753. procedure TTalkingForm.ppMyOptionsGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  2754. begin
  2755. ChangePopupActionBarColor(ppMyOptions);
  2756. end;
  2757. //------------------------------------------------------------------------------
  2758. procedure TTalkingForm.ppUserItemRightMenuGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  2759. begin
  2760. ChangePopupActionBarColor(ppUserItemRightMenu);
  2761. end;
  2762. //------------------------------------------------------------------------------
  2763. procedure TTalkingForm.ppUserItemRightMenuPopup(Sender: TObject);
  2764. var
  2765. iLoop: Integer;
  2766. ListItem: TRealICQContacterListItem;
  2767. begin
  2768. miSendMessage.Visible := FLVTeamMembers.SelCount = 1;
  2769. miSeeUserInformation.Visible := FLVTeamMembers.SelCount = 1;
  2770. for iLoop := 0 to FLVTeamMembers.Items.Count - 1 do
  2771. begin
  2772. ListItem := FLVTeamMembers.Items.Objects[iLoop] as TRealICQContacterListItem;
  2773. if ListItem.Selected then
  2774. begin
  2775. ALoginName := ListItem.LoginName;
  2776. ppUserItemRightMenu.Items[1].Enabled := HasMobilePhone(ALoginName);
  2777. Break;
  2778. end;
  2779. end;
  2780. if TTeamsAdapter.IsTeamManager(FTeamID, MainForm.RealICQClient.LoginName) then
  2781. begin
  2782. ppUserItemRightMenu.Items[4].Enabled := True;
  2783. end
  2784. else
  2785. ppUserItemRightMenu.Items[4].Enabled := False;
  2786. if MainForm.RealICQClient.LoginName = ALoginName then
  2787. ppUserItemRightMenu.Items[4].Enabled := True;
  2788. end;
  2789. //------------------------------------------------------------------------------
  2790. procedure TTalkingForm.ppYourOptionsGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  2791. begin
  2792. ChangePopupActionBarColor(ppYourOptions);
  2793. end;
  2794. procedure TTalkingForm.ppForSetGetControlClass(Sender: TCustomActionBar; AnItem: TActionClient; var ControlClass: TCustomActionControlClass);
  2795. begin
  2796. ChangePopupActionBarColor(ppForSet);
  2797. end;
  2798. //------------------------------------------------------------------------------
  2799. function TTalkingForm.GetInputerLength: Integer;
  2800. var
  2801. Face: TFace;
  2802. iLoop, InputerLength: Integer;
  2803. FaceInRichEdit: TFaceInRichEdit;
  2804. FaceIndexes: TIndexes;
  2805. begin
  2806. InputerLength := Length(Trim(RichEdInputer.Text));
  2807. FaceIndexes := RichEdInputer.GetFaceIndexes;
  2808. for iLoop := 0 to Length(FaceIndexes) - 1 do
  2809. begin
  2810. FaceInRichEdit := FaceIndexes[iLoop];
  2811. if FaceInRichEdit.FaceIndex >= BaseTempFaceIndex then
  2812. Face := MainForm.TempFaceList.Objects[FaceInRichEdit.FaceIndex - BaseTempFaceIndex] as TFace
  2813. else
  2814. Face := MainForm.FaceList.Objects[FaceInRichEdit.FaceIndex] as TFace;
  2815. if FaceInRichEdit.FaceIndex < MainForm.SystemFaceCount then
  2816. Inc(InputerLength, Length(Face.ShortCut))
  2817. else
  2818. Inc(InputerLength, 38);
  2819. end;
  2820. Result := InputerLength;
  2821. end;
  2822. //------------------------------------------------------------------------------
  2823. procedure TTalkingForm.CreateTeamResult(Sender: TObject; ATeamCaption: string; ACreated: Boolean; ATeamID: string; AFailingCause: string);
  2824. begin
  2825. if ACreated then
  2826. begin
  2827. tsYourCardShow(nil);
  2828. FCategory := tcTeam;
  2829. TeamID := ATeamID;
  2830. end;
  2831. end;
  2832. procedure TTalkingForm.actSaveImgAsExecute(Sender: TObject);
  2833. var
  2834. Face: TFace;
  2835. begin
  2836. if ppForInputerImg.Tag = 1 then
  2837. begin
  2838. if FRightMouseClickedFace.FaceIndex >= BaseTempFaceIndex then
  2839. Face := MainForm.TempFaceList.Objects[FRightMouseClickedFace.FaceIndex - BaseTempFaceIndex] as TFace
  2840. else
  2841. Face := MainForm.FaceList.Objects[FRightMouseClickedFace.FaceIndex] as TFace;
  2842. SaveDialog.FileName := AnsiReplaceText(Face.FileName, ExtractFilePath(Face.FileName), '');
  2843. if SaveDialog.Execute then
  2844. begin
  2845. CopyFile(PChar(Face.FileName), PChar(SaveDialog.FileName), False);
  2846. end;
  2847. end
  2848. else
  2849. begin
  2850. SaveDialog.FileName := AnsiReplaceText(FFaceMenuAtFileName, ExtractFilePath(FFaceMenuAtFileName), '');
  2851. if SaveDialog.Execute then
  2852. begin
  2853. CopyFile(PChar(FFaceMenuAtFileName), PChar(SaveDialog.FileName), False);
  2854. end;
  2855. end;
  2856. end;
  2857. procedure TTalkingForm.actAddImageToCustomFacesExecute(Sender: TObject);
  2858. var
  2859. Face: TFace;
  2860. begin
  2861. if ppForInputerImg.Tag = 1 then
  2862. begin
  2863. if FRightMouseClickedFace.FaceIndex >= BaseTempFaceIndex then
  2864. begin
  2865. Face := MainForm.TempFaceList.Objects[FRightMouseClickedFace.FaceIndex - BaseTempFaceIndex] as TFace;
  2866. end
  2867. else
  2868. begin
  2869. MessageBox(Handle, '图片已在表情库中! ', '提示', MB_OK);
  2870. Exit;
  2871. end;
  2872. if AddFaceForm <> nil then
  2873. Exit;
  2874. AddFaceForm := TAddFaceForm.Create(Self);
  2875. with AddFaceForm do
  2876. try
  2877. OpenPictureDialog.FileName := Face.FileName;
  2878. edFileNames.Text := Face.FileName;
  2879. SelectedFileCount := 1;
  2880. edName.Text := ReplaceStr(ExtractFileName(edFileNames.Text), ExtractFileExt(edFileNames.Text), '');
  2881. edShortCut.Text := Copy(edName.Text, 1, 8);
  2882. btBrowse.Enabled := False;
  2883. if ShowModal = mrOK then
  2884. begin
  2885. Face := AddFaceForm.AddedFaces[0] as TFace;
  2886. if Face = nil then
  2887. Exit;
  2888. if MainForm.FaceCategory.IndexOf(Face.Category) < 0 then
  2889. begin
  2890. if not AnsiSameText(Face.Category, NOFaceCategory) then
  2891. begin
  2892. MainForm.FaceCategory.Add(Face.Category);
  2893. end
  2894. else
  2895. begin
  2896. MainForm.FaceCategory.Insert(0, Face.Category);
  2897. end;
  2898. end;
  2899. MainForm.SaveCustomFaceConfig;
  2900. MessageBox(Handle, '表情添加成功! ', '提示', MB_ICONINFORMATION);
  2901. end;
  2902. finally
  2903. FreeAndNil(AddFaceForm);
  2904. end;
  2905. end
  2906. else
  2907. begin
  2908. if AddFaceForm <> nil then
  2909. Exit;
  2910. AddFaceForm := TAddFaceForm.Create(Self);
  2911. with AddFaceForm do
  2912. try
  2913. OpenPictureDialog.FileName := FFaceMenuAtFileName;
  2914. edFileNames.Text := FFaceMenuAtFileName;
  2915. SelectedFileCount := 1;
  2916. edName.Text := ReplaceStr(ExtractFileName(edFileNames.Text), ExtractFileExt(edFileNames.Text), '');
  2917. edShortCut.Text := Copy(edName.Text, 1, 8);
  2918. btBrowse.Enabled := False;
  2919. if ShowModal = mrOK then
  2920. begin
  2921. Face := AddFaceForm.AddedFaces[0] as TFace;
  2922. if Face = nil then
  2923. Exit;
  2924. if MainForm.FaceCategory.IndexOf(Face.Category) < 0 then
  2925. begin
  2926. if not AnsiSameText(Face.Category, NOFaceCategory) then
  2927. begin
  2928. MainForm.FaceCategory.Add(Face.Category);
  2929. end
  2930. else
  2931. begin
  2932. MainForm.FaceCategory.Insert(0, Face.Category);
  2933. end;
  2934. end;
  2935. MainForm.SaveCustomFaceConfig;
  2936. MessageBox(Handle, '表情添加成功! ', '提示', MB_ICONINFORMATION);
  2937. end;
  2938. finally
  2939. FreeAndNil(AddFaceForm);
  2940. end;
  2941. end;
  2942. end;
  2943. procedure TTalkingForm.actAddUserExecute(Sender: TObject);
  2944. var
  2945. AddUserForm: TAddUserForm;
  2946. AddedUsers: TStringList;
  2947. iIndex, iLoop: Integer;
  2948. LoginName: string;
  2949. NotCompletedMission: Integer;
  2950. begin
  2951. if FCategory <> tcNormal then
  2952. begin
  2953. if not TTeamsAdapter.IsTeamManager(FTeamID, FRealICQClient.LoginName) then
  2954. begin
  2955. MessageBox(Handle, PChar('没有添加群组成员的权限!'), '提示', MB_ICONINFORMATION);
  2956. Exit;
  2957. end;
  2958. end;
  2959. NotCompletedMission := CheckNotCompletedMission;
  2960. if NotCompletedMission > 0 then
  2961. begin
  2962. MessageBox(Handle, PChar('当前还有 ' + IntToStr(NotCompletedMission) + ' 个未结束的任务! '), '提示', MB_ICONINFORMATION);
  2963. Exit;
  2964. end;
  2965. AddUserForm := TAddUserForm.Create(Self);
  2966. try
  2967. if AddUserForm.ShowModal = mrOk then
  2968. begin
  2969. AddedUsers := AddUserForm.AddedUsers;
  2970. try
  2971. if AddedUsers.Count = 0 then
  2972. Exit;
  2973. if FCategory = tcNormal then
  2974. begin
  2975. AddedUsers.Insert(0, FRealICQClient.LoginName);
  2976. if AddedUsers.IndexOf(FReceiver) = -1 then
  2977. AddedUsers.Insert(1, FReceiver);
  2978. if AddedUsers.Count > MaxTeamMemberCount then
  2979. begin
  2980. MessageBox(Handle, PChar('该群组成员人数不能超过 ' + IntToStr(MaxTeamMemberCount) + ' 人! '), '提示', MB_ICONINFORMATION);
  2981. Exit;
  2982. end;
  2983. FRealICQClient.OnCreateTeamResult := CreateTeamResult;
  2984. FRealICQClient.CreateTeam('多人对话', '', '', AddedUsers, True, tvAllCanJoinTeam);
  2985. end
  2986. else
  2987. begin
  2988. for iLoop := FLVTeamMembers.Items.Count - 1 downto 0 do
  2989. begin
  2990. LoginName := FLVTeamMembers.Items[iLoop];
  2991. if AddedUsers.IndexOf(LoginName) = -1 then
  2992. AddedUsers.Insert(0, LoginName);
  2993. end;
  2994. if AddedUsers.Count > MaxTeamMemberCount then
  2995. begin
  2996. MessageBox(Handle, PChar('该群组成员人数不能超过 ' + IntToStr(MaxTeamMemberCount) + ' 人! '), '提示', MB_ICONINFORMATION);
  2997. Exit;
  2998. end;
  2999. TTeamsAdapter.AddTeamMembers(FTeamID, AddedUsers);
  3000. end;
  3001. finally
  3002. FreeAndNil(AddedUsers);
  3003. end;
  3004. end;
  3005. finally
  3006. FreeAndNil(AddUserForm);
  3007. end;
  3008. end;
  3009. //------------------------------------------------------------------------------
  3010. procedure TTalkingForm.actEmptyWebExecute(Sender: TObject);
  3011. begin
  3012. ClearHTML(self.WebBrowser);
  3013. end;
  3014. //------------------------------------------------------------------------------
  3015. procedure TTalkingForm.actAlwayOnTopExecute(Sender: TObject);
  3016. var
  3017. iLoop: Integer;
  3018. AForm: TTalkingForm;
  3019. begin
  3020. // actAlwayOnTop.Checked := not actAlwayOnTop.Checked;
  3021. // MainForm.TalkingFormAlwaysOnTop := actAlwayOnTop.Checked;
  3022. //
  3023. // for iLoop := TalkingForms.Count - 1 downto 0 do
  3024. // begin
  3025. // AForm := TalkingForms[iLoop];
  3026. // AForm.actAlwayOnTop.Checked := actAlwayOnTop.Checked;
  3027. // if actAlwayOnTop.Checked then
  3028. // AForm.FormStyle := fsStayOnTop
  3029. // else
  3030. // AForm.FormStyle := fsStayOnTop;
  3031. // end;
  3032. end;
  3033. //------------------------------------------------------------------------------
  3034. procedure TTalkingForm.actAudioExecute(Sender: TObject);
  3035. begin
  3036. if FAudioMission <> nil then
  3037. begin
  3038. MessageBox(Handle, '请先结束已连接的语音对话任务! ', '提示', MB_ICONINFORMATION);
  3039. Exit;
  3040. end;
  3041. FRealICQClient.CreateAudioTransmitter(Receiver);
  3042. end;
  3043. //------------------------------------------------------------------------------
  3044. procedure TTalkingForm.actVideoExecute(Sender: TObject);
  3045. begin
  3046. if FVideoMission <> nil then
  3047. begin
  3048. MessageBox(Handle, '请先结束已连接的视频对话任务! ', '提示', MB_ICONINFORMATION);
  3049. Exit;
  3050. end;
  3051. FRealICQClient.CreateVideoTransmitter(Receiver);
  3052. end;
  3053. procedure TTalkingForm.actCloseExecute(Sender: TObject);
  3054. begin
  3055. Close;
  3056. end;
  3057. procedure TTalkingForm.actCopyScreenHideFormExecute(Sender: TObject);
  3058. begin
  3059. actCopyScreenHideForm.Checked := not actCopyScreenHideForm.Checked;
  3060. MainForm.CopyScreenHideTalkForm := actCopyScreenHideForm.Checked;
  3061. end;
  3062. //------------------------------------------------------------------------------
  3063. procedure TTalkingForm.actCtrlEnterExecute(Sender: TObject);
  3064. begin
  3065. actCtrlEnter.Checked := True;
  3066. MainForm.CtrlEnterSendMessage := True;
  3067. end;
  3068. //------------------------------------------------------------------------------
  3069. procedure TTalkingForm.actEnterExecute(Sender: TObject);
  3070. begin
  3071. actEnter.Checked := True;
  3072. MainForm.CtrlEnterSendMessage := False;
  3073. end;
  3074. //------------------------------------------------------------------------------
  3075. procedure TTalkingForm.actPageSetExecute(Sender: TObject);
  3076. begin
  3077. WebBrowser.ExecWB(OLECMDID_PAGESETUP, OLECMDEXECOPT_DODEFAULT, EmptyParam, EmptyParam);
  3078. end;
  3079. //------------------------------------------------------------------------------
  3080. procedure TTalkingForm.actPreviewExecute(Sender: TObject);
  3081. begin
  3082. if WebBrowser.QueryStatusWB(OLECMDID_PRINTPREVIEW) = 3 then
  3083. WebBrowser.ExecWB(OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT, EmptyParam, EmptyParam);
  3084. end;
  3085. //------------------------------------------------------------------------------
  3086. procedure TTalkingForm.actPrintExecute(Sender: TObject);
  3087. begin
  3088. WebBrowser.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT, EmptyParam, EmptyParam);
  3089. end;
  3090. //------------------------------------------------------------------------------
  3091. procedure TTalkingForm.actQuitTeamExecute(Sender: TObject);
  3092. begin
  3093. if MessageBox(Handle, PChar('确定要退出“' + Caption + '”吗? '), '提示', MB_ICONQUESTION or MB_OKCANCEL) = ID_OK then
  3094. begin
  3095. TTeamsAdapter.QuitTeam(FTeamID);
  3096. FCategory := tcNormal;
  3097. Close;
  3098. end;
  3099. end;
  3100. //------------------------------------------------------------------------------
  3101. procedure TTalkingForm.actDisbandTeamExecute(Sender: TObject);
  3102. begin
  3103. if MessageBox(Handle, PChar('确定要解散“' + Caption + '”吗? '), '提示', MB_ICONQUESTION or MB_OKCANCEL) = ID_OK then
  3104. begin
  3105. TTeamsAdapter.DisbandTeam(FTeamID);
  3106. FCategory := tcNormal;
  3107. Close;
  3108. end;
  3109. end;
  3110. //------------------------------------------------------------------------------
  3111. procedure TTalkingForm.actSaveAsHTMLFileExecute(Sender: TObject);
  3112. var
  3113. StringList: TStringList;
  3114. begin
  3115. SaveDialog.FileName := Caption + '_' + FormatDateTime('yyyy-mm-dd', Now()) + '.Html';
  3116. if SaveDialog.Execute then
  3117. begin
  3118. StringList := TStringList.Create;
  3119. try
  3120. StringList.Add(IHtmlDocument2(WebBrowser.Document).Body.innerHTML);
  3121. StringList.SaveToFile(SaveDialog.FileName);
  3122. finally
  3123. StringList.Free;
  3124. end;
  3125. end;
  3126. end;
  3127. //------------------------------------------------------------------------------
  3128. procedure TTalkingForm.actSaveAsTextFileExecute(Sender: TObject);
  3129. var
  3130. StringList: TStringList;
  3131. begin
  3132. SaveDialog.FileName := Caption + '_' + FormatDateTime('yyyy-mm-dd', Now()) + '.txt';
  3133. if SaveDialog.Execute then
  3134. begin
  3135. StringList := TStringList.Create;
  3136. try
  3137. StringList.Add(IHtmlDocument2(WebBrowser.Document).Body.OuterText);
  3138. StringList.SaveToFile(SaveDialog.FileName);
  3139. finally
  3140. StringList.Free;
  3141. end;
  3142. end;
  3143. end;
  3144. //------------------------------------------------------------------------------
  3145. procedure TTalkingForm.actSeeTeamOptionsExecute(Sender: TObject);
  3146. begin
  3147. miSeeTeamDetailInformation.Click;
  3148. end;
  3149. //------------------------------------------------------------------------------
  3150. procedure TTalkingForm.actSendFileExecute(Sender: TObject);
  3151. begin
  3152. if not FRealICQClient.Connected or not FRealICQClient.Logined then
  3153. Exit;
  3154. OpenDialog.Title := '传输在线文件';
  3155. if OpenDialog.Execute then
  3156. begin
  3157. SendFile(OpenDialog.FileName);
  3158. end;
  3159. end;
  3160. //----发送文件-----------------------------------------------------------------
  3161. procedure TTalkingForm.SendFile(FileName: string);
  3162. //var
  3163. // AFileStream: TFileStream;
  3164. begin
  3165. try
  3166. {try
  3167. AFileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
  3168. if AFileStream.Size>=Int64(1024*1024*1024)*2 then
  3169. begin
  3170. MessageBox(0, PChar('在线发送文件大小不允许超过2G !'), '发送文件时出错', MB_ICONINFORMATION);
  3171. PostMessage(Handle, WM_SETFOCUS, 0, 0);
  3172. Exit;
  3173. end;
  3174. finally
  3175. FreeAndNil(AFileStream);
  3176. end;}
  3177. FRealICQClient.SendFile(MainForm.UseCacheDir, MainForm.CacheDir, Receiver, FileName, foFile);
  3178. except
  3179. on E: Exception do
  3180. MessageBox(0, PChar(E.Message), '传输文件时出错', MB_ICONINFORMATION);
  3181. end;
  3182. end;
  3183. //------------------------------------------------------------------------------
  3184. procedure TTalkingForm.actShowHistoryExecute(Sender: TObject);
  3185. begin
  3186. MainForm.OpenMessagesManagerForm;
  3187. Application.ProcessMessages;
  3188. if FCategory = tcNormal then
  3189. MessagesManagerForm.ShowUsersMessages(FReceiver)
  3190. else
  3191. MessagesManagerForm.ShowTeamsMessages(FTeamID);
  3192. end;
  3193. //------------------------------------------------------------------------------
  3194. procedure TTalkingForm.actStopVideoExecute(Sender: TObject);
  3195. begin
  3196. if FVideoMission <> nil then
  3197. FVideoMission.Stop;
  3198. end;
  3199. //------------------------------------------------------------------------------
  3200. procedure TTalkingForm.ApplicationEventsException(Sender: TObject; E: Exception);
  3201. begin
  3202. //
  3203. end;
  3204. //------------------------------------------------------------------------------
  3205. procedure TTalkingForm.spbSendImageClick(Sender: TObject);
  3206. var
  3207. AFileName: string;
  3208. begin
  3209. try
  3210. if OpenPictureDialog.Execute then
  3211. begin
  3212. AFileName := OpenPictureDialog.FileName;
  3213. AddImageToInput(AFileName, RichEdInputer);
  3214. end;
  3215. except
  3216. on E: Exception do
  3217. MessageBox(Handle, PChar('发送图片出错:' + E.Message), PChar('错误'), MB_ICONERROR);
  3218. end;
  3219. end;
  3220. procedure TTalkingForm.spbSendSMSClick(Sender: TObject);
  3221. begin
  3222. if (not MainForm.RealICQClient.UserPermission.EnableMultiSendSms) or (not MainForm.RealICQClient.UserPermission.EnableSendSms) then
  3223. begin
  3224. Dialogs.ShowMessage('您没有群发手机短信的权限! ');
  3225. Exit;
  3226. end;
  3227. OpenTeamSMSForm(self.TeamID);
  3228. end;
  3229. //------------------------------------------------------------------------------
  3230. procedure TTalkingForm.ApplicationEventsMessage(var Msg: tagMSG; var Handled: Boolean);
  3231. var
  3232. vaIn, vaOut: Olevariant;
  3233. begin
  3234. if IsChild(Webbrowser.Handle, Msg.hwnd) or (IsChild(Self.WebBrowserForTeamDisk.Handle, Msg.hwnd)) then
  3235. begin
  3236. if (Msg.Message = WM_KEYDOWN) or (Msg.Message = WM_SYSKEYDOWN) then
  3237. begin
  3238. if msg.wParam = VK_F5 then
  3239. begin
  3240. Handled := True;
  3241. end;
  3242. end;
  3243. if (msg.wParam = ord('N')) and (GetKeyState(VK_CONTROL) < 0) then
  3244. begin
  3245. Handled := True;
  3246. end;
  3247. if (msg.wParam = ord('C')) and (GetKeyState(VK_CONTROL) < 0) then
  3248. begin
  3249. InvokeCmd(FALSE, OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT, vaIn, vaOut);
  3250. Handled := True;
  3251. end;
  3252. end;
  3253. if RichEdInputer.Handle = Msg.hwnd then
  3254. begin
  3255. if (Msg.Message = WM_KEYDOWN) or (Msg.Message = WM_SYSKEYDOWN) then
  3256. begin
  3257. if (msg.wParam = 13) then
  3258. begin
  3259. if (not MainForm.CtrlEnterSendMessage) and (GetKeyState(VK_CONTROL) < 0) then
  3260. Exit;
  3261. if (MainForm.CtrlEnterSendMessage) and (GetKeyState(VK_CONTROL) >= 0) then
  3262. Exit;
  3263. btSendClick(nil);
  3264. Handled := True;
  3265. end;
  3266. //Ctrl + V
  3267. if (msg.wParam = 86) and (GetKeyState(VK_CONTROL) < 0) then
  3268. begin
  3269. LockWindowUpdate(GetDesktopWindow);
  3270. try
  3271. if not PasteImage then
  3272. RichEdInputer.PasteFromClipboard;
  3273. CheckPastedContent;
  3274. finally
  3275. LockWindowUpdate(0);
  3276. end;
  3277. Handled := True;
  3278. end;
  3279. end;
  3280. end;
  3281. end;
  3282. procedure TTalkingForm.EditPasteExecute(Sender: TObject);
  3283. //var handle:HWND;
  3284. begin
  3285. // handle:=GetFocus;
  3286. // SendMessage(handle, WM_SetText, 255, Integer(Pchar(Clipboard.AsText)));
  3287. // if (RichEdInputer.Handle<>handle) then Exit;
  3288. LockWindowUpdate(GetDesktopWindow);
  3289. try
  3290. try
  3291. if not PasteImage then
  3292. RichEdInputer.PasteFromClipboard;
  3293. except
  3294. RichEdInputer.PasteFromClipboard;
  3295. end;
  3296. CheckPastedContent;
  3297. finally
  3298. LockWindowUpdate(0);
  3299. end;
  3300. end;
  3301. procedure TTalkingForm.EditPasteUpdate(Sender: TObject);
  3302. var
  3303. CF_HTML: DWORD;
  3304. begin
  3305. CF_HTML := RegisterClipboardFormat('HTML Format');
  3306. EditPaste.Enabled := Clipboard.HasFormat(CF_HTML) or Clipboard.HasFormat(CF_HDROP) or Clipboard.HasFormat(CF_METAFILEPICT) or Clipboard.HasFormat(CF_PICTURE) or (Length(Clipboard.AsText) > 0);
  3307. end;
  3308. //------------------------------------------------------------------------------
  3309. procedure TTalkingForm.CheckPastedContent(ADeleteOtherObj: Boolean = False);
  3310. var
  3311. AIndexes: TIndexes;
  3312. AFaceInRichEdit: TFaceInRichEdit;
  3313. AOldSelStart: Integer;
  3314. iLoop: Integer;
  3315. APastedToTemp: Boolean;
  3316. begin
  3317. RichEditTemp.Clear;
  3318. APastedToTemp := False;
  3319. AOldSelStart := RichEdInputer.SelStart;
  3320. AIndexes := RichEdInputer.GetFaceIndexes;
  3321. try
  3322. for iLoop := 0 to High(AIndexes) do
  3323. begin
  3324. AFaceInRichEdit := AIndexes[iLoop];
  3325. if AFaceInRichEdit.FaceIndex < 0 then
  3326. begin
  3327. if ADeleteOtherObj then
  3328. begin
  3329. RichEdInputer.SelStart := AFaceInRichEdit.FacePosition;
  3330. RichEdInputer.SelLength := 1;
  3331. RichEdInputer.SelText := '';
  3332. end
  3333. else
  3334. begin
  3335. if not APastedToTemp then
  3336. begin
  3337. RichEditTemp.PasteFromClipboard;
  3338. APastedToTemp := True;
  3339. end;
  3340. RichEdInputer.SelStart := AFaceInRichEdit.FacePosition;
  3341. RichEdInputer.SelLength := 1;
  3342. RichEdInputer.CutToClipboard;
  3343. PasteImage(False);
  3344. end;
  3345. end;
  3346. end;
  3347. finally
  3348. if not ADeleteOtherObj then
  3349. begin
  3350. RichEdInputer.SelStart := AOldSelStart;
  3351. RichEdInputer.SelLength := 0;
  3352. RichEdInputer.Font.Color := RichEdInputer.Font.Color - 1;
  3353. RichEdInputer.Font.Color := RichEdInputer.Font.Color + 1;
  3354. RichEdInputer.DisableAlign;
  3355. try
  3356. PostMessage(RichEdInputer.Handle, WM_SIZE, 0, 0);
  3357. finally
  3358. RichEdInputer.EnableAlign;
  3359. end;
  3360. if APastedToTemp then
  3361. begin
  3362. RichEditTemp.SelectAll;
  3363. RichEditTemp.SelLength := RichEditTemp.SelLength - 2;
  3364. RichEditTemp.CutToClipboard;
  3365. end;
  3366. end;
  3367. end;
  3368. end;
  3369. //------------------------------------------------------------------------------
  3370. function TTalkingForm.FindIECacheImage(ADir, AImageFile: string): string;
  3371. var
  3372. DSearchRec: TSearchRec;
  3373. FindResult: Integer;
  3374. AFileName: string;
  3375. AFileTime, AFileTimeTemp: TDateTime;
  3376. begin
  3377. AFileTime := 0.0;
  3378. Result := '';
  3379. FindResult := FindFirst(ADir + '\' + Format('%s[*]%s', [ReplaceText(AImageFile, ExtractFileExt(AImageFile), ''), ExtractFileExt(AImageFile)]), faAnyFile, DSearchRec);
  3380. while FindResult = 0 do
  3381. begin
  3382. if (DSearchRec.Name <> '.') and (DSearchRec.Name <> '..') then
  3383. begin
  3384. AFileName := ADir + '\' + ExtractFileName(DSearchRec.Name);
  3385. //找出最新的文件
  3386. AFileTimeTemp := RealICQUtils.GetFileTime(AFileName, 3);
  3387. if AFileTimeTemp > AFileTime then
  3388. begin
  3389. AFileTime := AFileTimeTemp;
  3390. Result := AFileName;
  3391. end;
  3392. end;
  3393. FindResult := FindNext(DSearchRec);
  3394. end;
  3395. if Result <> '' then
  3396. Exit;
  3397. FindResult := FindFirst(ADir + '\*.*', $00002016, DSearchRec);
  3398. while FindResult = 0 do
  3399. begin
  3400. if (DSearchRec.Name <> '.') and (DSearchRec.Name <> '..') then
  3401. begin
  3402. if DirectoryExists(ADir + '\' + ExtractFileName(DSearchRec.Name)) then
  3403. begin
  3404. Result := FindIECacheImage(ADir + '\' + ExtractFileName(DSearchRec.Name), AImageFile);
  3405. if Result <> '' then
  3406. Exit;
  3407. end;
  3408. end;
  3409. FindResult := FindNext(DSearchRec);
  3410. end;
  3411. end;
  3412. function TTalkingForm.CheckImageExists(AImageFile: string): string;
  3413. var
  3414. dwCacheEntryInfoBufferSize: DWORD;
  3415. lpCacheEntryInfo: PInternetCacheEntryInfoA;
  3416. ALocalFile, ALocalFileTemp: string;
  3417. ASplitString: TStringList;
  3418. iIndex: Integer;
  3419. begin
  3420. Result := '';
  3421. dwCacheEntryInfoBufferSize := 0;
  3422. lpCacheEntryInfo := nil;
  3423. GetUrlCacheEntryInfoEx(PAnsiChar(AImageFile), lpCacheEntryInfo, @dwCacheEntryInfoBufferSize, nil, nil, nil, 0);
  3424. GetMem(lpCacheEntryInfo, dwCacheEntryInfoBufferSize);
  3425. try
  3426. if GetUrlCacheEntryInfoEx(PAnsiChar(AImageFile), lpCacheEntryInfo, @dwCacheEntryInfoBufferSize, nil, nil, nil, 0) then
  3427. begin
  3428. Result := StrPas(lpCacheEntryInfo.lpszLocalFileName);
  3429. Exit;
  3430. end;
  3431. finally
  3432. FreeMem(lpCacheEntryInfo);
  3433. end;
  3434. ALocalFileTemp := ReplaceStr(AImageFile, '\', '/');
  3435. while Pos('/', ALocalFileTemp) > 0 do
  3436. begin
  3437. ALocalFileTemp := Copy(ALocalFileTemp, Pos('/', ALocalFileTemp) + 1, Length(ALocalFileTemp));
  3438. end;
  3439. ALocalFile := FindURLCache(PAnsiChar(GetIETempDir + '\Low\Content.IE5\index.dat'), PAnsiChar(AImageFile));
  3440. if Length(ALocalFile) > 0 then
  3441. begin
  3442. ASplitString := SplitString(ALocalFile, Chr(10));
  3443. AImageFile := GetIETempDir + '\Low\Content.IE5\' + ReplaceStr(ASplitString.Strings[0], '?', '') + '\';
  3444. iIndex := 2;
  3445. repeat
  3446. ALocalFile := AImageFile + LeftStr(ALocalFileTemp, 1) + Copy(ASplitString.Strings[iIndex], 3, Length(ASplitString.Strings[iIndex]) - 2);
  3447. Inc(iIndex);
  3448. until (FileExists(ALocalFile)) or (iIndex >= 4);
  3449. if FileExists(ALocalFile) then
  3450. begin
  3451. Result := ALocalFile;
  3452. end;
  3453. end;
  3454. {
  3455. ALocalFile := ReplaceStr(AImageFile, '\', '/');
  3456. while Pos('/', ALocalFile) > 0 do
  3457. begin
  3458. ALocalFile := Copy(ALocalFile, Pos('/', ALocalFile) + 1, Length(ALocalFile));
  3459. end;
  3460. Result := FindIECacheImage(GetIETempDir + '\Low\Content.IE5', ALocalFile); }
  3461. end;
  3462. //------------------------------------------------------------------------------
  3463. procedure TTalkingForm.RichEdInputerChange(Sender: TObject);
  3464. var
  3465. iLoop, iLength, InputerLength, iStart: Integer;
  3466. Face: TFace;
  3467. FRealICQUser: TRealICQUser;
  3468. begin
  3469. if Length(Trim(Receiver)) = 0 then
  3470. Exit;
  3471. iLength := Length(RichEdInputer.Text);
  3472. //发送“正在输入消息”字样
  3473. if FCategory = tcNormal then
  3474. begin
  3475. if (iLength = 0) or (GetTickCount - FLastSendInputtingMessageTicket > 5000) then
  3476. begin
  3477. if (FRealICQClient.Me <> nil) and (FRealICQClient.Me.LoginState <> stHidden) then
  3478. begin
  3479. FRealICQUser := TUsersService.GetUsersService.GetOrRequestUser(Receiver);
  3480. if Assigned(FRealICQUser) then
  3481. begin
  3482. ((FRealICQUser.RealICQPtoPBox as TRealICQPtoPBox) as TRealICQPtoPBox).SendInputting(iLength > 0);
  3483. FLastSendInputtingMessageTicket := GetTickCount;
  3484. end;
  3485. end;
  3486. end;
  3487. end;
  3488. if iLength = 0 then
  3489. Exit;
  3490. RichEdInputer.OnChange := nil;
  3491. try
  3492. for iLoop := 0 to MainForm.FaceList.Count - 1 do
  3493. begin
  3494. Face := MainForm.FaceList.Objects[iLoop] as TFace;
  3495. if Face.ShortCut = '' then
  3496. continue;
  3497. iStart := TRxRichEdit(Sender).FindText(Face.ShortCut, 0, iLength, []);
  3498. while iStart >= 0 do
  3499. begin
  3500. RichEdInputer.SelStart := iStart;
  3501. RichEdInputer.SelLength := Length(Face.ShortCut);
  3502. RichEdInputer.InsertImage(Face.FileName, iLoop);
  3503. RichEdInputer.SelStart := TRxRichEdit(Sender).SelStart;
  3504. RichEdInputer.SelLength := 0;
  3505. iStart := RichEdInputer.FindText(Face.ShortCut, RichEdInputer.SelStart, iLength, []);
  3506. end;
  3507. end;
  3508. finally
  3509. RichEdInputer.OnChange := RichEdInputerChange;
  3510. end;
  3511. RichEdInputer.MaxLength := Length(Trim(RichEdInputer.Text));
  3512. InputerLength := GetInputerLength;
  3513. if MaxMessageLength - InputerLength > 0 then
  3514. RichEdInputer.MaxLength := RichEdInputer.MaxLength + (MaxMessageLength - InputerLength);
  3515. end;
  3516. procedure TTalkingForm.IdHTTPOnRedirect(Sender: TObject; var dest: string; var NumRedirect: Integer; var Handled: boolean; var VMethod: TIdHTTPMethod);
  3517. begin
  3518. FRidrected := True;
  3519. FRidrectURL := dest;
  3520. end;
  3521. procedure TTalkingForm.IdHTTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);
  3522. begin
  3523. end;
  3524. procedure TTalkingForm.IdHTTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer);
  3525. begin
  3526. FImageSize := AWorkCountMax;
  3527. //如果重定向或文件大于200k,断开连接(重新从缓存中查找)
  3528. //if (FRidrected) or (FImageSize > 1024 * 300) then
  3529. (ASender as TIdHTTP).Disconnect;
  3530. end;
  3531. procedure TTalkingForm.IdHTTPWorkEnd(ASender: TObject; AWorkMode: TWorkMode);
  3532. begin
  3533. end;
  3534. procedure TTalkingForm.spbUploadTeamFileClick(Sender: TObject);
  3535. var
  3536. UpUrl: string;
  3537. AFileSize: int64;
  3538. begin
  3539. if (FRealICQClient.Connected) and (FRealICQClient.Logined) then
  3540. if OpenDialog.Execute then
  3541. begin
  3542. TTeamShareAdapter.UploadFile(TeamID, OpenDialog.FileName, Self, FRealICQClient, False);
  3543. end;
  3544. end;
  3545. function TTalkingForm.ReAlighHTMLContent(ABaseURL: string): Boolean;
  3546. var
  3547. StrContent, imgBBURL, imgURL, ALocalFile, ALocalFile1, AFileExt, ABaseURLTop, AHttpStart: string;
  3548. iIndex1, iIndex2: Integer;
  3549. PngObject: TPngObject;
  3550. BMP: TBitmap;
  3551. AFinded: Boolean;
  3552. FIdHTTP: TIdHTTP;
  3553. FileStream: TFileStream;
  3554. begin
  3555. Result := False;
  3556. StrContent := RichEditTemp.Text;
  3557. iIndex1 := Pos('[img]', StrContent);
  3558. iIndex2 := Pos('[/img]', StrContent);
  3559. while (iIndex1 > 0) and (iIndex2 > 0) and (iIndex2 > iIndex1) do
  3560. begin
  3561. imgBBURL := Copy(StrContent, iIndex1, iIndex2 - iIndex1 + 6);
  3562. imgURL := Copy(imgBBURL, 6, iIndex2 - iIndex1 - 5);
  3563. RichEditTemp.SelStart := RichEditTemp.FindText(imgBBURL, 0, Length(StrContent), []);
  3564. RichEditTemp.SelLength := Length(WideString(imgBBURL));
  3565. ;
  3566. RichEditTemp.SelText := '';
  3567. ImgURL := ReplaceStr(ImgURL, '\', '/');
  3568. if Pos('http://', ImgURL) = 1 then
  3569. begin
  3570. end
  3571. else if Pos('https://', ImgURL) = 1 then
  3572. begin
  3573. end
  3574. else if Pos('/', ImgURL) = 1 then
  3575. begin
  3576. AHttpStart := Copy(ABaseURL, 1, Pos('://', ABaseURL) + 2);
  3577. ABaseURLTop := Copy(ABaseURL, Length(AHttpStart) + 1, Length(ABaseURL));
  3578. ABaseURLTop := Copy(ABaseURLTop, 1, Pos('/', ABaseURLTop) - 1);
  3579. ImgURL := AHttpStart + ABaseURLTop + ImgURL;
  3580. end
  3581. else
  3582. begin
  3583. ALocalFile := ReplaceStr(ABaseURL, '\', '/');
  3584. while Pos('/', ALocalFile) > 0 do
  3585. begin
  3586. ALocalFile := Copy(ALocalFile, Pos('/', ALocalFile) + 1, Length(ALocalFile));
  3587. end;
  3588. ImgURL := ReplaceStr(ABaseURL, ALocalFile, '') + ImgURL;
  3589. end;
  3590. ALocalFile := ReplaceStr(ImgURL, '\', '/');
  3591. while Pos('/', ALocalFile) > 0 do
  3592. begin
  3593. ALocalFile := Copy(ALocalFile, Pos('/', ALocalFile) + 1, Length(ALocalFile));
  3594. end;
  3595. AFileExt := ExtractFileExt(ALocalFile);
  3596. if AnsiSameText(AFileExt, '.gif') or AnsiSameText(AFileExt, '.jpg') or AnsiSameText(AFileExt, '.bmp') or AnsiSameText(AFileExt, '.png') or AnsiSameText(AFileExt, '.jpeg') then
  3597. begin
  3598. AFinded := False;
  3599. if AnsiSameText(Copy(ImgURL, 1, 8), 'file:///') then
  3600. begin
  3601. ImgURL := Copy(ImgURL, 9, Length(ImgURL) - 8);
  3602. AFinded := FileExists(ImgURL);
  3603. ALocalFile := ImgURL;
  3604. end
  3605. else
  3606. begin
  3607. ALocalFile1 := CheckImageExists(ImgURL);
  3608. if FileExists(ALocalFile1) then
  3609. begin
  3610. ALocalFile := ALocalFile1;
  3611. AFinded := True;
  3612. end
  3613. else
  3614. begin
  3615. {$region '检查是否有重定向'}
  3616. FRidrected := False;
  3617. FRidrectURL := '';
  3618. FImageSize := 0;
  3619. ALocalFile1 := MainForm.RealICQClient.GetCacheFaceDir + IntToStr(GetTickCount) + '_' + ALocalFile;
  3620. FIdHTTP := TIdHTTP.Create(nil);
  3621. try
  3622. FIdHTTP.ConnectTimeout := 1500;
  3623. FIdHTTP.ReadTimeout := 2000;
  3624. FIdHTTP.OnWork := IdHTTPWork;
  3625. FIdHTTP.OnWorkBegin := IdHTTPWorkBegin;
  3626. FIdHTTP.OnWorkEnd := IdHTTPWorkEnd;
  3627. FIdHTTP.OnRedirect := IdHTTPOnRedirect;
  3628. try
  3629. FileStream := TFileStream.Create(ALocalFile1, fmCreate, fmShareDenyNone);
  3630. try
  3631. FIdHTTP.Get(FIdHTTP.URL.URLEncode(ImgURL), FileStream);
  3632. ALocalFile := ALocalFile1;
  3633. AFinded := True;
  3634. finally
  3635. FileStream.Free;
  3636. end;
  3637. except
  3638. on E: Exception do
  3639. begin
  3640. DeleteFile(ALocalFile1);
  3641. end;
  3642. end;
  3643. finally
  3644. FreeAndNil(FIdHTTP);
  3645. end;
  3646. if FRidrected then
  3647. begin
  3648. FRidrectURL := ReplaceStr(FRidrectURL, '\', '/');
  3649. ImgURL := ReplaceStr(ImgURL, '\', '/');
  3650. if Pos('http://', FRidrectURL) = 1 then
  3651. ImgURL := FRidrectURL
  3652. else if Pos('https://', FRidrectURL) = 1 then
  3653. ImgURL := FRidrectURL
  3654. else if Pos('/', FRidrectURL) = 1 then
  3655. begin
  3656. AHttpStart := Copy(ImgURL, 1, Pos('://', ImgURL) + 2);
  3657. ImgURL := Copy(ImgURL, Length(AHttpStart) + 1, Length(ImgURL));
  3658. ImgURL := Copy(ImgURL, 1, Pos('/', ImgURL) - 1);
  3659. ImgURL := AHttpStart + ImgURL + FRidrectURL;
  3660. end
  3661. else
  3662. begin
  3663. ImgURL := ReplaceStr(ImgURL, ALocalFile, '') + FRidrectURL;
  3664. end;
  3665. ALocalFile := ReplaceStr(ImgURL, '\', '/');
  3666. while Pos('/', ALocalFile) > 0 do
  3667. begin
  3668. ALocalFile := Copy(ALocalFile, Pos('/', ALocalFile) + 1, Length(ALocalFile));
  3669. end;
  3670. AFileExt := ExtractFileExt(ALocalFile);
  3671. if AnsiSameText(AFileExt, '.gif') or AnsiSameText(AFileExt, '.jpg') or AnsiSameText(AFileExt, '.bmp') or AnsiSameText(AFileExt, '.png') or AnsiSameText(AFileExt, '.jpeg') then
  3672. begin
  3673. ALocalFile1 := CheckImageExists(ImgURL);
  3674. if FileExists(ALocalFile1) then
  3675. begin
  3676. ALocalFile := ALocalFile1;
  3677. AFinded := True;
  3678. end;
  3679. end;
  3680. end;
  3681. {$endregion }
  3682. end;
  3683. end;
  3684. if AFinded then
  3685. begin
  3686. try
  3687. AddImageToInput(ALocalFile, RichEditTemp);
  3688. Result := True;
  3689. except
  3690. on E: Exception do
  3691. begin
  3692. if Pos('JPEG error #53', E.Message) > 0 then
  3693. begin
  3694. MoveFile(PChar(ALocalFile), PChar(ALocalFile + '.gif'));
  3695. try
  3696. AddImageToInput(ALocalFile + '.gif', RichEditTemp);
  3697. Result := True;
  3698. except
  3699. Result := False;
  3700. end;
  3701. end
  3702. else
  3703. begin
  3704. Result := False;
  3705. end;
  3706. end;
  3707. end;
  3708. end;
  3709. end;
  3710. StrContent := RichEditTemp.Text;
  3711. iIndex1 := Pos('[img]', StrContent);
  3712. iIndex2 := Pos('[/img]', StrContent);
  3713. end;
  3714. Application.ProcessMessages;
  3715. Sleep(10);
  3716. Application.ProcessMessages;
  3717. RichEditTemp.SelectAll;
  3718. RichEditTemp.SelLength := RichEditTemp.SelLength - 2;
  3719. RichEditTemp.CopyToClipboard;
  3720. RichEdInputer.PasteFromClipboard;
  3721. RichEditTemp.Clear;
  3722. end;
  3723. function TTalkingForm.GetHTMLUBBCode(AHTML: string; var ABaseURL: string): string;
  3724. var
  3725. iIndex1: Integer;
  3726. StrStartFragment, StrEndFragment: string;
  3727. iStartFragment, iEndFragment: Integer;
  3728. reg: TPerlRegEx;
  3729. ws: string;
  3730. begin
  3731. Result := '';
  3732. iIndex1 := Pos('SourceURL:', AHTML);
  3733. if iIndex1 > 0 then
  3734. begin
  3735. ABaseURL := Copy(AHTML, iIndex1 + Length('SourceURL:'), 100);
  3736. iIndex1 := Pos(#$D, ABaseURL);
  3737. if iIndex1 > 0 then
  3738. begin
  3739. ABaseURL := Copy(ABaseURL, 1, iIndex1 - 1);
  3740. end;
  3741. end;
  3742. iIndex1 := Pos('StartFragment:', AHTML);
  3743. if iIndex1 = 0 then
  3744. Exit;
  3745. StrStartFragment := Copy(AHTML, iIndex1 + Length('StartFragment:'), 12);
  3746. iIndex1 := Pos(#$D, StrStartFragment);
  3747. if iIndex1 = 0 then
  3748. Exit;
  3749. StrStartFragment := Copy(StrStartFragment, 1, iIndex1 - 1);
  3750. iIndex1 := Pos('EndFragment:', AHTML);
  3751. if iIndex1 = 0 then
  3752. Exit;
  3753. StrEndFragment := Copy(AHTML, iIndex1 + Length('EndFragment:'), 12);
  3754. iIndex1 := Pos(#$D, StrEndFragment);
  3755. if iIndex1 = 0 then
  3756. Exit;
  3757. StrEndFragment := Copy(StrEndFragment, 1, iIndex1 - 1);
  3758. iStartFragment := StrToInt(StrStartFragment);
  3759. iEndFragment := StrToInt(StrEndFragment);
  3760. Result := Copy(AHTML, iStartFragment + 1, iEndFragment - iStartFragment);
  3761. {iIndex1 := Pos('SourceURL:', AHTML);
  3762. if iIndex1 = 0 then Exit;
  3763. StrSourceURL := Copy(AHTML, iIndex1 + Length('SourceURL:'), Length(AHTML));
  3764. StrSourceURL := Copy(StrSourceURL, 1, Pos(#$D#$A, StrSourceURL)); }
  3765. reg := TPerlRegEx.Create;
  3766. reg.Subject := LowerCase(Result);
  3767. reg.RegEx := '聽'; //???????????????????????????????????????
  3768. reg.Replacement := ' ';
  3769. reg.ReplaceAll;
  3770. reg.RegEx := #$D#$A;
  3771. reg.Replacement := '';
  3772. reg.ReplaceAll;
  3773. reg.RegEx := '</p>';
  3774. reg.Replacement := #$D#$A;
  3775. reg.ReplaceAll;
  3776. reg.RegEx := '</div>';
  3777. reg.Replacement := #$D#$A;
  3778. reg.ReplaceAll;
  3779. reg.RegEx := '<br>';
  3780. reg.Replacement := #$D#$A;
  3781. reg.ReplaceAll;
  3782. reg.RegEx := '<script[^>]*?>([\w\W]*?)<\/script>';
  3783. reg.Replacement := '';
  3784. reg.ReplaceAll;
  3785. reg.RegEx := '<font[^>]+color=([^ >]+)[^>]*>(.*?)<\/font>';
  3786. reg.Replacement := '$2';
  3787. reg.ReplaceAll;
  3788. reg.RegEx := '<img[^>]+src="([^"]+)"[^>]*>';
  3789. reg.Replacement := '[img]$1[/img]';
  3790. reg.ReplaceAll;
  3791. reg.RegEx := '<[^>]*?>';
  3792. reg.Replacement := '';
  3793. reg.ReplaceAll;
  3794. reg.RegEx := '&amp;';
  3795. reg.Replacement := '&';
  3796. reg.ReplaceAll;
  3797. reg.RegEx := '&lt;';
  3798. reg.Replacement := '<';
  3799. reg.ReplaceAll;
  3800. reg.RegEx := '&gt;';
  3801. reg.Replacement := '>';
  3802. reg.ReplaceAll;
  3803. reg.RegEx := '&nbsp;';
  3804. reg.Replacement := ' ';
  3805. reg.ReplaceAll;
  3806. reg.RegEx := '&quot;';
  3807. reg.Replacement := '"';
  3808. reg.ReplaceAll;
  3809. Result := reg.Subject;
  3810. FreeAndNil(reg);
  3811. ws := UTF8Decode(Result);
  3812. while (ws[Length(ws)] = #$A) or (ws[Length(ws)] = #$D) do
  3813. ws := Copy(ws, 1, Length(ws) - 1);
  3814. Result := ws;
  3815. end;
  3816. //------------------------------------------------------------------------------
  3817. function TTalkingForm.PasteImage(AUseTemp: Boolean = True): Boolean;
  3818. var
  3819. //vMetafile: TMetafile;
  3820. Picture: TPicture;
  3821. Bitmap: TBitmap;
  3822. GIF: TGIFImage;
  3823. AFileName: string;
  3824. AFindedImage: Boolean;
  3825. PFileName: PChar;
  3826. DataHandle: Thandle;
  3827. FilesCount: Integer;
  3828. ClipboardText: string;
  3829. iLoop, tabCount, returnCount: Integer;
  3830. AIndexes: TIndexes;
  3831. AFaceInRichEdit: TFaceInRichEdit;
  3832. CF_HTML: DWORD;
  3833. hMem: DWORD;
  3834. pHTML: PChar;
  3835. StrHTML, ABaseURL: string;
  3836. APasted: Boolean;
  3837. begin
  3838. Result := False;
  3839. ClipboardText := Clipboard.AsText;
  3840. if Clipboard.HasFormat(CF_HDROP) and ((not Clipboard.HasFormat(CF_METAFILEPICT)) and (not Clipboard.HasFormat(CF_PICTURE))) then
  3841. begin
  3842. // if FCategory = tcTeam then
  3843. // begin
  3844. // Result := True;
  3845. // Exit;
  3846. // end;
  3847. GetMem(PFileName, MAX_PATH + 1);
  3848. DataHandle := Clipboard.GetAsHandle(CF_HDROP);
  3849. FilesCount := DragQueryFile(DataHandle, MAXDWORD, PFileName, MAX_PATH);
  3850. for iLoop := 0 to FilesCount - 1 do
  3851. begin
  3852. if DragQueryFile(DataHandle, iLoop, PFileName, MAX_PATH) > 0 then
  3853. begin
  3854. if DirectoryExists(PFileName) then
  3855. OpenSendFolderForm(PFileName)
  3856. else
  3857. SendDropFile(PFileName);
  3858. end;
  3859. if iLoop > 20 then
  3860. break;
  3861. end;
  3862. FreeMem(PFileName);
  3863. Result := True;
  3864. Exit;
  3865. end;
  3866. tabCount := 0;
  3867. returnCount := 0;
  3868. for iLoop := 1 to Length(ClipboardText) do
  3869. begin
  3870. if ClipboardText[iLoop] = #9 then
  3871. Inc(tabCount);
  3872. if ClipboardText[iLoop] = #13 then
  3873. Inc(returnCount);
  3874. end;
  3875. //粘贴HTML数据
  3876. CF_HTML := RegisterClipboardFormat('HTML Format');
  3877. if Clipboard.HasFormat(CF_HTML) and not ((Length(ClipboardText) > 0) and (tabCount > 0) and (tabCount >= returnCount) and (Clipboard.HasFormat(CF_METAFILEPICT))) then
  3878. begin
  3879. Screen.Cursor := crHourGlass;
  3880. try
  3881. hMem := Clipboard.GetAsHandle(CF_HTML);
  3882. pHTML := GlobalLock(hMem);
  3883. StrHTML := StrPas(pHTML);
  3884. GlobalUnlock(hMem);
  3885. ABaseURL := '';
  3886. StrHTML := GetHTMLUBBCode(StrHTML, ABaseURL);
  3887. RichEditTemp.Clear;
  3888. RichEditTemp.Lines.Add(StrHTML);
  3889. APasted := ReAlighHTMLContent(ABaseURL);
  3890. finally
  3891. Screen.Cursor := crDefault;
  3892. end;
  3893. if (not APasted) and (Clipboard.HasFormat(CF_METAFILEPICT) or Clipboard.HasFormat(CF_PICTURE)) then
  3894. begin
  3895. end
  3896. else
  3897. begin
  3898. Result := True;
  3899. Exit;
  3900. end;
  3901. end;
  3902. {$region '先在临时RichEdit中粘贴'}
  3903. if AUseTemp and (Length(ClipboardText) = 0) then
  3904. begin
  3905. RichEditTemp.Clear;
  3906. RichEditTemp.PasteFromClipboard;
  3907. AIndexes := RichEditTemp.GetFaceIndexes;
  3908. if High(AIndexes) = 0 then //只有一个对象
  3909. begin
  3910. AFaceInRichEdit := AIndexes[0];
  3911. if AFaceInRichEdit.FaceIndex > 0 then //已经是表情对象
  3912. begin
  3913. Result := False;
  3914. RichEditTemp.Clear;
  3915. Exit;
  3916. end
  3917. else if ((not Clipboard.HasFormat(CF_METAFILEPICT)) and (not Clipboard.HasFormat(CF_PICTURE))) then
  3918. begin
  3919. Result := True;
  3920. RichEditTemp.Clear;
  3921. Exit;
  3922. end;
  3923. end;
  3924. end;
  3925. {$endregion}
  3926. try
  3927. if Clipboard.HasFormat(CF_METAFILEPICT) then
  3928. begin
  3929. if (Length(ClipboardText) > 0) and (tabCount > 0) and (tabCount >= returnCount) then
  3930. begin
  3931. AFindedImage := False;
  3932. Bitmap := TBitmap.Create;
  3933. try
  3934. try
  3935. Bitmap.LoadFromClipboardFormat(cf_BitMap, ClipBoard.GetAsHandle(cf_Bitmap), 0);
  3936. AFindedImage := True;
  3937. except
  3938. end;
  3939. if AFindedImage then
  3940. begin
  3941. AFileName := MainForm.RealICQClient.GetReceivedFaceDir + 'SC' + IntToStr(GetTickCount) + '.TEMP.BMP';
  3942. Bitmap.SaveToFile(AFileName);
  3943. end;
  3944. finally
  3945. Bitmap.Free;
  3946. end;
  3947. if AFindedImage then
  3948. begin
  3949. AddImageToInput(AFileName, RichEdInputer);
  3950. DeleteFile(AFileName);
  3951. Result := True;
  3952. Exit;
  3953. end;
  3954. end;
  3955. end;
  3956. if Clipboard.HasFormat(CF_PICTURE) and (Length(Trim(Clipboard.AsText)) = 0) then
  3957. begin
  3958. Picture := TPicture.Create;
  3959. Bitmap := TBitmap.Create;
  3960. try
  3961. Bitmap.LoadFromClipboardFormat(cf_BitMap, ClipBoard.GetAsHandle(cf_Bitmap), 0);
  3962. AFileName := MainForm.RealICQClient.GetReceivedFaceDir + 'SC' + IntToStr(GetTickCount) + '.TEMP.BMP';
  3963. Bitmap.SaveToFile(AFileName);
  3964. finally
  3965. Bitmap.Free;
  3966. Picture.Free;
  3967. end;
  3968. AddImageToInput(AFileName, RichEdInputer);
  3969. DeleteFile(AFileName);
  3970. Result := True;
  3971. Exit;
  3972. end;
  3973. except
  3974. on E: Exception do
  3975. Error(E.Message, 'TTalkingForm.PasteImage');
  3976. end;
  3977. end;
  3978. //------------------------------------------------------------------------------
  3979. procedure TTalkingForm.btCloseClick(Sender: TObject);
  3980. begin
  3981. if Assigned(FRemoteControlMission) then
  3982. FRemoteControlMission.Stop;
  3983. end;
  3984. procedure TTalkingForm.btCloseTalkClick(Sender: TObject);
  3985. var
  3986. source, target: string;
  3987. AUser: TRealICQUser;
  3988. begin
  3989. if TConditionConfig.GetConfig.GradeSystem and (FCategory = tcNormal) then
  3990. begin
  3991. AUser := TUsersService.GetUsersService.GetOrRequestUser(Receiver);
  3992. if not Assigned(AUser) then
  3993. Exit;
  3994. source := TUsersService.ClearServerID(FSender);
  3995. target := TUsersService.ClearServerID(FReceiver);
  3996. (AUser.RealICQPtoPBox as TRealICQPtoPBox).SendMessage((spbEncryMsg.Tag = 1), FontToString(RichEdInputer.Font), '[grade-src="http://111.113.17.86:8088/Home/Rating?fromName=' + source + '&toName=' + target + '"]');
  3997. end
  3998. else
  3999. Close;
  4000. end;
  4001. procedure TTalkingForm.btDownArrowClick(Sender: TObject);
  4002. var
  4003. Point1: TPoint;
  4004. begin
  4005. Point1.X := 0;
  4006. Point1.Y := (Sender as TRealICQButton).Height + 1;
  4007. Point1 := (Sender as TRealICQButton).ClientToScreen(Point1);
  4008. ppForDown.Popup(Point1.X + 6, Point1.Y);
  4009. end;
  4010. procedure TTalkingForm.btnQRClick(Sender: TObject);
  4011. var
  4012. data: string;
  4013. RealICQUser: TRealICQUser;
  4014. Form: TVCardForm;
  4015. begin
  4016. Form := GetVCardForm(FReceiver);
  4017. Form.Top := (Screen.Height - Form.Height) div 2;
  4018. Form.Left := (Screen.Width - Form.Width) div 2;
  4019. Form.Show;
  4020. end;
  4021. procedure TTalkingForm.btReleaseControlClick(Sender: TObject);
  4022. begin
  4023. if Assigned(FRemoteControlMission) then
  4024. FRemoteControlMission.CancelControl;
  4025. end;
  4026. procedure TTalkingForm.btSendClick(Sender: TObject);
  4027. var
  4028. Face: TFace;
  4029. FaceMD5String, MessageStr: string;
  4030. BaseSelStart, iCount, iLoop: Integer;
  4031. FaceInRichEdit: TFaceInRichEdit;
  4032. FaceIndexes: TIndexes;
  4033. FRealICQUser: TRealICQUser;
  4034. saystr, AError: string;
  4035. AFaces: TStringList;
  4036. ATask: TFacesUploaderTask;
  4037. begin
  4038. if (GetTickCount - FLastSendMsgTicket) < 200 then
  4039. begin
  4040. ShowSendMessageTooQuickly(WebBrowser);
  4041. Exit;
  4042. end;
  4043. FRealICQUser := nil;
  4044. if FCategory = tcNormal then
  4045. begin
  4046. FRealICQUser := TUsersService.GetUsersService.GetOrRequestUser(Receiver);
  4047. if not Assigned(FRealICQUser) then
  4048. Exit;
  4049. if AnsiSameText(RichEdInputer.Text, '/P2PType') then
  4050. begin
  4051. P2PTypeChanged((FRealICQUser.RealICQPtoPBox as TRealICQPtoPBox));
  4052. ClearInputtingMessageTimer.Enabled := False;
  4053. ClearInputtingMessageTimer.Enabled := True;
  4054. RichEdInputer.Lines.Clear;
  4055. Exit;
  4056. end;
  4057. end;
  4058. if GetInputerLength > MaxMessageLength + 64 then
  4059. begin
  4060. MessageBox(Handle, '输入的消息内容太长! ', '提示', MB_ICONINFORMATION);
  4061. RichEdInputer.SetFocus;
  4062. Exit;
  4063. end;
  4064. MessageStr := '';
  4065. AFaces := TStringList.Create;
  4066. FaceIndexes := RichEdInputer.GetFaceIndexes;
  4067. BaseSelStart := 0;
  4068. RichEdInputer.OnChange := nil;
  4069. RichEdInputer.Visible := False;
  4070. try
  4071. iCount := 0;
  4072. for iLoop := 0 to Length(FaceIndexes) - 1 do
  4073. begin
  4074. FaceInRichEdit := FaceIndexes[iLoop];
  4075. if FaceInRichEdit.FaceIndex >= BaseTempFaceIndex then
  4076. Face := MainForm.TempFaceList.Objects[FaceInRichEdit.FaceIndex - BaseTempFaceIndex] as TFace
  4077. else
  4078. Face := MainForm.FaceList.Objects[FaceInRichEdit.FaceIndex] as TFace;
  4079. if TLimitCondition.GreaterThanFaceMaxSize(Face.FileName, AError) then
  4080. begin
  4081. MessageBox(Handle, PChar(AError), '提示', MB_ICONINFORMATION);
  4082. Error(AError, 'TLimitCondition.GreaterThanFaceMaxSize');
  4083. RichEdInputer.SetFocus;
  4084. Exit;
  4085. end;
  4086. end;
  4087. for iLoop := 0 to Length(FaceIndexes) - 1 do
  4088. begin
  4089. FaceInRichEdit := FaceIndexes[iLoop];
  4090. if FaceInRichEdit.FaceIndex >= BaseTempFaceIndex then
  4091. Face := MainForm.TempFaceList.Objects[FaceInRichEdit.FaceIndex - BaseTempFaceIndex] as TFace
  4092. else
  4093. Face := MainForm.FaceList.Objects[FaceInRichEdit.FaceIndex] as TFace;
  4094. if FaceInRichEdit.FaceIndex < MainForm.SystemFaceCount then
  4095. FaceMD5String := Face.ShortCut
  4096. else
  4097. begin
  4098. FaceMD5String := '[image-src="' + Face.MD5Code + '"]';
  4099. Inc(iCount);
  4100. AFaces.addObject(Face.FileName, Face);
  4101. end;
  4102. RichEdInputer.SelStart := BaseSelStart + FaceInRichEdit.FacePosition;
  4103. RichEdInputer.SelLength := 1;
  4104. RichEdInputer.SelText := FaceMD5String;
  4105. Inc(BaseSelStart, Length(FaceMD5String) - 1);
  4106. end;
  4107. MessageStr := Trim(RichEdInputer.Text);
  4108. if Length(MessageStr) = 0 then
  4109. begin
  4110. MessageBox(Handle, '不能发送空消息! ', '提示', MB_ICONINFORMATION);
  4111. Exit;
  4112. end;
  4113. if GetInputerLength > 4096 then
  4114. begin
  4115. MessageBox(Handle, '输入的消息内容太长! ', '提示', MB_ICONINFORMATION);
  4116. RichEdInputer.SetFocus;
  4117. Exit;
  4118. end;
  4119. finally
  4120. RichEdInputer.Visible := True;
  4121. RichEdInputer.SetFocus;
  4122. end;
  4123. RichEdInputer.MaxLength := MaxMessageLength;
  4124. RichEdInputer.Lines.Clear;
  4125. RichEdInputer.Clear;
  4126. RichEdInputer.OnChange := RichEdInputerChange;
  4127. RichEdInputer.Visible := True;
  4128. RichEdInputer.SetFocus;
  4129. while (ImagesList.Count > 0) do
  4130. begin
  4131. dispose(ImagesList.First);
  4132. ImagesList.Delete(0);
  4133. end;
  4134. if FCategory = tcNormal then
  4135. (FRealICQUser.RealICQPtoPBox as TRealICQPtoPBox).SyncSendMessage((spbEncryMsg.Tag = 1), FontToString(RichEdInputer.Font), MessageStr, AFaces)
  4136. else
  4137. TTeamsAdapter.SendTeamMessage(FTeamID, MainForm.realICQClient.LoginName, MessageStr, RichEdInputer.Font, AFaces, '');
  4138. FLastSendMsgTicket := GetTickCount;
  4139. end;
  4140. procedure TTalkingForm.btSetControlClick(Sender: TObject);
  4141. begin
  4142. if Assigned(FRemoteControlMission) then
  4143. FRemoteControlMission.ControlReAccept;
  4144. end;
  4145. //------------------------------------------------------------------------------
  4146. procedure TTalkingForm.RichEdInputerMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  4147. var
  4148. chrPoint, vPoint, pt: TPoint;
  4149. FaceInRichEdit: TFaceInRichEdit;
  4150. FaceIndexes: TIndexes;
  4151. iLoop, iPos: integer;
  4152. face: TFace;
  4153. begin
  4154. if Button = mbRight then
  4155. begin
  4156. vPoint.X := X;
  4157. vPoint.Y := Y;
  4158. vPoint := RichEdInputer.ClientToScreen(vPoint);
  4159. chrPoint := Point(X, Y);
  4160. iPos := SendMessage(TRealICQRichEdit(Sender).Handle, EM_CHARFROMPOS, 0, Integer(@chrPoint)) and $0000FFFF; // 得到鼠标点击字符位置
  4161. pt := TRealICQRichEdit(Sender).GetCharPos(iPos);
  4162. if (RichEdInputer.SelLength <= 0) then
  4163. begin
  4164. if pt.x < chrPoint.X then
  4165. RichEdInputer.SetSelection(iPos, iPos + 1, false)
  4166. else
  4167. RichEdInputer.SetSelection(iPos - 1, iPos, true);
  4168. if TRealICQRichEdit(Sender).SelectionType <> [stObject] then
  4169. begin
  4170. RichEdInputer.SelLength := 0;
  4171. RichEdInputer.SelStart := iPos;
  4172. end;
  4173. end;
  4174. //判断
  4175. if TRealICQRichEdit(Sender).SelectionType = [stObject] then
  4176. begin
  4177. FaceIndexes := TRealICQRichEdit(Sender).GetFaceIndexes;
  4178. for iLoop := 0 to Length(FaceIndexes) - 1 do
  4179. begin
  4180. FaceInRichEdit := FaceIndexes[iLoop];
  4181. if FaceInRichEdit.FacePosition = TRealICQRichEdit(Sender).SelStart then
  4182. begin
  4183. FRightMouseClickedFace := FaceInRichEdit;
  4184. miCopyImage.Visible := True;
  4185. actSaveImgAs.Visible := True;
  4186. actAddImageToCustomFaces.Visible := True;
  4187. ppForInputerImg.Popup(vPoint.X, vPoint.Y);
  4188. break;
  4189. end;
  4190. end;
  4191. RichEdInputer.SelLength := 0;
  4192. RichEdInputer.SelStart := iPos;
  4193. end
  4194. else
  4195. ppForInputer.Popup(vPoint.X, vPoint.Y);
  4196. end;
  4197. end;
  4198. procedure TTalkingForm.RichEdInputerSelectionChange(Sender: TObject);
  4199. begin
  4200. //Dialogs.ShowMessage('RichEdInputerSelectionChange');
  4201. end;
  4202. //------------------------------------------------------------------------------
  4203. procedure TTalkingForm.rndMyInfoResize(Sender: TObject);
  4204. begin
  4205. //Application.ProcessMessages;
  4206. end;
  4207. //------------------------------------------------------------------------------
  4208. procedure TTalkingForm.spbSelUIColorClick(Sender: TObject);
  4209. var
  4210. Point: TPoint;
  4211. begin
  4212. Point.X := 0;
  4213. Point.Y := (Sender as TRealICQSpeedButton).Height + 1;
  4214. Point := (Sender as TRealICQSpeedButton).ClientToScreen(Point);
  4215. ppColors.Popup(Point.X, Point.Y);
  4216. end;
  4217. //------------------------------------------------------------------------------
  4218. procedure TTalkingForm.LblSendSMSClick(Sender: TObject);
  4219. var
  4220. FRealICQUser: TRealICQUser;
  4221. begin
  4222. FRealICQUser := TUsersService.GetUsersService.GetOrRequestUser(Receiver);
  4223. if Length(FRealICQUser.Mobile) > 0 then
  4224. OpenSMSForm(Receiver, True)
  4225. else
  4226. OpenSMSForm('', True);
  4227. end;
  4228. procedure TTalkingForm.LblSendSMSMouseEnter(Sender: TObject);
  4229. begin
  4230. LblSendSMS.Font.Style := [fsUnderLine];
  4231. LblSendSMS1.Font.Style := [fsUnderLine];
  4232. end;
  4233. procedure TTalkingForm.LblSendSMSMouseLeave(Sender: TObject);
  4234. begin
  4235. LblSendSMS.Font.Style := [];
  4236. LblSendSMS1.Font.Style := [];
  4237. end;
  4238. procedure TTalkingForm.LoadAdvertisement;
  4239. begin
  4240. if (not FRealICQClient.TalkingFormAdversement.Visible) then
  4241. begin
  4242. if pnlForWebBrowserAdvertisement.Width > 0 then
  4243. pnlAdvertisement.Width := 0;
  4244. end
  4245. else
  4246. begin
  4247. WebBrowserForAdvertisement.OnBeforeNavigate2 := nil;
  4248. pnlForHideWebBrowserAdvertisement.Visible := True;
  4249. WebBrowserForAdvertisement.OnDocumentComplete := WebBrowserForAdvertisementDocumentComplete;
  4250. WebBrowserForAdvertisement.Navigate(FRealICQClient.TalkingFormAdversement.URL);
  4251. WebBrowserForAdvertisement.OnBeforeNavigate2 := WebBrowserForAdvertisementBeforeNavigate2;
  4252. pnlAdvertisement.Width := FRealICQClient.TalkingFormAdversement.Width;
  4253. end;
  4254. end;
  4255. //------------------------------------------------------------------------------
  4256. procedure TTalkingForm.LoadNotReadMessagesFromDBHistory(DBHistorySearchResult: TDBHistorySearchResult);
  4257. var
  4258. iLoop: Integer;
  4259. MessageSearchResult: TMessageSearchResult;
  4260. SenderName, SplitHTML, FontStr, AMessageStr: string;
  4261. FRealICQUser: TRealICQUser;
  4262. TextFont: TFont;
  4263. iIndex: Integer;
  4264. MessageList: TList;
  4265. NotReadMessageCount: Integer;
  4266. OldAllowURL: Boolean;
  4267. begin
  4268. ClearHTML(self.WebBrowser);
  4269. for iLoop := DBHistorySearchResult.Messages.Count - 1 downto 0 do
  4270. begin
  4271. MessageSearchResult := DBHistorySearchResult.Messages[iLoop];
  4272. if MessageSearchResult.TeamID = '-5' then
  4273. begin
  4274. Continue;
  4275. end;
  4276. FRealICQUser := TUsersService.GetUsersService.GetOrRequestUser(MessageSearchResult.Sender);
  4277. if Length(Trim(FRealICQUser.DisplayName)) = 0 then
  4278. SenderName := FRealICQUser.LoginName
  4279. else
  4280. SenderName := FRealICQUser.DisplayName;
  4281. // TextFont := TFont.Create;
  4282. // OldAllowURL := MainForm.AllowURL;
  4283. try
  4284. // MainForm.AllowURL := False;
  4285. // StringToFont(MessageSearchResult.Font, TextFont);
  4286. // TextFont.Color := $00686868;
  4287. // FontStr := FontToString(TextFont);
  4288. if MessageSearchResult.IsEncryMessage then
  4289. AMessageStr := IntToStr(MessageSearchResult.ID)
  4290. else
  4291. AMessageStr := MessageSearchResult.MessageStr;
  4292. AddMessageToWebBrowser(FRealICQUser.LoginName, SenderName, MessageSearchResult.Font, AMessageStr, MessageSearchResult.SendDateTime, MessageSearchResult.IsEncryMessage, False, False);
  4293. finally
  4294. // MainForm.AllowURL := OldAllowURL;
  4295. // TextFont.Free;
  4296. end;
  4297. end;
  4298. end;
  4299. procedure TTalkingForm.LoadOfflinefilesConfig;
  4300. var
  4301. XMLDocument: TXMLDocument;
  4302. ServerConfigNode: IXMLNode;
  4303. begin
  4304. XMLDocument := TXMLDocument.Create(Self);
  4305. try
  4306. XMLDocument.Active := True;
  4307. if csDesigning in ComponentState then
  4308. exit;
  4309. XMLDocument.LoadFromFile(ExtractFilePath(Application.ExeName) + ConfigXMLFilePath + 'OfflinefilesServerConfig.xml');
  4310. ServerConfigNode := XMLDocument.DocumentElement;
  4311. FOfflinefilesAddr := ServerConfigNode.ChildNodes.FindNode('OfflinefilesServer').Attributes['Address'];
  4312. FOfflinefilesPort := ServerConfigNode.ChildNodes.FindNode('OfflinefilesServer').Attributes['Port'];
  4313. FPackageSize := ServerConfigNode.ChildNodes.FindNode('OfflinefilesServer').Attributes['PackageSize'];
  4314. finally
  4315. XMLDocument.Free;
  4316. end;
  4317. end;
  4318. //------------------------------------------------------------------------------
  4319. procedure TTalkingForm.LoadHistoryMessages;
  4320. var
  4321. iLoop: Integer;
  4322. MessageSearchResult: TMessageSearchResult;
  4323. SenderName, SplitHTML, FontStr, AMessageStr: string;
  4324. FRealICQUser: TRealICQUser;
  4325. iIndex: Integer;
  4326. MessageList: TList;
  4327. Alias: string;
  4328. begin
  4329. if FCategory = tcNormal then
  4330. MessageList := MainForm.DBHistory.GetMessage('-1', FReceiver, FRealICQClient.LoginName, FMaxID, 8)
  4331. else
  4332. MessageList := MainForm.DBHistory.GetMessage(FTeamID, FReceiver, FRealICQClient.LoginName, FMaxID, 8);
  4333. for iLoop := 0 to MessageList.Count - 1 do
  4334. begin
  4335. MessageSearchResult := MessageList[iLoop];
  4336. if MessageSearchResult.TeamID = '-5' then
  4337. begin
  4338. Continue;
  4339. end;
  4340. FRealICQUser := TUsersService.GetUsersService.GetOrRequestUser(MessageSearchResult.Sender);
  4341. Alias := TTeamsAdapter.GetAlias(FTeamID, FRealICQUser.LoginName);
  4342. if trim(Alias) = '' then
  4343. begin
  4344. if Length(Trim(FRealICQUser.DisplayName)) = 0 then
  4345. SenderName := FRealICQUser.LoginName
  4346. else
  4347. SenderName := FRealICQUser.DisplayName;
  4348. end
  4349. else
  4350. SenderName := Alias;
  4351. if MessageSearchResult.IsEncryMessage then
  4352. AMessageStr := IntToStr(MessageSearchResult.ID)
  4353. else
  4354. AMessageStr := MessageSearchResult.MessageStr;
  4355. AddMessageToWebBrowserTop(FRealICQUser.LoginName, SenderName, MessageSearchResult.Font, AMessageStr, MessageSearchResult.SendDateTime, MessageSearchResult.IsEncryMessage, False, False);
  4356. end;
  4357. if MessageList.Count > 0 then
  4358. FMaxID := TMessageSearchResult(MessageList[MessageList.Count - 1]).ID;
  4359. TRealICQUtility.FreeList(MessageList);
  4360. end;
  4361. //------------------------------------------------------------------------------
  4362. procedure TTalkingForm.LoadNotReadMessages;
  4363. var
  4364. iIndex: Integer;
  4365. MessageList: TList;
  4366. NotReadMessage: TNotReadMessage;
  4367. NotReadTeamMessage: TNotReadTeamMessage;
  4368. begin
  4369. try
  4370. Application.ProcessMessages;
  4371. LoadHistoryMessages;
  4372. except
  4373. end;
  4374. GoBottom(Webbrowser);
  4375. if FCategory = tcNormal then
  4376. begin
  4377. iIndex := MainForm.NotReadMessages.IndexOf(Receiver);
  4378. if iIndex < 0 then
  4379. Exit;
  4380. MessageList := MainForm.NotReadMessages.Objects[iIndex] as TList;
  4381. MainForm.NotReadMessages.Delete(iIndex);
  4382. try
  4383. NotReadMessageBoxForm.ShowNotReadMessage;
  4384. NotReadMessageBoxForm.Height := 0;
  4385. NotReadMessageBoxForm.Top := Screen.WorkAreaHeight - NotReadMessageBoxForm.Height;
  4386. except
  4387. end;
  4388. // MainForm.DBHistory.SetReadFlag('-1', Receiver);
  4389. //
  4390. // while MessageList.Count > 0 do
  4391. // begin
  4392. // NotReadMessage := TNotReadMessage(MessageList[0]);
  4393. // ShowMessage(NotReadMessage.RealICQMessage, NotReadMessage.ShowSendFailed);
  4394. // MessageList.Delete(0);
  4395. // FreeAndNil(NotReadMessage);
  4396. // end;
  4397. // FreeAndNil(MessageList);
  4398. TRealICQUtility.FreeList(MessageList);
  4399. MainForm.StopFlash(Receiver);
  4400. end
  4401. else
  4402. begin
  4403. iIndex := MainForm.NotReadMessages.IndexOf(TeamMessageID + FTeamID);
  4404. if iIndex < 0 then
  4405. Exit;
  4406. MessageList := MainForm.NotReadMessages.Objects[iIndex] as TList;
  4407. MainForm.NotReadMessages.Delete(iIndex);
  4408. MainForm.DBHistory.SetReadFlag(FTeamID, '');
  4409. try
  4410. NotReadMessageBoxForm.ShowNotReadMessage;
  4411. NotReadMessageBoxForm.Height := 0;
  4412. NotReadMessageBoxForm.Top := Screen.WorkAreaHeight - NotReadMessageBoxForm.Height;
  4413. except
  4414. end;
  4415. // while MessageList.Count > 0 do
  4416. // begin
  4417. // NotReadTeamMessage := TNotReadTeamMessage(MessageList[0]);
  4418. //
  4419. // ShowTeamMessage(NotReadTeamMessage.RealICQTeamMessage, NotReadTeamMessage.ShowSendFailed);
  4420. // MessageList.Delete(0);
  4421. // FreeAndNil(NotReadTeamMessage);
  4422. // end;
  4423. // FreeAndNil(MessageList);
  4424. TRealICQUtility.FreeList(MessageList);
  4425. MainForm.StopFlashTeam(FTeamID);
  4426. end;
  4427. end;
  4428. {设置WebBrowser的样式}
  4429. //------------------------------------------------------------------------------
  4430. procedure TTalkingForm.SetDOMStyle(Doc: IHTMLDocument2);
  4431. var
  4432. v: Variant;
  4433. CurrentColor, CssColor: string;
  4434. AHtmlFile: TFileStream;
  4435. AStrStream: TStringStream;
  4436. begin
  4437. // if pnlForHideWebBrowser.Visible then
  4438. // begin
  4439. // try
  4440. // AHtmlFile := TFileStream.Create('E:\\DelphiProjects\\IMClient-Root-CMG\\html\\chat.html', fmOpenRead);
  4441. // AStrStream := TStringStream.Create('');
  4442. // AStrStream.CopyFrom(AHtmlFile, AHtmlFile.Size);
  4443. // v := VarArrayCreate([0, 0], varVariant);
  4444. // v[0] := AStrStream.DataString;
  4445. // // v[0] := '<html dir="ltr" lang="zh">'
  4446. // // + '<head>'
  4447. // // + '<META http-equiv="Content-Type" content="text/html; charset=gb2312">'
  4448. // // + '<body link="#0000FF" vlink="#0000FF" alink="#0000FF" hlink="#0000FF" bgcolor="#fdfdfd" oncontextmenu="location.href=''PopMenu'';return false;">'
  4449. // // + '</body>'
  4450. // // + '</head>'; //????????????????????????
  4451. // doc.write(PSafeArray(TVarData(v).VArray));
  4452. // finally
  4453. // AHtmlFile.Free;
  4454. // AStrStream.Free;
  4455. // end;
  4456. // end;
  4457. try
  4458. CurrentColor := IntToHex(ConvertColorToColor($00CDCDCD, FWindowColor), 6);
  4459. CssColor := '#' + Copy(CurrentColor, 5, 2) + Copy(CurrentColor, 3, 2) + Copy(CurrentColor, 1, 2);
  4460. except
  4461. end;
  4462. Doc.body.language := 'gb2312';
  4463. Doc.body.style.cssText := 'SCROLLBAR-FACE-COLOR:' + CssColor + ';' + 'SCROLLBAR-HIGHLIGHT-COLOR: ButtonHighLight;' + 'SCROLLBAR-SHADOW-COLOR: ButtonShadow;' + 'SCROLLBAR-ARROW-COLOR: #333333;' + 'SCROLLBAR-3DLIGHT-COLOR:' + CssColor + ';' + 'SCROLLBAR-TRACK-COLOR:' + CssColor + ';' + 'SCROLLBAR-DARKSHADOW-COLOR:' + CssColor + ';' + 'word-break: break-all;' + 'background-attachment: fixed;' + 'background-repeat: no-repeat;' + 'background-position: left top;' + '.ChatPic{width:10px;}';
  4464. Doc.body.style.overflow := 'auto';
  4465. Doc.body.style.border := '0px solid';
  4466. Doc.body.style.margin := '2px';
  4467. Doc.body.style.fontFamily := '宋体';
  4468. Doc.body.style.fontSize := '9pt';
  4469. Doc.body.style.backgroundImage := 'url(' + FBackGroundImage + ')';
  4470. end;
  4471. //------------------------------------------------------------------------------
  4472. procedure TTalkingForm.WebBrowserBeforeNavigate2(ASender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool);
  4473. begin
  4474. // Dialogs.ShowMessage(IntToStr(Pos(FBaseURL, UpperCase(String(URL)))));
  4475. // Dialogs.ShowMessage(IntToStr(Pos('about:blank', UpperCase(String(URL)))));
  4476. if (Pos(FBaseURL, UpperCase(string(URL))) >= 1) or (Pos('about:blank', string(URL)) >= 1) then
  4477. begin
  4478. URL := Trim(AnsiReplaceText(string(URL), FBaseURL, ''));
  4479. if TFileTransmitAdapter.HandleMessage(Self, URL, Cancel) then
  4480. Exit;
  4481. IEBeforeNavigate2(Self, ASender, pDisp, URL, Flags, TargetFrameName, PostData, Headers, Cancel);
  4482. end
  4483. else
  4484. begin
  4485. if Category = tcNormal then
  4486. begin
  4487. if FileExists(string(URL)) then
  4488. begin
  4489. if FRealICQClient.Connected and FRealICQClient.Logined then
  4490. begin
  4491. SendDropFile(string(URL));
  4492. Cancel := True;
  4493. end;
  4494. end;
  4495. if DirectoryExists(string(URL)) then
  4496. begin
  4497. if FRealICQClient.Connected and FRealICQClient.Logined then
  4498. begin
  4499. OpenSendFolderForm(string(URL));
  4500. Cancel := True;
  4501. end;
  4502. end;
  4503. end
  4504. else
  4505. begin
  4506. if FileExists(string(URL)) then
  4507. begin
  4508. if FRealICQClient.Connected and FRealICQClient.Logined then
  4509. begin
  4510. SendDropFile(string(URL));
  4511. Cancel := True;
  4512. end;
  4513. end;
  4514. end;
  4515. end;
  4516. end;
  4517. //------------------------------------------------------------------------------
  4518. function TTalkingForm.GetCanWriteMessage: Boolean;
  4519. begin
  4520. Result := not pnlForHideWebBrowser.Visible;
  4521. end;
  4522. //------------------------------------------------------------------------------
  4523. procedure TTalkingForm.WebBrowserDocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
  4524. begin
  4525. try
  4526. Log('WebBrowserDocumentComplete', 'WebBrowser');
  4527. WebBrowser.OnDocumentComplete := nil;
  4528. try
  4529. SetDomStyle(WebBrowser.Document as IHtmlDocument2);
  4530. finally
  4531. pnlForHideWebBrowser.Visible := False;
  4532. end;
  4533. except
  4534. end;
  4535. end;
  4536. //------------------------------------------------------------------------------
  4537. procedure TTalkingForm.WebBrowserForAdvertisementBeforeNavigate2(ASender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool);
  4538. begin
  4539. if not AnsiSameText(URL, FRealICQClient.TalkingFormAdversement.URL) then
  4540. begin
  4541. ShellExecute(handle, 'open', PChar(MainForm.GetDefaultBrowser), PChar('"' + string(URL) + '"'), nil, SW_SHOWNORMAL);
  4542. Cancel := True;
  4543. end;
  4544. end;
  4545. //------------------------------------------------------------------------------
  4546. procedure TTalkingForm.WebBrowserForAdvertisementDocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
  4547. begin
  4548. try
  4549. WebBrowserForAdvertisement.OnDocumentComplete := nil;
  4550. MainForm.SetDomStyle(WebBrowserForAdvertisement.Document as IHtmlDocument2);
  4551. except
  4552. end;
  4553. Application.ProcessMessages;
  4554. pnlForHideWebBrowserAdvertisement.Visible := False;
  4555. pnlAdvertisement.Width := FRealICQClient.TalkingFormAdversement.Width;
  4556. Constraints.MinWidth := 288 + pnlAdvertisement.Width;
  4557. ClearMemory;
  4558. end;
  4559. procedure TTalkingForm.WebBrowserForTeamDiskBeforeNavigate2(ASender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool);
  4560. begin
  4561. if FileExists(string(URL)) then
  4562. TTeamShareAdapter.UploadFile(TeamID, string(URL), Self, Self.FRealICQClient, False);
  4563. end;
  4564. procedure TTalkingForm.WebBrowserForTeamDiskoldBeforeNavigate2(ASender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool);
  4565. var
  4566. strMissionID, strFileName, js: string;
  4567. begin
  4568. if FileExists(string(URL)) then
  4569. begin
  4570. if FRealICQClient.Connected and Self.FRealICQClient.Logined then
  4571. begin
  4572. try
  4573. strMissionID := '1|' + IntToStr(GetTickCount) + ',' + TeamID + ',' + MainForm.RealICQClient.LoginName;
  4574. strFileName := string(URL);
  4575. js := format('ReadyToUpload("%s", "%s", %d)', [strMissionID, ReplaceStr(strFileName, '\', '\\'), GetTheFileSize(strFileName)]);
  4576. try
  4577. WebBrowserForTeamDisk.OleObject.Document.parentWindow.execScript(js, 'JavaScript');
  4578. except
  4579. end;
  4580. except
  4581. on E: Exception do
  4582. MessageBox(0, PChar(E.Message), '上传文件出错! ', MB_ICONINFORMATION);
  4583. end;
  4584. end;
  4585. Cancel := True;
  4586. end;
  4587. end;
  4588. procedure TTalkingForm.WebBrowserForTeamDiskoldDocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
  4589. begin
  4590. pnlForHideTeamDisk.Visible := False;
  4591. WebBrowserForTeamDisk.OnDocumentComplete := nil;
  4592. end;
  4593. //------------------------------------------------------------------------------
  4594. procedure TTalkingForm.OnKeyDown(var Msg: TMessage);
  4595. begin
  4596. if RemoteControlForm = nil then
  4597. Exit;
  4598. if RemoteControlForm.Parent <> pnlRC then
  4599. Exit;
  4600. if FRemoteControlMission <> nil then
  4601. FRemoteControlMission.SendMessage(Msg);
  4602. end;
  4603. //------------------------------------------------------------------------------
  4604. procedure TTalkingForm.OnKeyUp(var Msg: TMessage);
  4605. begin
  4606. if RemoteControlForm = nil then
  4607. Exit;
  4608. if RemoteControlForm.Parent <> pnlRC then
  4609. Exit;
  4610. if FRemoteControlMission <> nil then
  4611. FRemoteControlMission.SendMessage(Msg);
  4612. end;
  4613. //------------------------------------------------------------------------------
  4614. procedure TTalkingForm.CMWininichange(var Message: TWMWinIniChange);
  4615. begin
  4616. ChangeUIColor(MainForm.UIMainColor);
  4617. DisableAlign;
  4618. try
  4619. PostMessage(Handle, WM_SIZE, 0, 0);
  4620. finally
  4621. EnableAlign;
  4622. end;
  4623. end;
  4624. //------------------------------------------------------------------------------
  4625. procedure TTalkingForm.CreateParams(var Params: TCreateParams);
  4626. begin
  4627. inherited;
  4628. with Params do
  4629. begin
  4630. Params.WndParent := 0;
  4631. end;
  4632. end;
  4633. //------------------------------------------------------------------------------
  4634. procedure TTalkingForm.SendDropFile(AFileName: string);
  4635. var
  4636. FRealICQUser: TRealICQUser;
  4637. AFileStream: TFileStream;
  4638. AModalResult: Integer;
  4639. UpUrl: string;
  4640. AFileSize: int64;
  4641. AError: string;
  4642. begin
  4643. if not FRealICQClient.Connected or not FRealICQClient.Logined then
  4644. Exit;
  4645. //Success('1', 'TTalkingForm.SendDropFile');
  4646. try
  4647. if FCategory = tcTeam then
  4648. begin
  4649. if DirectoryExists(AFileName) then
  4650. begin
  4651. MessageBox(0, PChar('不支持直接上传目录,请压缩后上传! '), '提示', MB_ICONINFORMATION);
  4652. Exit;
  4653. end;
  4654. if FileExists(AFileName) then
  4655. TFileTransmitAdapter.SendToTeam(Self, tdSender, AFileName, 1, FTeamID, '', Now, FRealICQClient);
  4656. Exit;
  4657. end;
  4658. FRealICQUser := TUsersService.GetUsersService.GetOrRequestUser(Receiver);
  4659. if not Assigned(FRealICQUser) then
  4660. Exit;
  4661. //Success('2', 'TTalkingForm.SendDropFile');
  4662. if not (FRealICQUser.LoginState = stOffline) and not (FRealICQUser.LoginState = stHidden) then
  4663. begin
  4664. SendFile(AFileName);
  4665. Exit;
  4666. end;
  4667. //Success('3', 'TTalkingForm.SendDropFile');
  4668. if TLimitCondition.GreaterThanOfflineFileMaxSize(AFileName, AError, FRealICQClient) then
  4669. begin
  4670. MessageBox(0, PChar(AError), '提示', MB_ICONINFORMATION);
  4671. PostMessage(Handle, WM_SETFOCUS, 0, 0);
  4672. Exit;
  4673. end;
  4674. //Success('3', 'TTalkingForm.SendDropFile');
  4675. TFileTransmitAdapter.Send(Self, tdSender, AFileName, 0, FReceiver, '', Now, FRealICQClient);
  4676. except
  4677. on E: Exception do
  4678. Error(E.Message, 'TTalkingForm.SendDropFile(' + AFileName + ')');
  4679. end;
  4680. end;
  4681. procedure TTalkingForm.RichEdInputerDropFiles(Sender: TObject; AFiles: TStringList);
  4682. var
  4683. iLoop: Integer;
  4684. iTimes: Integer;
  4685. UpUrl: string;
  4686. AFileSize: int64;
  4687. begin
  4688. iTimes := 0;
  4689. for iLoop := 0 to AFiles.Count - 1 do
  4690. begin
  4691. try
  4692. if FileExists(AFiles[iLoop]) and (RichEdInputer.InsertDIB) then
  4693. begin
  4694. if (AFiles.Count = 1) then
  4695. begin
  4696. AddImageToInput(AFiles[iLoop], RichEdInputer);
  4697. Break;
  4698. end;
  4699. end;
  4700. except
  4701. on E: Exception do
  4702. Error(E.Message, 'TTalkingForm.RichEdInputerDropFiles-RichEdInputer.InsertDIB');
  4703. end;
  4704. try
  4705. if FCategory = tcTeam then
  4706. begin
  4707. if TGroupConfig.GetConfig.GroupVersion = gvIntegration then
  4708. begin
  4709. if not (MessageBox(0, '确定要群发该文件吗? ', '提示', MB_OKCANCEL + MB_ICONQUESTION) = ID_OK) then
  4710. Exit;
  4711. TFileTransmitAdapter.Send(Self, tdSender, AFiles[iLoop], 1, FTeamID, '', Now, FRealICQClient);
  4712. end
  4713. else
  4714. TTeamShareAdapter.UploadFile(TeamID, AFiles[iLoop], Self, FRealICQClient, True);
  4715. end
  4716. else
  4717. begin
  4718. if DirectoryExists(AFiles[iLoop]) and MainForm.RealICQClient.Connected and MainForm.RealICQClient.Logined then
  4719. begin
  4720. OpenSendFolderForm(AFiles[iLoop]);
  4721. Exit;
  4722. end;
  4723. if (iTimes < 10) and MainForm.RealICQClient.Connected and MainForm.RealICQClient.Logined then
  4724. begin
  4725. SendDropFile(AFiles[iLoop]);
  4726. Inc(iTimes);
  4727. end;
  4728. end;
  4729. except
  4730. on E: Exception do
  4731. Error(E.Message, 'TTalkingForm.RichEdInputerDropFiles');
  4732. end;
  4733. end;
  4734. end;
  4735. procedure TTalkingForm.RichEdInputerInsertObject(Sender: TObject);
  4736. begin
  4737. TimerForCheckPastedContent.Enabled := False;
  4738. TimerForCheckPastedContent.Tag := 0;
  4739. TimerForCheckPastedContent.Enabled := True;
  4740. end;
  4741. { TODO -olqq -c : 群共享文件发送完成后,通知群成员 2014/12/18 14:45:09 }
  4742. procedure TTalkingForm.DownFileComplete(ASource, ADest, ARemark: string; AStatus: boolean; AFileSize: Integer; IsNeedNotify: Boolean);
  4743. var
  4744. MessageStr: string;
  4745. FaceFileName: TStringList;
  4746. IsAdmin: string;
  4747. begin
  4748. if not AStatus then
  4749. begin
  4750. spbUploadTeamFileProcess.Visible := False;
  4751. Messagebox(handle, PAnsiChar(ARemark), '提示', MB_OK);
  4752. Exit;
  4753. end;
  4754. if IsNeedNotify then
  4755. TTeamShareAdapter.UploadedNotifyToMembers(FRealICQClient.LoginName, TTeamsAdapter.GetTeam(FTeamID).TeamMembers, ARemark, ExtractFileName(ADest), AFileSize, FRealICQClient);
  4756. if TTeamsAdapter.IsTeamManager(FTeamID, MainForm.RealICQClient.LoginName) then
  4757. IsAdmin := '1'
  4758. else
  4759. IsAdmin := '0';
  4760. spbUploadTeamFileProcess.Visible := False;
  4761. spbUploadTeamFileProcess.Caption := '%0';
  4762. FaceFileName := TStringList.Create;
  4763. try
  4764. MessageStr := '<TeamShare>' + ExtractFileName(ADest) + '</TeamShare>';
  4765. TTeamsAdapter.SendTeamMessage(FTeamID, MainForm.realICQClient.LoginName, MessageStr, RichEdInputer.Font, FaceFileName, '');
  4766. finally
  4767. FaceFileName.Free;
  4768. end;
  4769. WebBrowserForTeamDisk.Navigate(TTeamShareAdapter.GetShareURL(TeamID, FRealICQClient.LoginName, FRealICQClient.Me.DisplayName, IsAdmin));
  4770. end;
  4771. procedure TTalkingForm.DropFiles(var Message: TMessage);
  4772. var
  4773. i: Integer;
  4774. p: array[0..254] of Char;
  4775. ALocalFile, AFileExt, ALocalPath, ALocalFilePath: string;
  4776. iTimes: Integer;
  4777. UpUrl: string;
  4778. AFileSize: Int64;
  4779. begin
  4780. iTimes := 0;
  4781. try
  4782. i := DragQueryFile(Message.wParam, $FFFFFFFF, nil, 0);
  4783. for i := 0 to i - 1 do
  4784. begin
  4785. DragQueryFile(Message.wParam, i, p, 255);
  4786. if FileExists(StrPas(p)) then
  4787. begin
  4788. ALocalFile := StrPas(p);
  4789. //Success(ALocalFile, 'TTalkingForm.DropFiles');
  4790. AFileExt := ExtractFileExt(ALocalFile);
  4791. if AnsiSameText(AFileExt, '.gif') or AnsiSameText(AFileExt, '.jpg') or AnsiSameText(AFileExt, '.bmp') or AnsiSameText(AFileExt, '.png') or AnsiSameText(AFileExt, '.jpeg') then
  4792. begin
  4793. ALocalPath := ExtractFilePath(Application.ExeName);
  4794. ALocalFilePath := ExtractFilePath(ALocalFile);
  4795. ALocalFilePath := Copy(ALocalFilePath, 1, Length(ALocalPath));
  4796. if AnsiSameText(ALocalPath, ALocalFilePath) then
  4797. begin
  4798. Continue;
  4799. end;
  4800. end;
  4801. if FCategory = tcTeam then
  4802. begin
  4803. TTeamShareAdapter.UploadFile(TeamID, StrPas(p), Self, FRealICQClient, False);
  4804. end
  4805. else if FCategory = tcNormal then
  4806. begin
  4807. if DirectoryExists(StrPas(p)) then
  4808. begin
  4809. if MainForm.RealICQClient.Connected and MainForm.RealICQClient.Logined then
  4810. OpenSendFolderForm(StrPas(p));
  4811. end;
  4812. end;
  4813. end;
  4814. end;
  4815. except
  4816. on E: Exception do
  4817. begin
  4818. Error(E.Message, 'TTalkingForm.DropFiles');
  4819. DragFinish(Message.wParam);
  4820. Message.Result := 1;
  4821. end;
  4822. end;
  4823. DragFinish(Message.wParam);
  4824. Message.Result := 1;
  4825. end;
  4826. //------------------------------------------------------------------------------
  4827. procedure TTalkingForm.ShowInputting(AInputting: Boolean);
  4828. var
  4829. UserName: string;
  4830. RealICQUser: TRealICQUser;
  4831. begin
  4832. RealICQUser := TUsersService.GetUsersService.GetOrRequestUser(Receiver);
  4833. if not Assigned(RealICQUser) then
  4834. UserName := FReceiver
  4835. else if RealICQUser.DisplayName = '' then
  4836. UserName := RealICQUser.LoginName
  4837. else
  4838. UserName := RealICQUser.DisplayName;
  4839. if AInputting then
  4840. begin
  4841. lblState.Caption := UserName + ' 正在输入消息...';
  4842. Caption := UserName + ' 正在输入';
  4843. ClearInputtingMessageTimer.Enabled := False;
  4844. ClearInputtingMessageTimer.Enabled := True;
  4845. end
  4846. else
  4847. begin
  4848. lblState.Caption := '';
  4849. Caption := UserName;
  4850. ClearInputtingMessageTimer.Enabled := False;
  4851. end;
  4852. PostMessage(Handle, WM_SIZE, 0, 0);
  4853. end;
  4854. //------------------------------------------------------------------------------
  4855. procedure TTalkingForm.P2PTypeChanged(Sender: TObject);
  4856. var
  4857. RealICQPtoPBox: TRealICQPtoPBox;
  4858. begin
  4859. if not (Sender is TRealICQPtoPBox) then
  4860. Exit;
  4861. try
  4862. RealICQPtoPBox := Sender as TRealICQPtoPBox;
  4863. case RealICQPtoPBox.P2PType of
  4864. ppTransByServerTCP:
  4865. lblState.Caption := '连接方式: 服务器中转';
  4866. ppPtoPByTCPServer:
  4867. lblState.Caption := '连接方式: TCP直连(' + RealICQPtoPBox.P2PAddress + ':' + IntToStr(RealICQPtoPBox.P2PPort) + ' -> 本机)';
  4868. ppPtoPByTCPClient:
  4869. lblState.Caption := '连接方式: TCP直连(本机 -> ' + RealICQPtoPBox.P2PAddress + ':' + IntToStr(RealICQPtoPBox.P2PPort) + ')';
  4870. ppPtoPByUDP:
  4871. lblState.Caption := '连接方式: UDP直连(' + RealICQPtoPBox.P2PAddress + ':' + IntToStr(RealICQPtoPBox.P2PPort) + ')';
  4872. end;
  4873. except
  4874. end;
  4875. end;
  4876. procedure TTalkingForm.OpenSendFolderForm(FolderName: string);
  4877. var
  4878. SendFolderForm: TSendFolderForm;
  4879. RealICQUser: TRealICQUser;
  4880. iLoop: Integer;
  4881. ReceiverName: string;
  4882. begin
  4883. if not MainForm.RealICQClient.Connected or not MainForm.RealICQClient.Logined then
  4884. Exit;
  4885. SendFolderForm := TSendFolderForm.Create(MainForm);
  4886. if Category = tcNormal then
  4887. begin
  4888. if AnsiSameText(Receiver, MainForm.RealICQClient.LoginName) then
  4889. Exit;
  4890. RealICQUser := TUsersService.GetUsersService.GetOrRequestUser(Receiver);
  4891. if not Assigned(RealICQUser) then
  4892. Exit;
  4893. with SendFolderForm.lvUsers.Items.Add do
  4894. begin
  4895. Caption := RealICQUser.LoginName;
  4896. SubItems.Add(RealICQUser.DisplayName);
  4897. end;
  4898. end
  4899. else
  4900. begin
  4901. Exit;
  4902. end;
  4903. SendFolderForm.Show;
  4904. // SendFolderForm.BringToFront;
  4905. if DirectoryExists(FolderName) then
  4906. begin
  4907. SendFolderForm.AddFolderMission(FolderName);
  4908. end;
  4909. end;
  4910. //------------------------------------------------------------------------------
  4911. procedure TTalkingForm.spbSendFolderClick(Sender: TObject);
  4912. begin
  4913. OpenSendFolderForm('');
  4914. end;
  4915. //------------------------------------------------------------------------------
  4916. procedure TTalkingForm.spbAboutClick(Sender: TObject);
  4917. begin
  4918. MainForm.actAbout.Execute;
  4919. end;
  4920. procedure TTalkingForm.spbBackgroundClick(Sender: TObject);
  4921. var
  4922. Point: TPoint;
  4923. begin
  4924. if SelBackForm = nil then
  4925. begin
  4926. SelBackForm := TSelBackForm.Create(MainForm);
  4927. end;
  4928. SelBackForm.ParentForm := Self;
  4929. Point.X := 0;
  4930. Point.Y := (Sender as TRealICQSpeedButton).Height;
  4931. Point := (Sender as TRealICQSpeedButton).ClientToScreen(Point);
  4932. Point.X := Point.X - (SelBackForm.Width div 2) + (Sender as TRealICQSpeedButton).Width div 2;
  4933. if Point.X <= 0 then
  4934. SelBackForm.Left := 1
  4935. else if Screen.WorkAreaWidth - Point.X >= SelBackForm.Width then
  4936. SelBackForm.Left := Point.X
  4937. else
  4938. SelBackForm.Left := Screen.WorkAreaWidth - SelBackForm.Width - 1;
  4939. if (Point.Y - (Sender as TRealICQSpeedButton).Height > SelBackForm.Height) then
  4940. SelBackForm.Top := Point.Y - SelBackForm.Height - (Sender as TRealICQSpeedButton).Height
  4941. else
  4942. SelBackForm.Top := Point.Y;
  4943. SelBackForm.Show;
  4944. end;
  4945. procedure ShowCopyScreenForm(ATalkingForm: TTalkingForm);
  4946. begin
  4947. if Assigned(CopyScreenForm) then
  4948. Exit;
  4949. if ATalkingForm <> nil then
  4950. CopyScreenForm := TCopyScreenForm.Create(ATalkingForm)
  4951. else
  4952. CopyScreenForm := TCopyScreenForm.Create(MainForm);
  4953. try
  4954. CopyScreenForm.TalkingForm := ATalkingForm;
  4955. CopyScreenForm.WindowState := wsMaximized;
  4956. CopyScreenForm.ShowModal; //显示窗口
  4957. finally
  4958. FreeAndNil(CopyScreenForm);
  4959. end;
  4960. end;
  4961. //------------------------------------------------------------------------------
  4962. procedure TTalkingForm.spbFaceClick(Sender: TObject);
  4963. var
  4964. Point: TPoint;
  4965. begin
  4966. if SelFaceForm = nil then
  4967. begin
  4968. SelFaceForm := TSelFaceForm.Create(MainForm);
  4969. end;
  4970. SelFaceForm.TalkingForm := Self;
  4971. Point.X := 0;
  4972. Point.Y := (Sender as TRealICQSpeedButton).Height;
  4973. Point := (Sender as TRealICQSpeedButton).ClientToScreen(Point);
  4974. Point.X := Point.X - (SelFaceForm.Width div 2) + (Sender as TRealICQSpeedButton).Width div 2;
  4975. if Point.X <= 0 then
  4976. SelFaceForm.Left := 1
  4977. else if Screen.WorkAreaWidth - Point.X >= SelFaceForm.Width then
  4978. SelFaceForm.Left := Point.X
  4979. else
  4980. SelFaceForm.Left := Screen.WorkAreaWidth - SelFaceForm.Width - 1;
  4981. if (Point.Y - (Sender as TRealICQSpeedButton).Height > SelFaceForm.Height) then
  4982. SelFaceForm.Top := Point.Y - SelFaceForm.Height - (Sender as TRealICQSpeedButton).Height
  4983. else
  4984. SelFaceForm.Top := Point.Y;
  4985. SelFaceForm.Show;
  4986. end;
  4987. //------------------------------------------------------------------------------
  4988. procedure TTalkingForm.spbFontClick(Sender: TObject);
  4989. begin
  4990. EditFontSet.Execute;
  4991. end;
  4992. //------------------------------------------------------------------------------
  4993. procedure TTalkingForm.SpbForMyInfoClick(Sender: TObject);
  4994. var
  4995. Point: TPoint;
  4996. begin
  4997. Point.X := 0;
  4998. Point.Y := (Sender as TRealICQSpeedButton).Height + 1;
  4999. Point := (Sender as TRealICQSpeedButton).ClientToScreen(Point);
  5000. if FRealICQClient = MainForm.RealICQClient then
  5001. ppMyOptions.Popup(Point.X, Point.Y)
  5002. else
  5003. MainForm.ppChangeCustomerState.Popup(Point.X, Point.Y);
  5004. end;
  5005. //------------------------------------------------------------------------------
  5006. procedure TTalkingForm.SpbForYourInfoClick(Sender: TObject);
  5007. var
  5008. Point: TPoint;
  5009. begin
  5010. Point.X := 0;
  5011. Point.Y := (Sender as TRealICQSpeedButton).Height + 1;
  5012. Point := (Sender as TRealICQSpeedButton).ClientToScreen(Point);
  5013. ppYourOptions.Popup(Point.X, Point.Y);
  5014. end;
  5015. //------------------------------------------------------------------------------
  5016. procedure TTalkingForm.ShakeWindow;
  5017. var
  5018. iLoop: Integer;
  5019. OldLeft: Integer;
  5020. begin
  5021. PlayEventSound(ExtractFilePath(Application.ExeName) + '\' + ShakeWindowSound);
  5022. OldLeft := Left;
  5023. try
  5024. for iLoop := 12 downto 0 do
  5025. begin
  5026. if iLoop mod 2 = 0 then
  5027. Left := OldLeft + iLoop * 1
  5028. else
  5029. Left := OldLeft - iLoop * 1;
  5030. Sleep(10);
  5031. Application.ProcessMessages;
  5032. Sleep(10);
  5033. end;
  5034. finally
  5035. Left := OldLeft;
  5036. end;
  5037. end;
  5038. //------------------------------------------------------------------------------
  5039. procedure TTalkingForm.spbShakeWindowClick(Sender: TObject);
  5040. var
  5041. FRealICQUser: TRealICQUser;
  5042. begin
  5043. if GetTickCount - FLastSendShakeWindowTicket < 150000 then
  5044. begin
  5045. MessageBox(Handle, '请勿频繁发送窗口抖动! ', '提示', MB_ICONINFORMATION);
  5046. Exit;
  5047. end;
  5048. FRealICQUser := TUsersService.GetUsersService.GetOrRequestUser(Receiver);
  5049. if Assigned(FRealICQUser) then
  5050. begin
  5051. if (FRealICQUser.LoginState = stOffline) or (FRealICQUser.LoginState = stHidden) then
  5052. begin
  5053. MessageBox(Handle, '对方离线或隐身,无法接收窗口抖动! ', '提示', MB_ICONINFORMATION);
  5054. Exit;
  5055. end;
  5056. FLastSendShakeWindowTicket := GetTickCount;
  5057. ShowShakeWindow(True);
  5058. (FRealICQUser.RealICQPtoPBox as TRealICQPtoPBox).SendShakeWindow;
  5059. end;
  5060. end;
  5061. //------------------------------------------------------------------------------
  5062. procedure TTalkingForm.SetBrowserBg(BackImage: string);
  5063. begin
  5064. FBackGroundImage := BackImage;
  5065. try
  5066. SetDomStyle(WebBrowser.Document as IHtmlDocument2);
  5067. except
  5068. end;
  5069. SaveBackGround;
  5070. end;
  5071. //------------------------------------------------------------------------------
  5072. procedure TTalkingForm.ShowShakeWindow(AIsSource: Boolean);
  5073. var
  5074. HTML: string;
  5075. UserName: string;
  5076. RealICQUser: TRealICQUser;
  5077. begin
  5078. RealICQUser := TUsersService.GetUsersService.GetOrRequestUser(FReceiver);
  5079. if not Assigned(RealICQUser) then
  5080. UserName := FReceiver
  5081. else if RealICQUser.DisplayName = '' then
  5082. UserName := RealICQUser.LoginName
  5083. else
  5084. UserName := RealICQUser.DisplayName;
  5085. HTML := '<table width="100%" style="font-size:9pt;border:0px; padding:2px; color:#0000ff; margin-top:2px;margin-bottom:5px;"><tr><td>';
  5086. HTML := HTML + '<img src="' + ExtractFilePath(Application.ExeName) + InfomationPicture + '" align="absBottom"> ';
  5087. HTML := HTML + '<span>';
  5088. if AIsSource then
  5089. HTML := HTML + '您抖动了 ' + FilterHtmlCode(UserName, MainForm.AllowURL) + ' 的对话窗口。'
  5090. else
  5091. HTML := HTML + FilterHtmlCode(UserName, MainForm.AllowURL) + ' 抖动了您的对话窗口。';
  5092. HTML := HTML + '</span>';
  5093. HTML := HTML + '</td></tr></table>';
  5094. InsertHTML(WebBrowser, HTML);
  5095. Application.ProcessMessages;
  5096. ShakeWindow;
  5097. Sleep(450);
  5098. ShakeWindow;
  5099. end;
  5100. //------------------------------------------------------------------------------
  5101. procedure TTalkingForm.spbSpkClick(Sender: TObject);
  5102. var
  5103. Point: TPoint;
  5104. begin
  5105. Point.X := 0;
  5106. Point.Y := (Sender as TRealICQSpeedButton).Height + 1;
  5107. Point := (Sender as TRealICQSpeedButton).ClientToScreen(Point);
  5108. miOpenMic.Visible := False;
  5109. miCloseMic.Visible := False;
  5110. miOpenSpeak.Visible := True;
  5111. miCloseSpeak.Visible := True;
  5112. miOpenSpeak.Enabled := not TAudioTransmitter.GetRecvAudio;
  5113. miCloseSpeak.Enabled := TAudioTransmitter.GetRecvAudio;
  5114. ppAudioSet.Popup(Point.X, Point.Y);
  5115. end;
  5116. procedure TTalkingForm.spbTeamNetWorkDiskClick(Sender: TObject);
  5117. var
  5118. STR: string;
  5119. IsAdmin: string;
  5120. begin
  5121. if TTeamsAdapter.IsTeamManager(FTeamID, MainForm.RealICQClient.LoginName) then
  5122. IsAdmin := '1'
  5123. else
  5124. IsAdmin := '0';
  5125. LockWindowUpdate(GetDesktopWindow);
  5126. try
  5127. Width := 800;
  5128. PnlTeamCallBoard.Visible := False;
  5129. rndTeamMembers.Visible := False;
  5130. pnlUserInformation.Width := 450;
  5131. pnlTeamWebDisk.Visible := True;
  5132. WebBrowserForTeamDisk.Navigate(TTeamShareAdapter.GetShareURL(TeamID, FRealICQClient.LoginName, FRealICQClient.Me.DisplayName, IsAdmin));
  5133. //WebBrowserForTeamDisk.OnDocumentComplete := WebBrowserForTeamDiskDocumentComplete;
  5134. //STR := 'http://192.168.16.202:8083/home/index?loginname='+MainForm.RealICQClient.LoginName+'&teamid='+TeamID+'&displayname='+HttpEncode(Ansitoutf8(MainForm.RealICQClient.Me.DisplayName)+'&isAdmin='+IsAdmin);
  5135. // STR := MainForm.RealICQClient.HeadImageURL + '/share/Default.aspx?TeamID=' + TeamID + '&LoginName=' + MainForm.RealICQClient.LoginName + '&password=' + MD5En(MainForm.RealICQClient.Password) + '&tick=' + IntToStr(GetTickCount);
  5136. // WebBrowserForTeamDisk.Navigate(MainForm.RealICQClient.HeadImageURL + '/share/Default.aspx?TeamID=' + TeamID + '&LoginName=' + MainForm.RealICQClient.LoginName + '&password=' + MD5En(MainForm.RealICQClient.Password) + '&tick=' + IntToStr(GetTickCount));
  5137. //WebBrowserForTeamDisk.Navigate('http://172.28.1.76/share/Default.aspx?TeamID=' + TeamID + '&LoginName=' + MainForm.RealICQClient.LoginName + '&password=' + MD5En(MainForm.RealICQClient.Password) + '&tick=' + IntToStr(GetTickCount));
  5138. finally
  5139. LockWindowUpdate(0);
  5140. end;
  5141. end;
  5142. procedure TTalkingForm.spbCloseTeamWebDiskClick(Sender: TObject);
  5143. var
  5144. iLoop: Integer;
  5145. AFileMission: TUploadOrDownloadFileMission;
  5146. AFinded: Boolean;
  5147. begin
  5148. AFinded := False;
  5149. if FUpDownFileMissions.Count > 0 then
  5150. begin
  5151. {for iLoop := UpDownFileMissions.Count - 1 downto 0 do
  5152. begin
  5153. AFileMission := UpDownFileMissions[iLoop];
  5154. if AFileMission.Category = 3 then
  5155. begin
  5156. AFinded := True;
  5157. Break;
  5158. end;
  5159. end;
  5160. if MessageBox(Handle, '有文件正在上传,确定要关闭吗?',
  5161. '提示', MB_ICONQUESTION or MB_OKCANCEL) <> ID_OK then
  5162. begin
  5163. Exit;
  5164. end; }
  5165. for iLoop := UpDownFileMissions.Count - 1 downto 0 do
  5166. begin
  5167. AFileMission := UpDownFileMissions[iLoop];
  5168. if AFileMission.Category = 3 then
  5169. begin
  5170. try
  5171. try
  5172. AFileMission.Stop;
  5173. finally
  5174. FreeAndNil(AFileMission);
  5175. end;
  5176. except
  5177. end;
  5178. end;
  5179. end;
  5180. end;
  5181. LockWindowUpdate(GetDesktopWindow);
  5182. try
  5183. PnlTeamCallBoard.Visible := True;
  5184. pnlTeamMembers.Visible := True;
  5185. rndTeamMembers.Visible := True;
  5186. pnlUserInformation.Width := 200;
  5187. pnlTeamWebDisk.Visible := False;
  5188. WindowState := wsNormal;
  5189. Width := 580;
  5190. finally
  5191. LockWindowUpdate(0);
  5192. end;
  5193. end;
  5194. procedure TTalkingForm.SendOfflineFile(AFileName: string);
  5195. var
  5196. //FRealICQUser: TRealICQUser;
  5197. AFileStream: TFileStream;
  5198. ALoginName: string;
  5199. RealICQUser: TRealICQUser;
  5200. ItemIndex: Integer;
  5201. RealICQContacterListItem: TRealICQContacterListItem;
  5202. AError: string;
  5203. begin
  5204. try
  5205. if (TLimitCondition.GreaterThanOfflineFileMaxSize(AFileName, AError, FRealICQClient)) then
  5206. raise Exception.Create(AError);
  5207. if FCategory = tcNormal then
  5208. begin
  5209. if not (MessageBox(Handle, PChar('确定要发送“' + AFileName + '”吗? '), '提示', MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2) = IDYES) then
  5210. Exit;
  5211. TFileTransmitAdapter.Send(Self, tdSender, AFileName, 0, FReceiver, '', Now, FRealICQClient);
  5212. {$region '更新“最近联系人列表”中的数据'}
  5213. ALoginName := FReceiver;
  5214. RealICQUser := TUsersService.GetUsersService.GetOrRequestUser(ALoginName);
  5215. if RealICQUser <> nil then
  5216. begin
  5217. ItemIndex := MainForm.ListViewLatests.Items.IndexOf(ALoginName);
  5218. if ItemIndex = -1 then
  5219. ItemIndex := MainForm.ListViewLatests.Items.Add(ALoginName);
  5220. RealICQContacterListItem := MainForm.ListViewLatests.Items.Objects[ItemIndex] as TRealICQContacterListItem;
  5221. MainForm.BindUserDataToItem(RealICQContacterListItem, RealICQUser);
  5222. RealICQContacterListItem.MoveToTop;
  5223. end;
  5224. {$endregion}
  5225. end
  5226. else
  5227. begin
  5228. TFileTransmitAdapter.SendToTeam(Self, tdSender, AFileName, 1, FTeamID, '', Now, FRealICQClient);
  5229. end;
  5230. except
  5231. on E: Exception do
  5232. MessageBox(0, PChar(E.Message), '发送文件出错', MB_ICONINFORMATION);
  5233. end;
  5234. end;
  5235. //------------------------------------------------------------------------------
  5236. procedure TTalkingForm.spbUploadFileClick(Sender: TObject);
  5237. var
  5238. //FRealICQUser: TRealICQUser;
  5239. AFileStream: TFileStream;
  5240. ALoginName, AFileName: string;
  5241. RealICQUser: TRealICQUser;
  5242. ItemIndex: Integer;
  5243. RealICQContacterListItem: TRealICQContacterListItem;
  5244. begin
  5245. if not FRealICQClient.Connected or not FRealICQClient.Logined then
  5246. Exit;
  5247. OpenDialog.Title := '传输离线文件';
  5248. if OpenDialog.Execute then
  5249. begin
  5250. SendOfflineFile(OpenDialog.FileName);
  5251. end;
  5252. end;
  5253. //------------------------------------------------------------------------------
  5254. //procedure TTalkingForm.spbHistroyMessageClick(Sender: TObject);
  5255. //begin
  5256. // if FCategory = tcTeam then
  5257. // begin
  5258. // MainForm.actMsgManagerExecute(nil);
  5259. // Application.ProcessMessages;
  5260. // MessagesManagerForm.ShowTeamsMessages(FTeamID);
  5261. // end
  5262. // else
  5263. // if FCategory = tcNormal then
  5264. // begin
  5265. // if FReceiver <> '' then
  5266. // begin
  5267. // MainForm.actMsgManagerExecute(nil);
  5268. // Application.ProcessMessages;
  5269. // MessagesManagerForm.ShowUsersMessages(FReceiver);
  5270. // end;
  5271. // end;
  5272. //end;
  5273. //------------------------------------------------------------------------------
  5274. procedure TTalkingForm.spbHistroyMessageClick(Sender: TObject);
  5275. var
  5276. Point1, Point2: TPoint;
  5277. begin
  5278. point1 := Point(0, 0);
  5279. point2 := Point(0, 0);
  5280. Point1 := (Sender as TRealICQSpeedButton).ClientToScreen(Point1);
  5281. GetCursorPos(point2);
  5282. if (point2.X - point1.X) <= 17 then
  5283. begin
  5284. if FCategory = tcTeam then
  5285. begin
  5286. MainForm.actMsgManagerExecute(nil);
  5287. Application.ProcessMessages;
  5288. MessagesManagerForm.ShowTeamsMessages(FTeamID);
  5289. end
  5290. else if FCategory = tcNormal then
  5291. begin
  5292. if FReceiver <> '' then
  5293. begin
  5294. MainForm.actMsgManagerExecute(nil);
  5295. Application.ProcessMessages;
  5296. MessagesManagerForm.ShowUsersMessages(FReceiver);
  5297. end
  5298. end
  5299. end
  5300. else
  5301. begin
  5302. Point1.X := 0;
  5303. Point1.Y := (Sender as TRealICQSpeedButton).Height + 1;
  5304. Point1 := (Sender as TRealICQSpeedButton).ClientToScreen(Point1);
  5305. ppForMsg.Popup(Point1.X, Point1.Y);
  5306. end;
  5307. end;
  5308. procedure TTalkingForm.spbMicClick(Sender: TObject);
  5309. var
  5310. Point: TPoint;
  5311. begin
  5312. Point.X := 0;
  5313. Point.Y := (Sender as TRealICQSpeedButton).Height + 1;
  5314. Point := (Sender as TRealICQSpeedButton).ClientToScreen(Point);
  5315. miOpenMic.Visible := True;
  5316. miCloseMic.Visible := True;
  5317. miOpenMic.Enabled := not TAudioTransmitter.GetSendAudio;
  5318. miCloseMic.Enabled := TAudioTransmitter.GetSendAudio;
  5319. miOpenSpeak.Visible := False;
  5320. miCloseSpeak.Visible := False;
  5321. ppAudioSet.Popup(Point.X, Point.Y);
  5322. end;
  5323. procedure TTalkingForm.spbRemoteControlClick(Sender: TObject);
  5324. begin
  5325. if FRemoteControlMission <> nil then
  5326. begin
  5327. MessageBox(Handle, '请先结束已存在的远程协助任务! ', '提示', MB_ICONINFORMATION);
  5328. Exit;
  5329. end;
  5330. FRealICQClient.CreateRemoteControlTransmitter(Receiver);
  5331. end;
  5332. //------------------------------------------------------------------------------
  5333. procedure TTalkingForm.TeamUpFileProgress(ulProgress, ulProgressMax, ulStatusCode: integer; szStatusText: string);
  5334. var
  5335. Completed: Integer;
  5336. begin
  5337. if ulProgressMax = 0 then
  5338. Exit;
  5339. Completed := ulProgress * 100 div ulProgressMax;
  5340. spbUploadTeamFileProcess.Caption := IntToStr(Completed) + '%';
  5341. end;
  5342. procedure TTalkingForm.TimerForCheckPastedContentTimer(Sender: TObject);
  5343. begin
  5344. TimerForCheckPastedContent.Tag := TimerForCheckPastedContent.Tag + 1;
  5345. if TimerForCheckPastedContent.Tag >= 2 then
  5346. TimerForCheckPastedContent.Enabled := False;
  5347. CheckPastedContent(False);
  5348. end;
  5349. procedure TTalkingForm.TimerForGetUserInformationTimer(Sender: TObject);
  5350. var
  5351. FRealICQUser: TRealICQUser;
  5352. begin
  5353. FRealICQUser := TUsersService.GetUsersService.GetOrRequestUser(Receiver);
  5354. if not Assigned(FRealICQUser) then
  5355. Exit;
  5356. TimerForGetUserInformation.Enabled := False;
  5357. if FRealICQUser.DisplayName = '' then
  5358. TUsersService.GetUsersService.GetOrRequestUser(FRealICQUser.LoginName, FRealICQClient);
  5359. if not FRealICQUser.GettedOffliceAutoResponseSet then
  5360. FRealICQClient.GetOffliceAutoResponseSet(FRealICQUser.LoginName);
  5361. end;
  5362. //------------------------------------------------------------------------------
  5363. procedure TTalkingForm.tsMyHeadImageShow(Sender: TObject);
  5364. begin
  5365. if FMinWidthOfYourPanel < pnlUserInformation.Width then
  5366. pnlUserInformation.Width := FMinWidthOfYourPanel;
  5367. if (FMinWidthOfYourPanel <= 114) then
  5368. begin
  5369. pnlUserInformation.Width := 114;
  5370. end;
  5371. FMinWidthOfMyPanel := 114;
  5372. lblMyInfo.Caption := '我的头像';
  5373. pnlMyInfo.Constraints.MinHeight := 146;
  5374. pnlMyInfo.Height := 146;
  5375. rndMyInfo.Top := 0;
  5376. rndMyInfo.Height := 140;
  5377. rndMy.Height := 100;
  5378. end;
  5379. //------------------------------------------------------------------------------
  5380. procedure TTalkingForm.tsMyCardShow(Sender: TObject);
  5381. begin
  5382. if (FMinWidthOfYourPanel <= 200) then
  5383. begin
  5384. pnlUserInformation.Width := 200;
  5385. end;
  5386. FMinWidthOfMyPanel := 200;
  5387. lblMyInfo.Caption := '我的名片';
  5388. pnlMyInfo.Constraints.MinHeight := 174;
  5389. pnlMyInfo.Height := 174;
  5390. rndMyInfo.Top := 0;
  5391. rndMyInfo.Height := 168;
  5392. rndMy.Height := 128;
  5393. end;
  5394. //------------------------------------------------------------------------------
  5395. procedure TTalkingForm.tsMyVideoShow(Sender: TObject);
  5396. begin
  5397. lblMyInfo.Caption := '我的视频';
  5398. if miMyVideoBigSize.Checked then
  5399. begin
  5400. if (FMinWidthOfYourPanel <= 180 + 160) then
  5401. begin
  5402. pnlUserInformation.Width := 180 + 160;
  5403. end;
  5404. FMinWidthOfMyPanel := 180 + 160;
  5405. pnlMyInfo.Constraints.MinHeight := 40 + 6 + 244;
  5406. pnlMyInfo.Height := 40 + 6 + 244;
  5407. rndMyInfo.Top := 0;
  5408. rndMyInfo.Height := 284;
  5409. rndMy.Height := 244;
  5410. imgMyVideo.Width := 320;
  5411. imgMyVideo.Height := 240;
  5412. end
  5413. else if miMyVideoMiddleSize.Checked then
  5414. begin
  5415. if (FMinWidthOfYourPanel <= 180 + 80) then
  5416. begin
  5417. pnlUserInformation.Width := 180 + 80;
  5418. end;
  5419. FMinWidthOfMyPanel := 180 + 80;
  5420. pnlMyInfo.Constraints.MinHeight := 40 + 6 + 184;
  5421. pnlMyInfo.Height := 40 + 6 + 184;
  5422. rndMyInfo.Top := 0;
  5423. rndMyInfo.Height := 224;
  5424. rndMy.Height := 184;
  5425. imgMyVideo.Width := 240;
  5426. imgMyVideo.Height := 180;
  5427. end
  5428. else
  5429. begin
  5430. if (FMinWidthOfYourPanel <= 180) then
  5431. begin
  5432. pnlUserInformation.Width := 180;
  5433. end;
  5434. FMinWidthOfMyPanel := 180;
  5435. pnlMyInfo.Constraints.MinHeight := 40 + 6 + 124;
  5436. pnlMyInfo.Height := 40 + 6 + 124;
  5437. rndMyInfo.Top := 0;
  5438. rndMyInfo.Height := 164;
  5439. rndMy.Height := 124;
  5440. imgMyVideo.Width := 160;
  5441. imgMyVideo.Height := 120;
  5442. end;
  5443. end;
  5444. //------------------------------------------------------------------------------
  5445. procedure TTalkingForm.tsYourHeadImageShow(Sender: TObject);
  5446. begin
  5447. if FMinWidthOfMyPanel < pnlUserInformation.Width then
  5448. pnlUserInformation.Width := FMinWidthOfMyPanel;
  5449. if (FMinWidthOfMyPanel <= 114) then
  5450. begin
  5451. pnlUserInformation.Width := 114;
  5452. end;
  5453. FMinWidthOfYourPanel := 114;
  5454. lblYourInfo.Caption := '他的头像';
  5455. pnlYourInfo.Constraints.MinHeight := 146;
  5456. pnlYourInfo.Height := 146;
  5457. rndYourInfo.Top := 0;
  5458. rndYourInfo.Height := 140;
  5459. rndYour.Height := 100;
  5460. end;
  5461. //------------------------------------------------------------------------------
  5462. procedure TTalkingForm.tsYourCardShow(Sender: TObject);
  5463. begin
  5464. if (FMinWidthOfMyPanel <= 200) then
  5465. begin
  5466. pnlUserInformation.Width := 200;
  5467. end;
  5468. FMinWidthOfYourPanel := 200;
  5469. lblYourInfo.Caption := '他的名片';
  5470. pnlYourInfo.Constraints.MinHeight := 174;
  5471. pnlYourInfo.Height := 174;
  5472. rndYourInfo.Top := 0;
  5473. rndYourInfo.Height := 168;
  5474. rndYour.Height := 128;
  5475. end;
  5476. procedure TTalkingForm.tsYourVideoShow(Sender: TObject);
  5477. begin
  5478. lblMyInfo.Caption := '他的视频';
  5479. if miYourVideoBigSize.Checked then
  5480. begin
  5481. if (FMinWidthOfMyPanel <= 180 + 160) then
  5482. begin
  5483. pnlUserInformation.Width := 180 + 160;
  5484. end;
  5485. FMinWidthOfYourPanel := 180 + 160;
  5486. pnlYourInfo.Constraints.MinHeight := 40 + 6 + 244;
  5487. pnlYourInfo.Height := 40 + 6 + 244;
  5488. rndYourInfo.Top := 0;
  5489. rndYourInfo.Height := 284;
  5490. rndYour.Height := 244;
  5491. imgYourVideo.Width := 320;
  5492. imgYourVideo.Height := 240;
  5493. end
  5494. else if miYourVideoMiddleSize.Checked then
  5495. begin
  5496. if (FMinWidthOfMyPanel <= 180 + 80) then
  5497. begin
  5498. pnlUserInformation.Width := 180 + 80;
  5499. end;
  5500. FMinWidthOfYourPanel := 180 + 80;
  5501. pnlYourInfo.Constraints.MinHeight := 40 + 6 + 184;
  5502. pnlYourInfo.Height := 40 + 6 + 184;
  5503. rndYourInfo.Top := 0;
  5504. rndYourInfo.Height := 224;
  5505. rndYour.Height := 184;
  5506. imgYourVideo.Width := 240;
  5507. imgYourVideo.Height := 180;
  5508. end
  5509. else
  5510. begin
  5511. if (FMinWidthOfMyPanel <= 180) then
  5512. begin
  5513. pnlUserInformation.Width := 180;
  5514. end;
  5515. FMinWidthOfYourPanel := 180;
  5516. pnlYourInfo.Constraints.MinHeight := 40 + 6 + 124;
  5517. pnlYourInfo.Height := 40 + 6 + 124;
  5518. rndYourInfo.Top := 0;
  5519. rndYourInfo.Height := 164;
  5520. rndYour.Height := 124;
  5521. imgYourVideo.Width := 160;
  5522. imgYourVideo.Height := 120;
  5523. end;
  5524. end;
  5525. //------------------------------------------------------------------------------
  5526. procedure TTalkingForm.miShowYourCardClick(Sender: TObject);
  5527. begin
  5528. Application.ProcessMessages;
  5529. Sleep(200);
  5530. (Sender as TMenuItem).Checked := True;
  5531. pgcYourInfo.ActivePageIndex := 1;
  5532. Application.ProcessMessages;
  5533. end;
  5534. //------------------------------------------------------------------------------
  5535. procedure TTalkingForm.miShowYourHeadImageClick(Sender: TObject);
  5536. begin
  5537. Application.ProcessMessages;
  5538. Sleep(200);
  5539. (Sender as TMenuItem).Checked := True;
  5540. pgcYourInfo.ActivePageIndex := 0;
  5541. Application.ProcessMessages;
  5542. FOldWidthOfUserInfo := pnlUserInformation.Width;
  5543. end;
  5544. procedure TTalkingForm.miShowYourVideoClick(Sender: TObject);
  5545. begin
  5546. Application.ProcessMessages;
  5547. Sleep(200);
  5548. (Sender as TMenuItem).Checked := True;
  5549. pgcYourInfo.ActivePageIndex := 2;
  5550. Application.ProcessMessages;
  5551. FOldWidthOfUserInfo := pnlUserInformation.Width;
  5552. end;
  5553. //------------------------------------------------------------------------------
  5554. procedure TTalkingForm.miStopAudioTransmiteClick(Sender: TObject);
  5555. begin
  5556. if FAudioMission <> nil then
  5557. FAudioMission.Stop;
  5558. end;
  5559. procedure TTalkingForm.miTeamAddFriendClick(Sender: TObject);
  5560. begin
  5561. miAddFriendClick(nil);
  5562. end;
  5563. procedure TTalkingForm.miTeamSeeUserInfoClick(Sender: TObject);
  5564. begin
  5565. SeeUserInformation(ALoginName);
  5566. end;
  5567. procedure TTalkingForm.miTeamSendMessageClick(Sender: TObject);
  5568. begin
  5569. if AnsiSameText(ALoginName, FRealICQClient.LoginName) then
  5570. begin
  5571. //MessageBox(Handle, '不可以和自己对话! ', '提示', MB_ICONINFORMATION);
  5572. Exit;
  5573. end;
  5574. OpenTalkingForm(ALoginName);
  5575. end;
  5576. procedure TTalkingForm.miTeamSMSClick(Sender: TObject);
  5577. begin
  5578. OpenSMSForm(ALoginName);
  5579. end;
  5580. procedure TTalkingForm.miVideoSetClick(Sender: TObject);
  5581. var
  5582. SysDev: TSysDevEnum;
  5583. begin
  5584. SysDev := TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
  5585. try
  5586. try
  5587. VideoSourceFilter.BaseFilter.Moniker := SysDev.GetMoniker(FRealICQClient.VideoDeviceID);
  5588. except
  5589. VideoSourceFilter.BaseFilter.Moniker := SysDev.GetMoniker(0);
  5590. end;
  5591. CaptureGraph.Active := True;
  5592. ShowFilterPropertyPage(Self.Handle, VideoSourceFilter as IBaseFilter);
  5593. finally
  5594. FreeAndNil(SysDev);
  5595. end;
  5596. end;
  5597. //------------------------------------------------------------------------------
  5598. procedure TTalkingForm.miYourVideoSmallSizeClick(Sender: TObject);
  5599. begin
  5600. if pgcYourInfo.ActivePage = tsYourVideo then
  5601. begin
  5602. Application.ProcessMessages;
  5603. Sleep(200);
  5604. tsYourVideoShow(tsYourVideo);
  5605. Application.ProcessMessages;
  5606. end;
  5607. end;
  5608. //------------------------------------------------------------------------------
  5609. procedure TTalkingForm.miMyVideoSmallSizeClick(Sender: TObject);
  5610. begin
  5611. if pgcMyInfo.ActivePage = tsMyVideo then
  5612. begin
  5613. Application.ProcessMessages;
  5614. Sleep(200);
  5615. tsMyVideoShow(tsMyVideo);
  5616. Application.ProcessMessages;
  5617. end;
  5618. end;
  5619. //------------------------------------------------------------------------------
  5620. procedure TTalkingForm.InvokeCMD(InvokeIE: Boolean; Value1, Value2: Integer; var vaIn, vaOut: OleVariant);
  5621. const
  5622. CLSID_WebBrowser: TGUID = '{ED016940-BD5B-11cf-BA4E-00C04FD70816}';
  5623. var
  5624. CmdTarget: IOleCommandTarget;
  5625. PtrGUID: PGUID;
  5626. begin
  5627. New(PtrGUID);
  5628. if InvokeIE then
  5629. PtrGUID^ := CLSID_WebBrowser
  5630. else
  5631. PtrGuid := PGUID(nil);
  5632. if WebBrowser.Document <> nil then
  5633. try
  5634. WebBrowser.Document.QueryInterface(IOleCommandTarget, CmdTarget);
  5635. if CmdTarget <> nil then
  5636. try
  5637. CmdTarget.Exec(PtrGuid, Value1, Value2, vaIn, vaOut);
  5638. finally
  5639. CmdTarget._Release;
  5640. end;
  5641. except
  5642. end;
  5643. Dispose(PtrGUID);
  5644. end;
  5645. //------------------------------------------------------------------------------
  5646. procedure TTalkingForm.miAddFriendClick(Sender: TObject);
  5647. var
  5648. iIndex: Integer;
  5649. ListItem: TRealICQContacterListItem;
  5650. ADisplayName: string;
  5651. begin
  5652. ADisplayName := '';
  5653. if AnsiSameText(FRealICQClient.LoginName, ALoginName) then
  5654. begin
  5655. //MessageBox(Handle, '不能添加自己为好友! ', '提示', MB_ICONINFORMATION);
  5656. Exit;
  5657. end;
  5658. iIndex := FLVTeamMembers.Items.IndexOf(ALoginName);
  5659. if iIndex > -1 then
  5660. begin
  5661. ListItem := FLVTeamMembers.Items.Objects[iIndex] as TRealICQContacterListItem;
  5662. ADisplayName := ListItem.DisplayName;
  5663. end;
  5664. ShowAddFriendWindow(Self, ALoginName, ADisplayName);
  5665. end;
  5666. //------------------------------------------------------------------------------
  5667. //添加聊天内容到工单系统
  5668. //------------------------------------------------------------------------------
  5669. procedure TTalkingForm.miAddWorkOrderClick(Sender: TObject);
  5670. begin
  5671. miCopyFromIEClick(nil);
  5672. MainForm.WebBrowserForPostWorkOrder.Navigate('about:blank');
  5673. // TThreadPost.Create(FRealICQClient.WebAppBaseURL+'/PostWordOrder.aspx',ClipBoard.AsText);
  5674. end;
  5675. //------------------------------------------------------------------------------
  5676. procedure TTalkingForm.miCloseMicClick(Sender: TObject);
  5677. begin
  5678. ImgLstForAudio.GetIcon(1, spbMic.Icon);
  5679. TAudioTransmitter.SetSendAudio(False);
  5680. MicrophoneVolume.PeakValue := 0;
  5681. end;
  5682. //------------------------------------------------------------------------------
  5683. procedure TTalkingForm.miOpenMicClick(Sender: TObject);
  5684. begin
  5685. ImgLstForAudio.GetIcon(0, spbMic.Icon);
  5686. TAudioTransmitter.SetSendAudio(True);
  5687. end;
  5688. //------------------------------------------------------------------------------
  5689. procedure TTalkingForm.miCloseSpeakClick(Sender: TObject);
  5690. begin
  5691. ImgLstForAudio.GetIcon(3, spbSpk.Icon);
  5692. TAudioTransmitter.SetRecvAudio(False);
  5693. MasterVolume.PeakValue := 0;
  5694. end;
  5695. //------------------------------------------------------------------------------
  5696. procedure TTalkingForm.miOpenSpeakClick(Sender: TObject);
  5697. begin
  5698. ImgLstForAudio.GetIcon(2, spbSpk.Icon);
  5699. TAudioTransmitter.SetRecvAudio(True);
  5700. end;
  5701. procedure TTalkingForm.miPasteImgClick(Sender: TObject);
  5702. begin
  5703. end;
  5704. //------------------------------------------------------------------------------
  5705. procedure TTalkingForm.miCopyFromIEClick(Sender: TObject);
  5706. var
  5707. vaIn, vaOut: Olevariant;
  5708. begin
  5709. if actSaveImgAs.Enabled then
  5710. begin
  5711. CopyHTMLToClipBoard('', UTF8Encode('<img src="file:///' + FFaceMenuAtFileName + '">'));
  5712. end
  5713. else
  5714. begin
  5715. InvokeCmd(FALSE, OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT, vaIn, vaOut);
  5716. end;
  5717. end;
  5718. //----------复制图片到剪贴版------------------------------
  5719. procedure TTalkingForm.miCopyImageClick(Sender: TObject);
  5720. var
  5721. Face: TFace;
  5722. begin
  5723. if FRightMouseClickedFace.FaceIndex >= BaseTempFaceIndex then
  5724. Face := MainForm.TempFaceList.Objects[FRightMouseClickedFace.FaceIndex - BaseTempFaceIndex] as TFace
  5725. else
  5726. Face := MainForm.FaceList.Objects[FRightMouseClickedFace.FaceIndex] as TFace;
  5727. CopyHTMLToClipBoard('', UTF8Encode('<img src="file:///' + Face.FileName + '">'));
  5728. //CopyFilesToClipboard(Face.FileName);
  5729. end;
  5730. //------------------------------------------------------------------------------
  5731. procedure TTalkingForm.miSelAllFromIEClick(Sender: TObject);
  5732. var
  5733. vaIn, vaOut: Olevariant;
  5734. begin
  5735. InvokeCmd(FALSE, OLECMDID_SELECTALL, OLECMDEXECOPT_DODEFAULT, vaIn, vaOut);
  5736. end;
  5737. procedure TTalkingForm.miSendMessageClick(Sender: TObject);
  5738. begin
  5739. if AnsiSameText(ALoginName, FRealICQClient.LoginName) then
  5740. begin
  5741. //MessageBox(Handle, '不可以和自己对话! ', '提示', MB_ICONINFORMATION);
  5742. Exit;
  5743. end;
  5744. OpenTalkingForm(ALoginName);
  5745. end;
  5746. procedure TTalkingForm.miSendSmsClick(Sender: TObject);
  5747. begin
  5748. OpenSmsForm(ALoginName);
  5749. end;
  5750. //------------------------------------------------------------------------------
  5751. procedure TTalkingForm.miSaveMyVideoImageAsClick(Sender: TObject);
  5752. begin
  5753. SaveDialog.FileName := '照片_' + FormatDateTime('yyyy-mm-dd', Now()) + '.BMP';
  5754. if SaveDialog.Execute then
  5755. begin
  5756. ImgMyVideo.Picture.Bitmap.SaveToFile(SaveDialog.FileName);
  5757. end;
  5758. end;
  5759. procedure TTalkingForm.miSaveToWebClick(Sender: TObject);
  5760. begin
  5761. miCopyFromIEClick(nil);
  5762. Application.ProcessMessages;
  5763. Sleep(100);
  5764. Application.ProcessMessages;
  5765. MainForm.RealICQClient.CallServerDBProcedure('YJ_AddTempRemark', ClipBoard.AsText);
  5766. end;
  5767. //------------------------------------------------------------------------------
  5768. procedure TTalkingForm.miSaveYourVideoImageAsClick(Sender: TObject);
  5769. begin
  5770. SaveDialog.FileName := '照片_' + FormatDateTime('yyyy-mm-dd', Now()) + '.BMP';
  5771. if SaveDialog.Execute then
  5772. begin
  5773. ImgYourVideo.Picture.Bitmap.SaveToFile(SaveDialog.FileName);
  5774. end;
  5775. end;
  5776. //------------------------------------------------------------------------------
  5777. procedure TTalkingForm.miSeeTeamDetailInformationClick(Sender: TObject);
  5778. var
  5779. iIndex: Integer;
  5780. ATeam: TRealICQTeam;
  5781. begin
  5782. ATeam := TTeamsAdapter.GetTeam(FTeamID);
  5783. if ATeam <> nil then
  5784. OpenTeamOptionsForm(ATeam);
  5785. end;
  5786. //------------------------------------------------------------------------------
  5787. procedure TTalkingForm.miSeeUserInformationClick(Sender: TObject);
  5788. begin
  5789. SeeUserInformation(ALoginName);
  5790. end;
  5791. //------------------------------------------------------------------------------
  5792. procedure TTalkingForm.miSeeYourDetailInformationClick(Sender: TObject);
  5793. begin
  5794. SeeUserInformation(Receiver);
  5795. end;
  5796. //------------------------------------------------------------------------------
  5797. procedure TTalkingForm.miShowMyCardClick(Sender: TObject);
  5798. begin
  5799. Application.ProcessMessages;
  5800. Sleep(200);
  5801. (Sender as TMenuItem).Checked := True;
  5802. pgcMyInfo.ActivePageIndex := 1;
  5803. Application.ProcessMessages;
  5804. end;
  5805. //------------------------------------------------------------------------------
  5806. procedure TTalkingForm.miShowMyHeadImageClick(Sender: TObject);
  5807. begin
  5808. Application.ProcessMessages;
  5809. Sleep(200);
  5810. (Sender as TMenuItem).Checked := True;
  5811. pgcMyInfo.ActivePageIndex := 0;
  5812. Application.ProcessMessages;
  5813. FOldWidthOfUserInfo := pnlUserInformation.Width;
  5814. end;
  5815. procedure TTalkingForm.miShowMyVideoClick(Sender: TObject);
  5816. begin
  5817. Application.ProcessMessages;
  5818. Sleep(200);
  5819. (Sender as TMenuItem).Checked := True;
  5820. pgcMyInfo.ActivePageIndex := 2;
  5821. Application.ProcessMessages;
  5822. FOldWidthOfUserInfo := pnlUserInformation.Width;
  5823. end;
  5824. //------------------------------------------------------------------------------
  5825. procedure TTalkingForm.miShowVideoFormClick(Sender: TObject);
  5826. begin
  5827. miShowVideoForm.Checked := not miShowVideoForm.Checked;
  5828. if miShowVideoForm.Checked then
  5829. begin
  5830. miShowYourHeadImageClick(miShowYourHeadImage);
  5831. if VideoForm = nil then
  5832. VideoForm := TVideoForm.Create(Self);
  5833. VideoForm.TalkingForm := Self;
  5834. VideoForm.Show;
  5835. miShowYourVideo.Enabled := False;
  5836. end
  5837. else
  5838. begin
  5839. miShowYourVideoClick(miShowYourVideo);
  5840. FreeAndNil(VideoForm);
  5841. miShowYourVideo.Enabled := True;
  5842. end;
  5843. end;
  5844. //------------------------------------------------------------------------------
  5845. procedure TTalkingForm.UpdateMyInfo;
  5846. var
  5847. GIFImage: TGIFImage;
  5848. begin
  5849. if FRealICQClient.Me = nil then
  5850. Exit;
  5851. Application.ProcessMessages;
  5852. if FileExists(FRealICQClient.Me.HeadImageFile) then
  5853. begin
  5854. try
  5855. if (FRealICQClient.Me.HeadImageFileType = htGIF) then
  5856. begin
  5857. GIFImage := TGIFImage.Create;
  5858. GIFImage.Animate := MainForm.ShowGIFInTalkingForm;
  5859. try
  5860. GIFImage.LoadFromFile(FRealICQClient.Me.HeadImageFile);
  5861. if GIFImage.Animate then
  5862. ImgHeadForMyInfo.Picture.Assign(GIFImage)
  5863. else
  5864. ImgHeadForMyInfo.Picture.Bitmap.Assign(GIFImage);
  5865. finally
  5866. GIFImage.Free;
  5867. end;
  5868. end
  5869. else
  5870. ImgHeadForMyInfo.Picture.LoadFromFile(FRealICQClient.Me.HeadImageFile);
  5871. except
  5872. ImgHeadForMyInfo.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + DefaultPicture);
  5873. end;
  5874. end
  5875. else
  5876. begin
  5877. ImgHeadForMyInfo.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + DefaultPicture);
  5878. end;
  5879. cardMine.IsSeeRight := True;
  5880. cardMine.RealICQUser := FRealICQClient.Me;
  5881. // FRealICQClient.GetUserExInformation(cardMine.RealICQUser.LoginName);
  5882. PostMessage(pnlDisplayer.Handle, WM_SIZE, 0, 0);
  5883. end;
  5884. procedure TTalkingForm.UpdateAliasClick(Sender: TObject);
  5885. var
  5886. AliasName: string;
  5887. begin
  5888. AliasName := ShowMyInputBox('更改别名', '请输入您喜欢的别名', '', 20);
  5889. if AliasName <> '' then
  5890. TTeamsAdapter.SetAlias(FTeamID, ALoginName, AliasName);
  5891. end;
  5892. //------------------------------------------------------------------------------
  5893. procedure TTalkingForm.UpdateTeamMember(ARealICQUser: TRealICQUser);
  5894. var
  5895. ItemIndex: Integer;
  5896. AListItem: TRealICQContacterListItem;
  5897. AAlias: string;
  5898. begin
  5899. ItemIndex := FLVTeamMembers.Items.IndexOf(ARealICQUser.LoginName);
  5900. if ItemIndex = -1 then
  5901. Exit;
  5902. AListItem := FLVTeamMembers.Items.Objects[ItemIndex] as TRealICQContacterListItem;
  5903. // MainForm.BindUserDataToItem(AListItem, ARealICQUser);
  5904. //TODO 解决第一次都是LoginName的问题
  5905. AAlias := TTeamsAdapter.GetAlias(FTeamID, AListItem.LoginName);
  5906. if AAlias = '' then
  5907. AAlias := ARealICQUser.DisplayName;
  5908. MainForm.BindUserDataToItemForGroup(AListItem, ARealICQUser, AAlias);
  5909. lblTeamMemberCount.Caption := Format('成员(%d/%d)', [FLVTeamMembers.OnlineNumeric, FLVTeamMembers.Items.Count]);
  5910. //FLVTeamMembers.Invalidate;
  5911. end;
  5912. //------------------------------------------------------------------------------
  5913. procedure TTalkingForm.UpdateTeamMembers;
  5914. var
  5915. iIndex, ItemIndex, iLoop: Integer;
  5916. LoginName: string;
  5917. MemberList: TStringList;
  5918. // ATeam: TRealICQTeam;
  5919. ATeam: TRealICQTeam;
  5920. RealICQUser: TRealICQUser;
  5921. AListItem: TRealICQContacterListItem;
  5922. TeamName, AGroupAlias: string;
  5923. ActionGetMembers: TAsynGetTeamMembers;
  5924. begin
  5925. { iIndex := FRealICQClient.Teams.IndexOf(FTeamID);
  5926. if iIndex = -1 then Exit;
  5927. ATeam := FRealICQClient.Teams.Objects[iIndex] as TRealICQTeam; }
  5928. ATeam := TTeamsAdapter.GetTeam(FTeamID);
  5929. MemberList := SplitString(ATeam.TeamMembers, Chr(10));
  5930. ActionGetMembers := TAsynGetTeamMembers.Create(Self, MemberList);
  5931. { try
  5932. for iLoop := 0 to MemberList.Count - 1 do
  5933. begin
  5934. LoginName := Trim(MemberList[iLoop]);
  5935. if Length(LoginName) = 0 then continue;
  5936. AGroupAlias := TTeamsAdapter.GetAlias(FTeamID, Trim(LoginName));
  5937. RealICQUser := FRealICQClient.GetRealICQUserObject(LoginName);
  5938. if not Assigned(RealICQUser) then continue;
  5939. //TODO: 获取手机信息和用户状态
  5940. // if Trim(RealICQUser.DisplayName)='' then
  5941. // MainForm.RealICQClient.GetUserInformation(LoginName,True)
  5942. // else
  5943. // MainForm.RealICQClient.GetUserLoginState(LoginName);
  5944. // if (Trim(RealICQUser.Branch)='') or (Trim(RealICQUser.Tel)='') then
  5945. // MainForm.RealICQClient.GetUserExInformation(LoginName,False);
  5946. ItemIndex := FLVTeamMembers.Items.IndexOf(LoginName);
  5947. if ItemIndex = -1 then ItemIndex := FLVTeamMembers.Items.Add(LoginName);
  5948. AListItem := FLVTeamMembers.Items.Objects[ItemIndex] as TRealICQContacterListItem;
  5949. if Trim(AGroupAlias)='' then
  5950. MainForm.BindUserDataToItem(AListItem, RealICQUser)
  5951. else
  5952. MainForm.BindUserDataToItemForGroup(AListItem, RealICQUser, AGroupAlias);
  5953. end;
  5954. ActionGetMembers := TAsynGetTeamMembers.Create(Self,MemberList);
  5955. for iLoop := FLVTeamMembers.Items.Count - 1 downto 0 do
  5956. begin
  5957. LoginName := FLVTeamMembers.Items[iLoop];
  5958. if MemberList.IndexOf(LoginName) = -1 then
  5959. begin
  5960. FLVTeamMembers.Items.Delete(iLoop);
  5961. end;
  5962. end;
  5963. finally
  5964. MemberList.Free;
  5965. end; }
  5966. // try
  5967. // for iLoop := 0 to MemberList.Count - 1 do
  5968. // begin
  5969. // LoginName := Trim(MemberList[iLoop]);
  5970. // if Length(LoginName) = 0 then continue;
  5971. // AGroupAlias := TTeamsAdapter.GetAlias(FTeamID, Trim(LoginName));
  5972. //
  5973. // RealICQUser := FRealICQClient.GetRealICQUserObject(LoginName);
  5974. // if not Assigned(RealICQUser) then continue;
  5975. // //TODO: 获取手机信息和用户状态
  5976. // if Trim(RealICQUser.DisplayName)='' then
  5977. // MainForm.RealICQClient.GetUserInformation(LoginName,True)
  5978. // else
  5979. // MainForm.RealICQClient.GetUserLoginState(LoginName);
  5980. // if (Trim(RealICQUser.Branch)='') or (Trim(RealICQUser.Tel)='') then
  5981. // MainForm.RealICQClient.GetUserExInformation(LoginName,False);
  5982. //
  5983. // ItemIndex := FLVTeamMembers.Items.IndexOf(LoginName);
  5984. // if ItemIndex = -1 then ItemIndex := FLVTeamMembers.Items.Add(LoginName);
  5985. // AListItem := FLVTeamMembers.Items.Objects[ItemIndex] as TRealICQContacterListItem;
  5986. // if Trim(AGroupAlias)='' then
  5987. // MainForm.BindUserDataToItem(AListItem, RealICQUser)
  5988. // else
  5989. // MainForm.BindUserDataToItemForGroup(AListItem, RealICQUser, AGroupAlias);
  5990. // end;
  5991. // //ActionGetMembers := TAsynGetTeamMembers.Create(Self,MemberList);
  5992. // for iLoop := FLVTeamMembers.Items.Count - 1 downto 0 do
  5993. // begin
  5994. // LoginName := FLVTeamMembers.Items[iLoop];
  5995. // if MemberList.IndexOf(LoginName) = -1 then
  5996. // begin
  5997. // FLVTeamMembers.Items.Delete(iLoop);
  5998. // end;
  5999. // end;
  6000. // finally
  6001. // MemberList.Free;
  6002. // end;
  6003. if ATeam.TeamCaption = '' then
  6004. TeamName := ATeam.TeamID
  6005. else
  6006. TeamName := ATeam.TeamCaption;
  6007. if ATeam.IsTempTeam then
  6008. TeamName := '多人会话'
  6009. else
  6010. TeamName := TeamName + ' - 群组会话';
  6011. Caption := TeamName;
  6012. lblTeamMemberCount.Caption := Format('成员(%d/%d)', [FLVTeamMembers.OnlineNumeric, FLVTeamMembers.Items.Count]);
  6013. end;
  6014. //------------------------------------------------------------------------------
  6015. procedure TTalkingForm.SetTeamID(Value: string);
  6016. var
  6017. iIndex: Integer;
  6018. ATeam: TRealICQTeam;
  6019. begin
  6020. //SpbEncryMessage.Visible := False;
  6021. //chkEncryMessage.Visible := False;
  6022. spbEncryMsg.Visible := False;
  6023. spbNormalMsg.Visible := False;
  6024. //spbUploadFile.Caption:='群发文件';
  6025. spbAddUser.Enabled := FRealICQClient = MainForm.RealICQClient;
  6026. //pnlMenu.Visible := FRealICQClient = MainForm.RealICQClient;
  6027. miSeeTeamDetailInformation.Visible := True;
  6028. miSeeYourDetailInformation.Visible := False;
  6029. miShowYourHeadImage.Visible := False;
  6030. miShowYourCard.Visible := False;
  6031. actSendFile.Visible := False;
  6032. actAudio.Visible := False;
  6033. actVideo.Visible := False;
  6034. actSeeTeamOptions.Visible := True;
  6035. actQuitTeam.Visible := False;
  6036. actDisbandTeam.Visible := False;
  6037. spbSendFile.Visible := False;
  6038. spbAudio.Visible := False;
  6039. spbVideo.Visible := False;
  6040. spbRemoteControl.Visible := False;
  6041. spbSendFolder.Visible := False;
  6042. spbUserInfo.Visible := False;
  6043. spbPostSMS.Visible := False;
  6044. spbSeeTeamOptions.Visible := True;
  6045. spbAddUser.Visible := True;
  6046. spbQuitTeam.Visible := False;
  6047. spbDisbandTeam.Visible := False;
  6048. spbSendSMS.Visible := True;
  6049. pnlYourInfo.Visible := False;
  6050. // pnlMyInfo.Visible := False;
  6051. pnlTeamCallBoard.Visible := True;
  6052. pnlTeamMembers.Visible := True;
  6053. spbShakeWindow.Visible := False;
  6054. spbCopyScreen.left := spbShakeWindow.left;
  6055. //spbHistroyMessage.left:= spbCopyScreen.left + spbCopyScreen.Width + 3;
  6056. btnQR.Visible := False;
  6057. spbSet.left := spbQuitTeam.left + spbQuitTeam.Width + 3;
  6058. spbAbout.left := spbSet.left + spbSet.Width;
  6059. if PnlTeamWebDisk.Visible then
  6060. begin
  6061. pnlTeamCallBoard.Visible := False;
  6062. pnlTeamMembers.Visible := False;
  6063. end
  6064. else
  6065. PnlTeamWebDisk.Visible := False;
  6066. //spbUploadFile.Left := spbDisbandTeam.Left + spbDisbandTeam.Width + 2;
  6067. spbUploadFile.Visible := False;
  6068. //spbTeamNetWorkDisk.Left := spbDisbandTeam.Left + spbDisbandTeam.Width + 2;
  6069. spbTeamNetWorkDisk.Caption := '群文件';
  6070. FTeamID := Value;
  6071. ATeam := TTeamsAdapter.GetTeam(FTeamID);
  6072. if ATeam = nil then
  6073. begin
  6074. Caption := FTeamID + ' - 群组对话';
  6075. Log(Format('找不到群ID为%s的群', [FTeamID]), 'SetTeamID');
  6076. Exit;
  6077. end;
  6078. spbTeamNetWorkDisk.Visible := not ATeam.IsTempTeam;
  6079. if FLVTeamMembers.Tag = 0 then
  6080. begin
  6081. {$region '生成显示群组成员列表的ListView'}
  6082. if (FMinWidthOfMyPanel <= 200) then
  6083. pnlTeamMembers.Width := 200;
  6084. FMinWidthOfYourPanel := 200;
  6085. MainForm.UpdateContacterListView(FLVTeamMembers);
  6086. FLVTeamMembers.OnItemOnline := nil;
  6087. FLVTeamMembers.OnItemOffline := nil;
  6088. FLVTeamMembers.PopupMenu := ppUserItemRightMenu;
  6089. FLVTeamMembers.Style := lsSmallHeadImage;
  6090. FLVTeamMembers.CaptionStyle := csDisplayName;
  6091. FLVTeamMembers.OnItemMouseEnter := nil;
  6092. FLVTeamMembers.OnItemMouseLeave := nil;
  6093. FLVTeamMembers.OnItemIconButtonClick := nil;
  6094. //FLVTeamMembers.OnItemIconButtonDblClick := nil;
  6095. FLVTeamMembers.ShowHeadImageButton := True;
  6096. FLVTeamMembers.ChangeUIColor(FWindowColor);
  6097. FLVTeamMembers.Tag := 1;
  6098. {$endregion}
  6099. end;
  6100. UpdateTeamMembers;
  6101. actDisbandTeam.Visible := AnsiSameText(ATeam.TeamCreater, FRealICQClient.LoginName);
  6102. actQuitTeam.Visible := not actDisbandTeam.Visible;
  6103. spbQuitTeam.Visible := actQuitTeam.Visible;
  6104. spbDisbandTeam.Visible := actDisbandTeam.Visible;
  6105. mmTeamCallBoard.Text := Trim(ATeam.TeamCallBoard);
  6106. //spbSendImage.Left := spbShakeWindow.Left;
  6107. //spbCopyScreen.Left := spbSendImage.Left + spbSendImage.Width + 3;
  6108. //spbCopyScreen2.Left := spbCopyScreen.Left + spbCopyScreen.Width + 3;
  6109. PostMessage(pnlDisplayer.Handle, WM_SIZE, 0, 0);
  6110. PostMessage(Handle, WM_SIZE, 0, 0);
  6111. end;
  6112. procedure TTalkingForm.SetReceiver(Value: string);
  6113. var
  6114. UserName: WideString;
  6115. FRealICQUser: TRealICQUser;
  6116. GIFImage: TGIFImage;
  6117. ServerId: string;
  6118. iPos: Integer;
  6119. begin
  6120. //SpbEncryMessage.Visible := True;
  6121. //chkEncryMessage.Visible := True;
  6122. spbEncryMsg.Visible := False;
  6123. spbNormalMsg.Visible := True;
  6124. //spbUploadFile.Caption:='离线文件';
  6125. // MainForm.RealICQClient.GetUserExInformation(Value);
  6126. spbAddUser.Enabled := FRealICQClient = MainForm.RealICQClient;
  6127. //pnlMenu.Visible := FRealICQClient = MainForm.RealICQClient;
  6128. FReceiver := Value;
  6129. FRealICQUser := TUsersService.GetUsersService.GetOrRequestUser(Receiver);
  6130. if not Assigned(FRealICQUser) then
  6131. Exit;
  6132. if FRealICQUser.LoginAtWeb then
  6133. begin
  6134. miSeeTeamDetailInformation.Visible := False;
  6135. miSeeYourDetailInformation.Visible := True;
  6136. miShowYourHeadImage.Visible := True;
  6137. miShowYourCard.Visible := True;
  6138. actSendFile.Enabled := False;
  6139. actAudio.Enabled := False;
  6140. actVideo.Enabled := False;
  6141. actSeeTeamOptions.Visible := False;
  6142. actQuitTeam.Visible := False;
  6143. actDisbandTeam.Visible := False;
  6144. spbSendFile.Enabled := False;
  6145. spbAudio.Enabled := False;
  6146. spbVideo.Enabled := False;
  6147. spbUploadFile.Enabled := False;
  6148. spbRemoteControl.Enabled := False;
  6149. spbSendFolder.Enabled := False;
  6150. spbSendImage.Visible := False;
  6151. spbCopyScreen.Visible := False;
  6152. //spbCopyScreen2.Visible := False;
  6153. spbSeeTeamOptions.Visible := False;
  6154. spbAddUser.Visible := False;
  6155. spbQuitTeam.Visible := False;
  6156. spbDisbandTeam.Visible := False;
  6157. pnlYourInfo.Visible := True;
  6158. // pnlMyInfo.Visible := True;
  6159. pnlTeamCallBoard.Visible := False;
  6160. pnlTeamMembers.Visible := False;
  6161. spbShakeWindow.Visible := True;
  6162. btnQR.Visible := True;
  6163. spbCopyScreen.left := spbShakeWindow.left + spbShakeWindow.Width + 3;
  6164. //spbHistroyMessage.left:= spbCopyScreen.left + spbCopyScreen.Width + 3;
  6165. spbSet.left := spbAudio.left + spbAudio.Width;
  6166. btnQR.left := spbSet.left + spbSet.Width + 2;
  6167. spbAbout.left := btnQR.left + btnQR.Width + 2;
  6168. end
  6169. else
  6170. begin
  6171. miSeeTeamDetailInformation.Visible := False;
  6172. miSeeYourDetailInformation.Visible := True;
  6173. miShowYourHeadImage.Visible := True;
  6174. miShowYourCard.Visible := True;
  6175. actSendFile.Visible := True;
  6176. actAudio.Visible := True;
  6177. actVideo.Visible := True;
  6178. actSeeTeamOptions.Visible := False;
  6179. actQuitTeam.Visible := False;
  6180. actDisbandTeam.Visible := False;
  6181. spbSendFile.Visible := True;
  6182. spbAudio.Visible := True;
  6183. spbVideo.Visible := True;
  6184. spbRemoteControl.Visible := True;
  6185. spbSendFolder.Visible := True;
  6186. spbUserInfo.Visible := True;
  6187. spbPostSMS.Visible := True;
  6188. spbSeeTeamOptions.Visible := False;
  6189. spbAddUser.Visible := False;
  6190. spbQuitTeam.Visible := False;
  6191. spbDisbandTeam.Visible := False;
  6192. pnlYourInfo.Visible := True;
  6193. // pnlMyInfo.Visible := True;
  6194. pnlTeamCallBoard.Visible := False;
  6195. pnlTeamMembers.Visible := False;
  6196. spbShakeWindow.Visible := True;
  6197. btnQR.Visible := True;
  6198. spbCopyScreen.left := spbShakeWindow.left + spbShakeWindow.Width + 3;
  6199. //spbHistroyMessage.left:= spbCopyScreen.left + spbCopyScreen.Width + 3;
  6200. spbSet.left := spbAudio.left + spbAudio.Width;
  6201. btnQR.left := spbSet.left + spbSet.Width + 2;
  6202. spbAbout.left := btnQR.left + btnQR.Width + 2;
  6203. end;
  6204. PnlTeamWebDisk.Visible := False;
  6205. spbTeamNetWorkDisk.Visible := False;
  6206. if FileExists(FRealICQUser.HeadImageFile) then
  6207. begin
  6208. try
  6209. if (FRealICQUser.HeadImageFileType = htGIF) then
  6210. begin
  6211. GIFImage := TGIFImage.Create;
  6212. GIFImage.Animate := MainForm.ShowGIFInTalkingForm;
  6213. try
  6214. GIFImage.LoadFromFile(FRealICQUser.HeadImageFile);
  6215. if GIFImage.Animate then
  6216. ImgHeadForYourInfo.Picture.Assign(GIFImage)
  6217. else
  6218. ImgHeadForYourInfo.Picture.Bitmap.Assign(GIFImage);
  6219. finally
  6220. GIFImage.Free;
  6221. end;
  6222. end
  6223. else
  6224. ImgHeadForYourInfo.Picture.LoadFromFile(FRealICQUser.HeadImageFile);
  6225. except
  6226. ImgHeadForYourInfo.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + DefaultPicture);
  6227. end;
  6228. end
  6229. else
  6230. begin
  6231. ImgHeadForYourInfo.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + DefaultPicture);
  6232. end;
  6233. TimerForGetUserInformation.Enabled := True;
  6234. if FRealICQUser.DisplayName = '' then
  6235. begin
  6236. UserName := FRealICQUser.LoginName;
  6237. end
  6238. else
  6239. UserName := FRealICQUser.DisplayName;
  6240. Caption := UserName;
  6241. iPos := AnsiPos('-', FRealICQUser.LoginName);
  6242. ServerId := Copy(FRealICQUser.LoginName, 1, iPos - 1);
  6243. if AnsiPos('+', ServerId) > 0 then
  6244. begin
  6245. ServerId := Copy(ServerId, AnsiPos('+', ServerId) + 1, Length(ServerId));
  6246. end;
  6247. cardYour.CompanyName := FRealICQUser.Company;
  6248. cardYour.BranchName := FRealICQUser.Branch;
  6249. // if Trim(FRealICQUser.Company)='' then cardYour.CompanyName:=MainForm.GetCompany;
  6250. // if Trim(FRealICQUser.Branch)='' then cardYour.BranchName:=MainForm.GetBranchName(FRealICQUser.LoginName);
  6251. if TConditionConfig.GetConfig.UserInfoController then
  6252. begin
  6253. cardYour.IsSeeRight := (ServerId = MainForm.RealICQClient.ServerID);
  6254. if (TConditionConfig.GetConfig.UserInfoController) and (FRealICQUser.Secret = slAllCannotSee) then
  6255. begin
  6256. cardYour.IsSeeRight := False;
  6257. end;
  6258. if (TConditionConfig.GetConfig.UserInfoController) and (FRealICQUser.Secret = slOnlyFriendCanSee) and not (TUsersService.GetUsersService.IsWorkmateOrFriend(FRealICQUser.LoginName)) then
  6259. begin
  6260. cardYour.IsSeeRight := False;
  6261. end;
  6262. end
  6263. else
  6264. cardYour.IsSeeRight := True;
  6265. cardYour.RealICQUser := FRealICQUser;
  6266. //FRealICQClient.GetUserExInformation(cardYour.RealICQUser.LoginName);
  6267. if FRealICQClient.Logined and FRealICQClient.Connected then
  6268. begin
  6269. (FRealICQUser.RealICQPtoPBox as TRealICQPtoPBox).OnP2PTypeChanged := nil;
  6270. //(FRealICQUser.RealICQPtoPBox as TRealICQPtoPBox).OnP2PTypeChanged := P2PTypeChanged;
  6271. //P2PTypeChanged((FRealICQUser.RealICQPtoPBox as TRealICQPtoPBox));
  6272. end
  6273. else
  6274. begin
  6275. //lblState.Caption := '连接方式: 服务器中转';
  6276. end;
  6277. PostMessage(pnlDisplayer.Handle, WM_SIZE, 0, 0);
  6278. PostMessage(Handle, WM_SIZE, 0, 0);
  6279. if FVCardFrom.pb1.Parent = FVCardFrom then
  6280. begin
  6281. FVCardFrom.pb1.Parent := Self.pnlUserInformation;
  6282. FVCardFrom.pb1.Align := alTop;
  6283. FVCardFrom.pb1.Height := Self.pnlUserInformation.Width;
  6284. pnlYourInfo.Top := 0;
  6285. end;
  6286. FVCardFrom.LoginName := FReceiver;
  6287. end;
  6288. function RoundEx(R: Real): Integer;
  6289. begin
  6290. Result := Trunc(R);
  6291. if Frac(R) >= 0.5 then
  6292. Result := Result + 1;
  6293. end;
  6294. //-----设置LblSendSMS的位置----------------------------------
  6295. procedure TTalkingForm.SetLblSendSMSPosition(HIntMsg: string);
  6296. var
  6297. iPos, TextWidth, Rows: integer;
  6298. SubStr: string;
  6299. chrWidth: Integer;
  6300. begin
  6301. iPos := AnsiPos('手机短信', HIntMsg);
  6302. chrWidth := LblHint.Canvas.TextWidth('发');
  6303. SubStr := Copy(HIntMsg, 1, iPos);
  6304. TextWidth := LblHint.Canvas.TextWidth(SubStr + '手机短信');
  6305. if TextWidth <= LblHint.Width then
  6306. begin
  6307. LblSendSMS.Caption := '手机短信';
  6308. LblSendSMS.Left := LblHint.Left + LblHint.Canvas.TextWidth(SubStr) - 5;
  6309. LblSendSMS.Top := LblHint.Top - 1;
  6310. LblSendSMS1.Visible := false;
  6311. end
  6312. else
  6313. begin
  6314. Rows := TextWidth div LblHint.Width;
  6315. iPos := LblHint.Width * Rows - LblHint.Canvas.TextWidth(SubStr);
  6316. if iPos < (chrWidth div 2) then
  6317. begin
  6318. LblSendSMS.Caption := '手机短信';
  6319. if abs(iPos) < (chrWidth div 2) then
  6320. LblSendSMS.Left := lblHint.Left
  6321. else
  6322. begin
  6323. iPos := RoundEx(abs(iPos) / chrWidth);
  6324. LblSendSMS.Left := lblHint.Left + iPos * chrWidth;
  6325. end;
  6326. LblSendSMS.Top := LblHint.Top + LblHint.Canvas.TextHeight(HIntMsg) * (Rows);
  6327. LblSendSMS1.Visible := false;
  6328. end
  6329. else
  6330. begin
  6331. iPos := RoundEx(iPos / chrWidth);
  6332. LblSendSMS.Caption := Copy('手机短信', 1, iPos * 2);
  6333. LblSendSMS.Left := lblHint.Left + lblHint.Canvas.TextWidth(SubStr) - 5;
  6334. LblSendSMS.Top := lblHint.Top - 1;
  6335. LblSendSMS1.Caption := Copy('手机短信', iPos * 2 + 1, Length('手机短信') - iPos * 2);
  6336. LblSendSMS1.Left := lblHint.Left;
  6337. LblSendSMS1.Top := lblHint.Top + LblHint.Canvas.TextHeight(HIntMsg) * Rows;
  6338. LblSendSMS1.BringToFront;
  6339. LblSendSMS1.Visible := True;
  6340. end;
  6341. end;
  6342. LblSendSMS.BringToFront;
  6343. end;
  6344. //------------------------------------------------------------------------------
  6345. procedure TTalkingForm.pnlDisplayerResize(Sender: TObject);
  6346. var
  6347. UserName, TeamName, AStateMsg, HIntMsg, HDestIntMsg: WideString;
  6348. FRealICQUser: TRealICQUser;
  6349. iIndex: Integer;
  6350. ATeam: TRealICQTeam;
  6351. begin
  6352. FRealICQUser := nil;
  6353. if FRealICQClient = nil then
  6354. Exit;
  6355. if FCategory = tcNormal then
  6356. begin
  6357. {$region '一对一的对话窗口'}
  6358. if Length(FReceiver) = 0 then
  6359. Exit;
  6360. FRealICQUser := TUsersService.GetUsersService.GetOrRequestUser(FReceiver);
  6361. if Assigned(FRealICQUser) then
  6362. begin
  6363. if FRealICQUser.DisplayName = '' then
  6364. UserName := FRealICQUser.LoginName
  6365. else
  6366. UserName := FRealICQUser.DisplayName;
  6367. if (FRealICQUser.LoginState = stLeave) or (FRealICQUser.LoginState = stBusy) then
  6368. AStateMsg := FRealICQUser.LeaveMessage
  6369. else
  6370. AStateMsg := StateValues[Integer(FRealICQUser.LoginState) mod 5];
  6371. if ((FRealICQUser.LoginState = stOffline) or (FRealICQUser.LoginState = stHidden)) and (FRealICQUser.OfflineAutoResponseEnabled) then
  6372. HDestIntMsg := '发送至: ' + UserName + '(出差)'
  6373. else if FRealICQUser.Watchword = '' then
  6374. HDestIntMsg := '发送至: ' + UserName + '(' + AStateMsg + ')'
  6375. else
  6376. HDestIntMsg := '发送至: ' + UserName + '(' + AStateMsg + ') - ' + FRealICQUser.Watchword;
  6377. end
  6378. else //这种情况是与服务器的连接已断开了
  6379. begin
  6380. HDestIntMsg := LblDest.Hint;
  6381. end;
  6382. {$endregion}
  6383. end
  6384. else
  6385. begin
  6386. {$region '群组模式对话窗体'}
  6387. if Length(Trim(FTeamID)) <= 0 then
  6388. Exit;
  6389. ATeam := TTeamsAdapter.GetTeam(FTeamID);
  6390. if ATeam = nil then //这种情况是与服务器的连接已断开了,或不再是这个群的成员了
  6391. begin
  6392. HDestIntMsg := LblDest.Hint;
  6393. Log('与服务器的连接已断开了,或不再是这个群的成员', 'TTalkingForm.pnlDisplayerResize');
  6394. end
  6395. else
  6396. begin
  6397. if ATeam.TeamCaption = '' then
  6398. TeamName := ATeam.TeamID
  6399. else
  6400. TeamName := ATeam.TeamCaption;
  6401. if ATeam.IsTempTeam then
  6402. TeamName := '多人对话'
  6403. else
  6404. TeamName := TeamName + '(群组对话)';
  6405. if ATeam.TeamIntro = '' then
  6406. HDestIntMsg := '参与群组: ' + TeamName
  6407. else
  6408. HDestIntMsg := '参与群组: ' + TeamName + ' - ' + AnsiReplaceStr(ATeam.TeamIntro, #$D#$A, ' ');
  6409. end;
  6410. {$endregion}
  6411. end;
  6412. {$region '相关提示信息'}
  6413. pnlClient.Enabled := True;
  6414. if (FRealICQClient.Me = nil) then
  6415. begin
  6416. AStateMsg := StateValues[Integer(stOffline)];
  6417. HIntMsg := '您当前处于“' + AStateMsg + '”状态,不能发送任何消息!';
  6418. LblHint.Height := LblHint.Canvas.TextHeight(HIntMsg) * (LblHint.Canvas.TextWidth(HIntMsg) div LblHint.Width + 1);
  6419. // pnlHint.Visible := True;
  6420. pnlClient.Enabled := False;
  6421. end
  6422. else if FCategory = tcNormal then
  6423. begin
  6424. if FRealICQClient.Blacklists.IndexOf(FRealICQUser.LoginName) >= 0 then
  6425. begin
  6426. //检查是否在黑名单列表中
  6427. HIntMsg := '该用户已列入黑名单,将无法收到任何消息!';
  6428. LblHint.Height := LblHint.Canvas.TextHeight(HIntMsg) * (LblHint.Canvas.TextWidth(HIntMsg) div LblHint.Width + 1);
  6429. // pnlHint.Visible := True;
  6430. end
  6431. else if FRealICQUser.LoginState <> stOnline then
  6432. begin
  6433. if ((FRealICQUser.LoginState = stOffline) or (FRealICQUser.LoginState = stHidden)) and (FRealICQUser.OfflineAutoResponseEnabled) then
  6434. HIntMsg := '对方处于“出差”状态,您可以发送手机短信联系他 - ' + FRealICQUser.OfflineAutoResponseText
  6435. else
  6436. HIntMsg := '对方处于“' + AStateMsg + '”状态,' + '您可以发送手机短信联系他。';
  6437. LblHint.Height := LblHint.Canvas.TextHeight(HIntMsg) * (LblHint.Canvas.TextWidth(HIntMsg) div LblHint.Width + 1);
  6438. // pnlHint.Visible := True;
  6439. SetLblSendSMSPosition(HIntMsg);
  6440. end
  6441. else
  6442. pnlHint.Visible := False;
  6443. end
  6444. else if FCategory = tcTeam then
  6445. begin
  6446. if TTeamsAdapter.GetTeam(FTeamID) = nil then
  6447. begin
  6448. HIntMsg := '您已不是群组“' + Caption + '”的成员,不能收发任何消息!';
  6449. LblHint.Height := LblHint.Canvas.TextHeight(HIntMsg) * (LblHint.Canvas.TextWidth(HIntMsg) div LblHint.Width + 1);
  6450. LblHint.Caption := HIntMsg;
  6451. pnlHint.Height := LblHint.Height + 10;
  6452. // pnlHint.Visible := True;
  6453. pnlClient.Enabled := False;
  6454. end
  6455. else
  6456. pnlHint.Visible := False;
  6457. end
  6458. else
  6459. pnlHint.Visible := False;
  6460. if (pnlHint.Visible = False) and (FRealICQClient.Me.LoginState <> stOnline) then
  6461. begin
  6462. if (FRealICQClient.Me.LoginState = stLeave) or (FRealICQClient.Me.LoginState = stBusy) then
  6463. AStateMsg := FRealICQClient.Me.LeaveMessage
  6464. else
  6465. AStateMsg := StateValues[Integer(FRealICQClient.Me.LoginState)];
  6466. HIntMsg := '您的当前状态为:' + AStateMsg;
  6467. LblHint.Height := LblHint.Canvas.TextHeight(HIntMsg) * (LblHint.Canvas.TextWidth(HIntMsg) div LblHint.Width + 1);
  6468. // pnlHint.Visible := True;
  6469. end;
  6470. LblHint.Caption := HIntMsg;
  6471. pnlHint.Height := LblHint.Height + 10;
  6472. {$endregion}
  6473. {$region '消息接收方信息'}
  6474. LblDest.Hint := HDestIntMsg;
  6475. LblDest.ShowHint := False;
  6476. //字符串长度过长时,截短字符串并在后面显示“...”
  6477. while LblDest.Canvas.TextWidth(HDestIntMsg) > LblDest.Width do
  6478. begin
  6479. if Length(HDestIntMsg) > 3 then
  6480. begin
  6481. if Copy(HDestIntMsg, Length(HDestIntMsg) - 2, Length(HDestIntMsg)) = '...' then
  6482. HDestIntMsg := Copy(HDestIntMsg, 1, Length(HDestIntMsg) - 3);
  6483. HDestIntMsg := Copy(HDestIntMsg, 1, Length(HDestIntMsg) - 1) + '...';
  6484. end
  6485. else
  6486. break;
  6487. LblDest.ShowHint := True;
  6488. end;
  6489. LblDest.Caption := HDestIntMsg;
  6490. {$endregion}
  6491. end;
  6492. procedure TTalkingForm.pnlTalkingAreaClick(Sender: TObject);
  6493. begin
  6494. end;
  6495. //------------------------------------------------------------------------------
  6496. function GetTalkingFormCount: Integer;
  6497. begin
  6498. Result := TalkingForms.Count;
  6499. end;
  6500. //------------------------------------------------------------------------------
  6501. procedure CloseAllTalkingForm;
  6502. var
  6503. AForm: TTalkingForm;
  6504. begin
  6505. while TalkingForms.Count > 0 do
  6506. begin
  6507. AForm := TalkingForms[0];
  6508. FreeAndNil(AForm);
  6509. end;
  6510. end;
  6511. //------------------------------------------------------------------------------
  6512. procedure UpdateAllTakingFormGIFHeadImage;
  6513. var
  6514. iLoop: Integer;
  6515. AForm: TTalkingForm;
  6516. FRealICQUser: TRealICQUser;
  6517. begin
  6518. for iLoop := TalkingForms.Count - 1 downto 0 do
  6519. begin
  6520. AForm := TalkingForms[iLoop];
  6521. FRealICQUser := TUsersService.GetUsersService.GetOrRequestUser(AForm.FReceiver);
  6522. if Assigned(FRealICQUser) then
  6523. begin
  6524. if FRealICQUser.HeadImageFileType = htGIF then
  6525. AForm.SetReceiver(AForm.FReceiver);
  6526. end;
  6527. if AForm.FRealICQClient.Me.HeadImageFileType = htGIF then
  6528. begin
  6529. AForm.UpdateMyInfo;
  6530. end;
  6531. end;
  6532. end;
  6533. procedure UpdateAllTakingFormHotKeySet;
  6534. var
  6535. iLoop: Integer;
  6536. AForm: TTalkingForm;
  6537. begin
  6538. for iLoop := TalkingForms.Count - 1 downto 0 do
  6539. begin
  6540. AForm := TalkingForms[iLoop];
  6541. AForm.actCtrlEnter.Checked := MainForm.CtrlEnterSendMessage;
  6542. AForm.actEnter.Checked := not MainForm.CtrlEnterSendMessage;
  6543. end;
  6544. end;
  6545. //------------------------------------------------------------------------------
  6546. procedure SetAllTakingFormEnabledState(AEnableValue: Boolean);
  6547. var
  6548. iLoop: Integer;
  6549. AForm: TTalkingForm;
  6550. begin
  6551. for iLoop := TalkingForms.Count - 1 downto 0 do
  6552. begin
  6553. AForm := TalkingForms[iLoop];
  6554. if not AnsiSameText(AForm.FRealICQClient.LoginName, AForm.FSender) and (AForm.FSender <> '') then
  6555. begin
  6556. FreeAndNil(AForm);
  6557. continue;
  6558. end;
  6559. PostMessage(AForm.pnlDisplayer.Handle, WM_SIZE, 0, 0);
  6560. AForm.pnlClient.Enabled := AEnableValue;
  6561. if not AEnableValue then
  6562. AForm.CancelAllSendFile;
  6563. end;
  6564. end;
  6565. //------------------------------------------------------------------------------
  6566. procedure SetTalkingFormPosition(APrevForm, ATalkingForm: TTalkingForm; AShowActive: Boolean);
  6567. begin
  6568. if APrevForm <> nil then
  6569. begin
  6570. ATalkingForm.Left := APrevForm.Left + 20;
  6571. ATalkingForm.Top := APrevForm.Top + 20;
  6572. if (ATalkingForm.Left + ATalkingForm.Width > Screen.WorkAreaWidth) or (ATalkingForm.Top + ATalkingForm.Height > Screen.WorkAreaHeight) then
  6573. begin
  6574. ATalkingForm.Left := 0;
  6575. ATalkingForm.Top := 0;
  6576. end;
  6577. end
  6578. else
  6579. begin
  6580. //TalkingForm.Left := (Screen.WorkAreaWidth - TalkingForm.Width) div 2;
  6581. //TalkingForm.Top := (Screen.WorkAreaHeight - TalkingForm.Height) div 2;
  6582. end;
  6583. if AShowActive then
  6584. ATalkingForm.WindowState := wsNormal
  6585. else
  6586. ATalkingForm.WindowState := wsMinimized;
  6587. ATalkingForm.Show;
  6588. if AShowActive then
  6589. begin
  6590. ShowWindow(ATalkingForm.Handle, SW_SHOW);
  6591. ForceForeGroundWindow(ATalkingForm.Handle);
  6592. end;
  6593. end;
  6594. //------------------------------------------------------------------------------
  6595. procedure UpdateTalkingForm(ARealICQUser: TRealICQUser);
  6596. var
  6597. iLoop: Integer;
  6598. AForm: TTalkingForm;
  6599. begin
  6600. for iLoop := TalkingForms.Count - 1 downto 0 do
  6601. begin
  6602. AForm := TalkingForms[iLoop];
  6603. if not AnsiSameText(AForm.FRealICQClient.LoginName, AForm.FSender) and (AForm.FSender <> '') then
  6604. FreeAndNil(AForm)
  6605. else
  6606. AForm.UpdateMyInfo;
  6607. if AForm.FCategory = tcNormal then
  6608. begin
  6609. if (AForm.FReceiver = ARealICQUser.LoginName) then
  6610. begin
  6611. AForm.SetReceiver(ARealICQUser.LoginName);
  6612. end;
  6613. end
  6614. else
  6615. begin
  6616. if AForm.FLVTeamMembers.Items.IndexOf(ARealICQUser.LoginName) >= 0 then
  6617. begin
  6618. AForm.UpdateTeamMember(ARealICQUser);
  6619. end;
  6620. end;
  6621. end;
  6622. end;
  6623. //------------------------------------------------------------------------------
  6624. function GetTalkingForm(AReceiver: string; ARealICQClient: TRealICQClient = nil): TTalkingForm;
  6625. var
  6626. iLoop: Integer;
  6627. TalkingForm: TTalkingForm;
  6628. RealICQClient: TRealICQClient;
  6629. begin
  6630. Result := nil;
  6631. if ARealICQClient = nil then
  6632. RealICQClient := MainForm.RealICQClient
  6633. else
  6634. RealICQClient := ARealICQClient;
  6635. for iLoop := 0 to TalkingForms.Count - 1 do
  6636. begin
  6637. TalkingForm := TalkingForms[iLoop];
  6638. if TalkingForm.FCategory <> tcNormal then
  6639. Continue;
  6640. if AnsiSameText(TalkingForm.Receiver, AReceiver) and (TalkingForm.FRealICQClient = RealICQClient) then
  6641. begin
  6642. Result := TalkingForm;
  6643. Exit;
  6644. end;
  6645. end;
  6646. end;
  6647. //------------------------------------------------------------------------------
  6648. procedure ChangeTalkingFormVisible(AVisible: Boolean);
  6649. var
  6650. iLoop: Integer;
  6651. AForm: TTalkingForm;
  6652. begin
  6653. for iLoop := 0 to TalkingForms.Count - 1 do
  6654. begin
  6655. AForm := TalkingForms[iLoop];
  6656. AForm.Visible := AVisible;
  6657. if AVisible then
  6658. end;
  6659. end;
  6660. //------------------------------------------------------------------------------
  6661. function OpenTalkingForm(AReceiver: string; AShowActive: Boolean = True; ARealICQClient: TRealICQClient = nil): TTalkingForm;
  6662. var
  6663. iLoop: Integer;
  6664. AForm, TalkingForm: TTalkingForm;
  6665. begin
  6666. // if MainForm.RealICQClient.Friends.IndexOf(AReceiver)<0 then
  6667. MainForm.RealICQClient.GetUserLoginState(AReceiver);
  6668. AForm := nil;
  6669. Result := nil;
  6670. if OpenningTalkingForm then
  6671. Exit;
  6672. try
  6673. OpenningTalkingForm := True;
  6674. for iLoop := 0 to TalkingForms.Count - 1 do
  6675. begin
  6676. AForm := TalkingForms[iLoop];
  6677. if AForm.FCategory <> tcNormal then
  6678. Continue;
  6679. if AnsiSameText(AForm.Receiver, AReceiver) then
  6680. begin
  6681. if AShowActive then
  6682. ForceForeGroundWindow(AForm.Handle);
  6683. Result := AForm;
  6684. Exit;
  6685. end;
  6686. end;
  6687. TalkingForm := TTalkingForm.Create(MainForm);
  6688. TalkingForm.FCategory := tcNormal;
  6689. if ARealICQClient = nil then
  6690. TalkingForm.FRealICQClient := MainForm.RealICQClient
  6691. else
  6692. TalkingForm.FRealICQClient := ARealICQClient;
  6693. TalkingForm.FSender := TalkingForm.FRealICQClient.LoginName;
  6694. TalkingForm.Receiver := AReceiver;
  6695. TalkingForm.UpdateMyInfo;
  6696. TalkingForm.LoadWindowColor;
  6697. TalkingForm.LoadBackGround;
  6698. SetTalkingFormPosition(AForm, TalkingForm, AShowActive);
  6699. Result := TalkingForm;
  6700. finally
  6701. OpenningTalkingForm := False;
  6702. end;
  6703. MainForm.HideMainForm;
  6704. end;
  6705. //------------------------------------------------------------------------------
  6706. function OpenTeamTalkingForm(ATeamID: string; AShowActive: Boolean = True; ARealICQClient: TRealICQClient = nil): TTalkingForm;
  6707. var
  6708. iLoop: Integer;
  6709. AForm, TalkingForm: TTalkingForm;
  6710. begin
  6711. AForm := nil;
  6712. Result := nil;
  6713. if OpenningTalkingForm then
  6714. Exit;
  6715. try
  6716. OpenningTalkingForm := True;
  6717. for iLoop := 0 to TalkingForms.Count - 1 do
  6718. begin
  6719. AForm := TalkingForms[iLoop];
  6720. if AForm.FCategory <> tcTeam then
  6721. Continue;
  6722. if AForm.FTeamID = ATeamID then
  6723. begin
  6724. if AShowActive then
  6725. ForceForeGroundWindow(AForm.Handle);
  6726. Result := AForm;
  6727. Exit;
  6728. end;
  6729. end;
  6730. //Dialogs.ShowMessage('TTalkingForm.Create');
  6731. TalkingForm := TTalkingForm.Create(MainForm);
  6732. //Dialogs.ShowMessage('TTalkingForm.Created');
  6733. TalkingForm.FCategory := tcTeam;
  6734. if ARealICQClient = nil then
  6735. TalkingForm.FRealICQClient := MainForm.RealICQClient
  6736. else
  6737. TalkingForm.FRealICQClient := ARealICQClient;
  6738. TalkingForm.FSender := TalkingForm.FRealICQClient.LoginName;
  6739. TalkingForm.TeamID := ATeamID;
  6740. TalkingForm.UpdateMyInfo;
  6741. TalkingForm.LoadWindowColor;
  6742. TalkingForm.LoadBackGround;
  6743. SetTalkingFormPosition(AForm, TalkingForm, AShowActive);
  6744. Result := TalkingForm;
  6745. finally
  6746. OpenningTalkingForm := False;
  6747. end;
  6748. MainForm.HideMainForm;
  6749. end;
  6750. //------------------------------------------------------------------------------
  6751. function GetTeamTalkingForm(ATeamID: string; ARealICQClient: TRealICQClient = nil): TTalkingForm;
  6752. var
  6753. iLoop: Integer;
  6754. TalkingForm: TTalkingForm;
  6755. RealICQClient: TRealICQClient;
  6756. begin
  6757. Result := nil;
  6758. if ARealICQClient = nil then
  6759. RealICQClient := MainForm.RealICQClient
  6760. else
  6761. RealICQClient := ARealICQClient;
  6762. for iLoop := 0 to TalkingForms.Count - 1 do
  6763. begin
  6764. TalkingForm := TalkingForms[iLoop];
  6765. if TalkingForm.FCategory <> tcTeam then
  6766. Continue;
  6767. if (AnsiSameText(TalkingForm.FTeamID, ATeamID)) and (TalkingForm.FRealICQClient = RealICQClient) then
  6768. begin
  6769. Result := TalkingForm;
  6770. Exit;
  6771. end;
  6772. end;
  6773. end;
  6774. //------------------------------------------------------------------------------
  6775. procedure UpdateTeamTalkingForm(ATeam: TRealICQTeam);
  6776. var
  6777. iLoop: Integer;
  6778. AForm: TTalkingForm;
  6779. begin
  6780. for iLoop := TalkingForms.Count - 1 downto 0 do
  6781. begin
  6782. AForm := TalkingForms[iLoop];
  6783. if AForm.FCategory <> tcTeam then
  6784. Continue;
  6785. if not AnsiSameText(AForm.FRealICQClient.LoginName, AForm.FSender) and (AForm.FSender <> '') then
  6786. FreeAndNil(AForm)
  6787. else
  6788. AForm.UpdateMyInfo;
  6789. if (AForm.FTeamID = ATeam.TeamID) then
  6790. begin
  6791. AForm.SetTeamID(ATeam.TeamID);
  6792. Exit;
  6793. end;
  6794. end;
  6795. end;
  6796. //------------------------------------------------------------------------------
  6797. function InTalkingFormAdvertisement(AHandle: THandle): Boolean;
  6798. var
  6799. iLoop: Integer;
  6800. AForm: TTalkingForm;
  6801. begin
  6802. Result := False;
  6803. for iLoop := 0 to TalkingForms.Count - 1 do
  6804. begin
  6805. AForm := TalkingForms[iLoop];
  6806. if IsChild(AForm.WebBrowserForAdvertisement.Handle, AHandle) then
  6807. begin
  6808. Result := True;
  6809. Exit;
  6810. end;
  6811. end;
  6812. end;
  6813. //------------------------------------------------------------------------------
  6814. function InTalkingFormTeamDisk(AHandle: THandle): Boolean;
  6815. var
  6816. iLoop: Integer;
  6817. AForm: TTalkingForm;
  6818. begin
  6819. Result := False;
  6820. for iLoop := 0 to TalkingForms.Count - 1 do
  6821. begin
  6822. AForm := TalkingForms[iLoop];
  6823. if IsChild(AForm.WebBrowserForTeamDisk.Handle, AHandle) then
  6824. begin
  6825. Result := True;
  6826. Exit;
  6827. end;
  6828. end;
  6829. end;
  6830. //------------------------------------------------------------------------------
  6831. procedure ChangeTalkingFormColor(AColor: TColor);
  6832. var
  6833. iLoop: Integer;
  6834. AForm: TTalkingForm;
  6835. begin
  6836. for iLoop := 0 to TalkingForms.Count - 1 do
  6837. begin
  6838. AForm := TalkingForms[iLoop];
  6839. if not AForm.FUseSelfColor then
  6840. AForm.ChangeUIColor(AColor);
  6841. end;
  6842. end;
  6843. //------------------------------------------------------------------------------
  6844. procedure UpdateTalkingFormAdversement;
  6845. var
  6846. iLoop: Integer;
  6847. AForm: TTalkingForm;
  6848. begin
  6849. for iLoop := 0 to TalkingForms.Count - 1 do
  6850. begin
  6851. AForm := TalkingForms[iLoop];
  6852. AForm.LoadAdvertisement;
  6853. end;
  6854. end;
  6855. //------------------------------------------------------------------------------
  6856. procedure ChangeTalkingFormSkin(ASkinName: string);
  6857. var
  6858. iLoop: Integer;
  6859. AForm: TTalkingForm;
  6860. OldSkin: string;
  6861. begin
  6862. ASkinName := AnsiReplaceText(ASkinName, 'MainForm', '');
  6863. for iLoop := 0 to TalkingForms.Count - 1 do
  6864. begin
  6865. AForm := TalkingForms[iLoop];
  6866. OldSkin := AForm.SkinName;
  6867. try
  6868. AForm.SkinName := ASkinName;
  6869. except
  6870. AForm.SkinName := OldSkin;
  6871. end;
  6872. if not AForm.FUseSelfColor then
  6873. AForm.ChangeUIColor(MainForm.UIMainColor)
  6874. else
  6875. AForm.ChangeUIColor(AForm.FWindowColor);
  6876. end;
  6877. end;
  6878. procedure TTalkingForm.SaveImageInfo(TempFaceFileName: string; iFlag: Integer);
  6879. var
  6880. tempImgInfo: PImageInfo;
  6881. begin
  6882. tempImgInfo := new(PImageInfo);
  6883. tempImgInfo.Name := TempFaceFileName;
  6884. tempImgInfo.iFlag := iFlag;
  6885. ImagesList.Add(tempImgInfo);
  6886. end;
  6887. //------------
  6888. function TTalkingForm.HasMobilePhone(LoginName: string): Boolean;
  6889. var
  6890. iIndex: Integer;
  6891. ListItem: TRealICQContacterListItem;
  6892. begin
  6893. Result := False;
  6894. iIndex := FLVTeamMembers.Items.IndexOf(LoginName);
  6895. if iIndex > -1 then
  6896. begin
  6897. ListItem := FLVTeamMembers.Items.Objects[iIndex] as TRealICQContacterListItem;
  6898. Result := ListItem.HasSMS;
  6899. end;
  6900. end;
  6901. procedure TTalkingForm.spbUserInfoClick(Sender: TObject);
  6902. begin
  6903. miSeeYourDetailInformationClick(nil);
  6904. end;
  6905. //------------------------------------------------------------------------------
  6906. procedure TTalkingForm.spbCopyScreenClick(Sender: TObject);
  6907. var
  6908. Point1, Point2: TPoint;
  6909. begin
  6910. point1 := Point(0, 0);
  6911. point2 := Point(0, 0);
  6912. Point1 := (Sender as TRealICQSpeedButton).ClientToScreen(Point1);
  6913. GetCursorPos(point2);
  6914. if (point2.X - point1.X) <= 17 then
  6915. begin
  6916. if MainForm.CopyScreenHideTalkForm then
  6917. begin
  6918. WindowState := wsMinimized;
  6919. MainForm.Close;
  6920. end;
  6921. try
  6922. ShowCopyScreenForm(Self);
  6923. finally
  6924. if MainForm.CopyScreenHideTalkForm then
  6925. Self.WindowState := wsNormal;
  6926. self.RichEdInputer.SetFocus;
  6927. end;
  6928. end
  6929. else
  6930. begin
  6931. Point1.X := 0;
  6932. Point1.Y := (Sender as TRealICQSpeedButton).Height + 1;
  6933. Point1 := (Sender as TRealICQSpeedButton).ClientToScreen(Point1);
  6934. ppForSnap.Popup(Point1.X, Point1.Y);
  6935. end;
  6936. end;
  6937. procedure TTalkingForm.spbEncryMsgClick(Sender: TObject);
  6938. begin
  6939. spbEncryMsg.Tag := 0;
  6940. spbEncryMsg.Visible := false;
  6941. spbNormalMsg.Visible := true;
  6942. end;
  6943. procedure TTalkingForm.spbNormalMsgClick(Sender: TObject);
  6944. begin
  6945. spbEncryMsg.Tag := 1;
  6946. spbEncryMsg.Visible := true;
  6947. spbNormalMsg.Visible := false;
  6948. end;
  6949. //procedure TTalkingForm.chkEncryMessageClick(Sender: TObject);
  6950. //begin
  6951. // SpbEncryMessage.Enabled:= chkEncryMessage.Checked;
  6952. //end;
  6953. //------------------------------------------------------------------------------
  6954. procedure TTalkingForm.actClearEditExecute(Sender: TObject);
  6955. begin
  6956. RichEdInputer.Clear;
  6957. RichEditTemp.Clear;
  6958. end;
  6959. procedure TTalkingForm.actClearWebExecute(Sender: TObject);
  6960. begin
  6961. ClearHTML(self.WebBrowser);
  6962. end;
  6963. procedure TTalkingForm.Splitter1CanResize(Sender: TObject; var NewSize: Integer; var Accept: Boolean);
  6964. begin
  6965. Accept := (NewSize >= 1) and ((self.ClientHeight - NewSize) >= 250);
  6966. end;
  6967. procedure TTalkingForm.spbSetClick(Sender: TObject);
  6968. var
  6969. Point1: TPoint;
  6970. begin
  6971. point1 := Point(0, 0);
  6972. Point1.Y := (Sender as TRealICQSpeedButton).Height + 1;
  6973. Point1 := (Sender as TRealICQSpeedButton).ClientToScreen(Point1);
  6974. ppForSet.Popup(Point1.X, Point1.Y);
  6975. end;
  6976. initialization
  6977. CoInitialize(nil);
  6978. OleInitialize(nil);
  6979. finalization
  6980. try
  6981. OleUninitialize;
  6982. CoUninitialize;
  6983. except
  6984. end;
  6985. end.