转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
我写的换肤的类.应用于播放器中.         ★★★★

我写的换肤的类.应用于播放器中.

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2259 更新时间:2009/4/23 18:27:03
-1 then ImageIndex[Current] := 0; if Sender = BackImage then Exit; if inCtrl((Sender as TImage).Tag, X, Y) then begin SetText(1,(Sender as TImage).Hint); //设置提示. Current := (Sender as TImage).Tag; if ssLeft in Shift then ImageIndex[Current] := 2 else ImageIndex[Current] := 1; end else begin Current := -1; ImageIndex[(Sender as TImage).Tag] := 1; end; end; procedure TSkin.CtrlOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then ImageIndex[(Sender as TImage).Tag] := 0; if InCtrl((Sender as TImage).Tag, X, Y) then SendMessage(Frm.Handle,MYSKIN_BUTTONUP, Integer(PChar(Ctrls[(Sender as TImage).Tag].Require)),0); Current := -1; end; //鼠标在背景上点击 procedure TSkin.BackOnMouseDown(Sender : TObject; Button : TMouseButton; Shift : TShiftState; X, Y : Integer); begin if (Sender = BackImage)then if (Button = mbLeft) then //左击. SendMessage(Frm.Handle,MYSKIN_DOWNBACKRECT,1,0) else SendMessage(Frm.Handle,MYSKIN_DOWNBACKRECT,2,0); end; //鼠标在文字区域上右击 procedure TSkin.ETextOnMouseDown(Sender : TObject; Button : TMouseButton; Shift : TShiftState; X, Y : Integer); begin if (Button = mbRight) then SendMessage(Frm.Handle,MYSKIN_RDOWNTEXT, Integer(Pchar(Texts[(Sender as TImage).Tag].Require)),0); if (Button = mbLeft) then SendMessage(Frm.Handle,MYSKIN_LDOWNTEXT, Integer(Pchar(Texts[(Sender as TImage).Tag].Require)),0); end; //设置 Text1 滚动速度. procedure TSkin.SetTextScrollTimer(const Value: Integer); begin If Value < 50 then FTextScrollTimer := 50 else FTextScrollTimer := Value; ScrollTimer.Interval:=FTextScrollTimer; end; //禁止/激活 Text1 文字滚动. procedure TSkin.SetTimerEnabled(const Value: Boolean); begin FTimerEnabled := Value; ScrollTimer.Enabled := FTimerEnabled; end; //Timer.OnTimer 事件. procedure TSkin.TextTimer(Sender: TObject); var m,s : string; begin if length(FText1Text)<10 then Exit; //文本太短,则不要滚动. s := FText1Text; m := leftstr(s,1); FText1Text := midstr(s,2,length(s)-1)+m; SetText(0,FText1Text); end; //鼠标进入某 Rect. function TSkin.inCtrl(vIndex, X, Y: Integer): Boolean; begin Result := PtInRect(Ctrls[vIndex].Ctrl.ClientRect, Point(X, Y)); end; //转换:Min/Noraml function TSkin.ReLoadSkin(vFile : String):Boolean; var StrMin : string; a : integer; t : Array[0..2] of String; begin Result := False; //暂存 Text 显示. for a:=0 to TextCount-1 do t[a]:=Texts[a].EText.Hint; ClearSkin; //因 Slider 的 Get 和 Set 返回值类型不同. CtrlCount := 0; //在类中暂存有些麻烦.所以放到了调用函数里. SliderCount := 0; TextCount := 0; //重置一些控件. Isdown := false; if not MinState then //Normal -> Min. begin StrMin:= vFile+''''min\skin.ini''''; //得到皮肤路径. if LoadSkin(StrMin) then //可以转换. begin MinState := not MinState; Result := True; end else LoadSkin(vFile+''''skin.ini''''); end else begin //Min -> Normal. LoadSkin(vFile+''''skin.ini''''); MinState := not MinState; Result := True; end; for a:=0 to TextCount-1 do Settext(a,t[a]);//重置. end; function TSkin.LoadSkin(vFile: String): Boolean; var F : TextFile; vStr, Key, KeyStr, ValStr : String; a, vIndex, sIndex,eIndex : Integer; w1:TBitmap; rgn: HRGN; begin Result := False; if not FileExists(vFile) then Exit; ClearSkin; AssignFile(F, vFile); Key := ''''''''; vIndex := -1; sIndex := -1; eIndex:=-1; try Reset(F); while not EOF(F) do begin if ReadFile(F, KeyStr, ValStr) then begin Key := LowerCase(Trim(KeyStr)); if Key=''''button'''' then vIndex := CreateCtrl; if Key=''''slider'''' then sIndex := CreateSlider; if Key=''''text'''' then eIndex := CreateText; Continue; end; KeyStr := Trim(LowerCase(KeyStr)); if (Key = ''''frm'''') then begin if KeyStr = ''''width'''' then frm.Width := StrToIntDef(ValStr, 0); if KeyStr = ''''height''''then frm.height := StrToIntDef(ValStr, 0); if KeyStr = ''''frmanysapecolor'''' then FrmAnySapeColor:=RGBtoColor(ValStr); end; {窗体使用异型样式.} if (Key = ''''button'''') then begin if vIndex = -1 then Continue; if KeyStr = ''''left'''' then Ctrls[vIndex].Ctrl.Left := StrToIntDef(ValStr, 0); if KeyStr = ''''top'''' then Ctrls[vIndex].Ctrl.Top := StrToIntDef(ValStr, 0); if KeyStr = ''''width'''' then Ctrls[vIndex].Ctrl.Width := StrToIntDef(ValStr, 0); if KeyStr = ''''height'''' then Ctrls[vIndex].Ctrl.Height := StrToIntDef(ValStr, 0); if KeyStr = ''''hint'''' then Ctrls[vIndex].Ctrl.Hint := ValStr; if KeyStr = ''''require'''' then Ctrls[vIndex].Require := ValStr; end; if (Key = ''''slider'''') then begin if sIndex = -1 then Continue; if KeyStr = ''''left'''' then sliders[sIndex].Slider.Left := StrToIntDef(ValStr, 0); if KeyStr = ''''top'''' then sliders[sIndex].Slider.Top := StrToIntDef(ValStr, 0); if KeyStr = ''''width'''' then sliders[sIndex].Slider.Width := StrToIntDef(ValStr, 0); if KeyStr = ''''height'''' then sliders[sIndex].Slider.Height := StrToIntDef(ValStr, 0); if KeyStr = ''''min'''' then sliders[sIndex].min := StrToIntDef(ValStr, 0); if KeyStr = ''''max'''' then sliders[sIndex].max := StrToIntDef(ValStr, 0); if KeyStr = ''''style'''' then sliders[sIndex].Style := ValStr; if KeyStr = ''''hint'''' then sliders[sIndex].Slider.Hint := ValStr; if KeyStr = ''''require'''' then sliders[sIndex].Require := ValStr; end; if (Key = ''''text'''') then begin if eIndex = -1 then Continue; if KeyStr = ''''left'''' then Texts[eIndex].EText.Left := StrToIntDef(ValStr, 0); if KeyStr = ''''top'''' then Texts[eIndex].EText.Top := StrToIntDef(ValStr, 0); if KeyStr = ''''width'''' then Texts[eIndex].EText.Width := StrToIntDef(ValStr, 0); if KeyStr = ''''height'''' then Texts[eIndex].EText.Height := StrToIntDef(ValStr, 0); if KeyStr = ''''fcolor'''' then Texts[eIndex].EText.Canvas.Font.Color := RGBtoColor(ValStr); if KeyStr = ''''fheight'''' then Texts[eIndex].EText.Canvas.Font.Height := StrToIntDef(ValStr, 0); if KeyStr = ''''fname'''' then Texts[eIndex].EText.Canvas.Font.Name := ValStr; if KeyStr = ''''hint'''' then Texts[eIndex].EText.Hint := ValStr; if KeyStr = ''''require'''' then Texts[eIndex].Require := ValStr; end; end; CloseFile(F); except Exit; end; try vStr := ExtractFilePath(vFile); BKGImage[0].LoadFromFile(vStr + ''''normal.bmp''''); BKGImage[1].LoadFromFile(vStr + ''''enter.bmp''''); BKGImage[2].LoadFromFile(vStr + ''''click.bmp''''); BackImage.Picture := BKGImage[0]; {实现异型窗体.} w1:=TBitmap.Create; w1.Assign(BackImage.Picture.Bitmap); rgn := CreateRegion(w1,FrmAnySapeColor,frm.Handle); if rgn<>0 then SetWindowRgn(frm.Handle, rgn, true); w1.Free; {令窗体区域外颜色设置为:TransparentColorValue 即可.} except {即便是矩形窗口也要执行,好将上一skin还原回矩形样式.} Exit; end; //加载 Button 图片. for a := 0 to CtrlCount - 1 do ImageIndex[a] := 0; for a := 0 to SliderCount - 1 do //滚动条. begin Sliders[a].Slider.Canvas.CopyRect(Sliders[a].Slider.ClientRect, BKGImage[1].Bitmap.Canvas,Rect(Sliders[a].Slider.Left, Sliders[a].Slider.Top, Sliders[a].Slider.Left+Sliders[a].Slider.Width, Sliders[a].Slider.Top+Sliders[a].Slider.Height)); end; //文字框初始化. for a := 0 to textCount - 1 do SetText(a,Texts[a].EText.Hint); Result := True; end; function TSkin.ReadFile(var F: TextFile; var KeyStr, ValStr: String): Boolean; var vStr : String; a : Integer; begin Readln(F, vStr); KeyStr := ''''''''; ValStr := ''''''''; Result := False; vStr := Trim(vStr); if vStr <> '''''''' then begin if (Copy(vStr, 1, 2) = ''''//'''') then exit;//注释文本. if (Copy(vStr, 1, 1) = ''''['''') and (Copy(vStr, Length(vStr), 1) = '''']'''') then begin Result := True; KeyStr := Copy(vStr, 2, Length(vStr) - 2); Exit; end; a := Pos(''''='''', vStr); if a > 0 then begin KeyStr := UpperCase(Trim(Copy(vStr, 1, a - 1))); ValStr := Trim(Copy(vStr, a + 1, Length(vStr))); end; end; end; //设定按钮应显示哪种状态图. procedure TSkin.SetImageIndex(Index: Integer; const Value: Integer); begin Ctrls[Index].Ctrl.Canvas.CopyRect(Ctrls[Index].Ctrl.ClientRect, BKGImage[Value].Bitmap.Canvas, Rect(Ctrls[Index].Ctrl.Left, Ctrls[Index].Ctrl.Top, Ctrls[Index].Ctrl.Left + Ctrls[Index].Ctrl.Width, Ctrls[Index].Ctrl.Top + Ctrls[Index].Ctrl.Height)); end; //设置 Slider 的位置. function TSkin.SliderSeek(Index : Integer;Offset : Real) : Boolean; var n : Integer; begin //Offset 为百分比:1.00-0.00 Result :=False; if (Index >

上一页  [1] [2] [3]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台