Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

查看: 4008|回复: 13

发一个动态的app,谁用谁知道 [复制链接]

Rank: 2Rank: 2

UID
1540587
帖子
172
PB币
1177
贡献
0
技术
0
活跃
159
发表于 2015-7-14 17:51:09 |显示全部楼层
三个部分  1. Config.INI       2. AppPanel.INI     3. Transition.lua

Config.INI     (更换个性的 *.png 及其链接启动)

  [Variables]
   AppIcon1=outlook.png
   AppPath1=OUTLOOK.exe
   AppIcon2=excel.png
   AppPath2=EXCEL.exe
   AppIcon3=word.png
   AppPath3=WINWORD.exe
   AppIcon4=powerpoint.png
   AppPath4=POWERPNT.exe
   AppIcon5=onenote.png
   AppPath5=notepad.exe
   LinkPath1=http://www.163.com


AppPanel.INI  (不用更改)

[Rainmeter]
Update=25
MouseActionCursor=0

[Metadata]
Name=Application Panel
Author=Dyar Perdana
Information=Simple circle panel for app shortcuts
Version=1.0
License=Creative Commons Attribution-NonCommercial-ShareAlike 3.0

[Variables]
@include=Config.inc
_measureCalc=[!EnableMeasure MeasureCalc]
Show=[!SetVariable _measureCalc ""][!SetOption MeterPin Y 5][!SetOption MeterPin ImageRotate -90][!SetOption MeterPin LeftMouseUpAction #*Hide*#][!UpdateMeterGroup Trigger][!Redraw]
Hide=[!SetVariable _measureCalc "[!EnableMeasure MeasureCalc]"][!SetOption MeterPin Y 25][!SetOption MeterPin ImageRotate 90][!SetOption MeterPin LeftMouseUpAction #*Show*#][!UpdateMeterGroup Trigger][!Redraw]
Pin.Show=!CommandMeasure MeasureTransition "Fade('MeterPin', 50, 'Auto', 10)"
Pin.Hide=!CommandMeasure MeasureTransition "FadeOut('MeterPin', 'Auto', 10)"
Logo.Show=!CommandMeasure MeasureTransition "FadeIn('MeterLogo', 'Auto', 10)"
Logo.Hide=!CommandMeasure MeasureTransition "FadeOut('MeterLogo', 'Auto', 10)"


Meter3.Expand=!CommandMeasure MeasureTransition "MoveToX('Meter3', 45)"
Meter3.Collapse=!CommandMeasure MeasureTransition "MoveToX('Meter3', 50)"
Meter2.Expand=!CommandMeasure MeasureTransition "MoveToX('Meter2', 90)"
Meter2.Collapse=!CommandMeasure MeasureTransition "MoveToX('Meter2', 50)"
Meter4.Expand=!CommandMeasure MeasureTransition "MoveToX('Meter4', 135)"
Meter4.Collapse=!CommandMeasure MeasureTransition "MoveToX('Meter4',50)"
Meter5.Expand=!CommandMeasure MeasureTransition "MoveToX('Meter5', 180)"
Meter5.Collapse=!CommandMeasure MeasureTransition "MoveToX('Meter5', 50)"
; -------------------------------------------------------
;                      M E A S U R E S
; -------------------------------------------------------

[MeasureTransition]
  Measure=Script
  ScriptFile=Transition.lua
  Steps=11

[MeasureCalc]
  Measure=Calc
  Formula=MeasureCalc+(MeasureCalc<=46)
  IfEqualValue=46
  IfEqualAction=[!DisableMeasure MeasureCalc][#Logo.Show#][#Meter2.Collapse#][#Meter3.Collapse#][#Meter4.Collapse#][#Meter5.Collapse#][!SetOption Background SolidColor ""][!UpdateMeter Background][!RainmeterHideMeter Meter1][!RainmeterHideMeter Meter2][!RainmeterHideMeter Meter3][!RainmeterHideMeter Meter4][!RainmeterHideMeter Meter5][!Redraw]
  Disabled=1

[MeasureCalc2]
  Measure=Calc
  Formula=MeasureCalc2+(MeasureCalc2<=27)
  IfEqualValue=27
  IfEqualAction=[!DisableMeasure MeasureCalc2][#Pin.Show#]
  Disabled=1


; -------------------------------------------------------
;                       S T Y L E S
; -------------------------------------------------------
; 定义了图标大小
[StyleApp]
  X=0
  Y=5
  W=42
  H=42
  AntiAlias=1
  UpdateDivider=-1

; -------------------------------------------------------
;                       M E T E R S
; -------------------------------------------------------

[Background]
  Meter=Image
  Group=Trigger
  X=0
  Y=0
  W=240
  H=40
  MouseOverAction=[!RainmeterShowMeter Meter1][!RainmeterShowMeter Meter2][!RainmeterShowMeter Meter3][!RainmeterShowMeter Meter4][!RainmeterShowMeter Meter5][!DisableMeasure MeasureCalc][!EnableMeasure MeasureCalc2][#Logo.Hide#][#Meter2.Expand#][#Meter3.Expand#][#Meter4.Expand#][#Meter5.Expand#][!SetOption Background SolidColor 00000001][!UpdateMeter Background][!Redraw]
  MouseLeaveAction=#_measureCalc#[!DisableMeasure MeasureCalc2][#Pin.Hide#]
  DynamicVariables=1
  UpdateDivider=-1
  
[Meter1]
  Meter=Image
  MeterStyle=StyleApp
  ImageName=#AppIcon1#
  LeftMouseUpAction=["#AppPath1#"]
  Disabled=1
  Hidden=1
  
[Meter2]
  Meter=Image
  MeterStyle=StyleApp
  ImageName=#AppIcon2#
  LeftMouseUpAction=["#AppPath2#"]
  Hidden=1
  
[Meter3]
  Meter=Image
  MeterStyle=StyleApp
  ImageName=#AppIcon3#
  LeftMouseUpAction=["#AppPath3#"]  
  Hidden=1
  
[Meter4]
  Meter=Image
  MeterStyle=StyleApp
  ImageName=#AppIcon4#
  LeftMouseUpAction=["#AppPath4#"]  
  Hidden=1
  
[Meter5]
  Meter=Image
  MeterStyle=StyleApp
  ImageName=#AppIcon5#
  LeftMouseUpAction=["#AppPath5#"]  
  Hidden=1
  
[MeterLogo]
  Meter=Image
  MeterStyle=StyleBG
  X=0
  Y=0
  W=60
  h=1
  SolidColor=000000  

  ;Meter=Image
  ;MeterStyle=StyleApp
  ;ImageName=office2013.png
  ;ImageAlpha=255
  ;X=0
  ;Y=4
  ;W=48
  ;H=48
  ;Hidden=1

Transition.lua  (rainmeter中的脚本语言,还是比较容易理解)

function Initialize()
        Script = SELF:GetName()

        --SET DEFAULT STEPS.
        DefaultSteps = SELF:GetNumberOption('Steps', 25)
        --This is allowed as a global setting because the number of
        --steps required for a transition can vary widely depending
        --on the skin's Update rate.

        --CREATE GLOBAL QUEUE.
        Queue = {}

        --CREATE CURVES TABLE.
        Curves = {}

        --CREATE AUTO-OPTIONS TABLE.
        AutoOptions = {}

        --LOAD MODULES.
        ModuleProfiles()
        ModuleMoveX()
        ModuleMoveY()
        ModuleFade()
        --Modules create new curves, auto-options, shorthand functions and profile functions.
end

function Start(Curve, Meters, Target, Modifier, VariableName, Steps)
        for MeterName in string.gmatch(Meters, '[^%s%,]+') do

                --DEFINE MISSING AND/OR UNFORMATTED PARAMETERS
                local Target       = tonumber(Target)
                local Modifier     = Modifier         or 'To'
                local VariableName = VariableName     or 'Auto'
                local Steps        = tonumber(Steps)  or DefaultSteps

                --IF METER DOES NOT EXIST, TREAT AS A GROUP.
                local Group = SKIN:GetMeter(MeterName) and 0 or 1

                --DETERMINE AUTO-OPTION BEHAVIOR
                local Xi, UpdateFunction
                if VariableName == 'Auto' then
                        if Group == 0 then
                                local Meter = SKIN:GetMeter(MeterName)
                                Xi, UpdateFunction = AutoOptions[Curve](MeterName)
                        else
                                print('Error: a variable name must be given for transitions on meter groups.')
                                return
                        end
                else
                        Xi = tonumber(SKIN:GetVariable(VariableName, ''))
                        UpdateFunction = function(X)
                                SKIN:Bang('!SetVariable', VariableName, X)
                        end
                end

                --DETERMINE Xf (ENDPOINT) BASED ON MODIFIER.
                local Xf

                if Modifier == 'To' then
                        Xf = Target
                elseif Modifier == 'By' then
                        Xf = Xi + Target
                else
                        Modifier = tonumber(Modifier)
                        if math.abs(Modifier - Xi) < math.abs(Target - Xi) then
                                Xf = Target
                        else
                                Xf = Modifier
                        end
                end

                --REMOVE EXISTING JOB ON CURRENT METER & OPTION
                for i,v in ipairs(Queue) do
                        if (v['n'] == MeterName) and (v['v'] == VariableName) then
                                table.remove(Queue, i)
                        end
                end

                --ADD NEW JOB
                table.insert(Queue, {
                        n  = MeterName,
                        v  = VariableName,
                        g  = Group,
                        t  = 0,
                        Xi = Xi,
                        Xf = Xf,
                        s  = Steps,
                        c  = Curve,
                        f  = UpdateFunction
                } )

                --IF THE QUEUE WAS PREVIOUSLY EMPTY, ACTIVATE UPDATE().
                if #Queue == 1 then
                        SKIN:Bang('!SetOption', Script, 'UpdateDivider', 1)
                        SKIN:Bang('!UpdateMeasure', Script)
                end
        end
end

function Update()
        if #Queue > 0 then
                for i,v in ipairs(Queue) do
                        local MeterName      = v['n']
                        local VariableName   = v['v']
                        local Group          = v['g']
                        local t              = v['t']
                        local Xi             = v['Xi']
                        local Xf             = v['Xf']
                        local Steps          = v['s']
                        local Curve          = v['c']
                        local UpdateFunction = v['f']

                        if t == Steps then
                                X = Xf
                                table.remove(Queue, i)
                        else
                                X = Curves[Curve](t, Xi, Xf, Steps)
                                v['t'] = t + 1
                        end

                        UpdateFunction(X)
                        local BangType = (Group == 1) and 'Group' or ''
                        SKIN:Bang('!UpdateMeter'..BangType, MeterName)
                end
        end

        --IF THE QUEUE IS NOW EMPTY, DEACTIVATE UPDATE().
        if #Queue == 0 then
                SKIN:Bang('!SetOption', Script, 'UpdateDivider', -1)
        end

        return #Queue
end

-----------------------------------------------------------------------
-- PROFILE MODULE

function ModuleProfiles()
        Profiles = {}
        ProfileFunctions = {}

        --ADD PROFILES FROM SCRIPT OPTIONS
        local CountProfiles = 0
        repeat
                CountProfiles = CountProfiles + 1
                if SELF:GetOption('Profile'..CountProfiles, '') ~= '' then
                        local Parameters = {}
                        for p in string.gmatch(SELF:GetOption('Profile'..CountProfiles), '[^%;]+') do
                                table.insert(Parameters, p)
                        end

                        --REMOVE FIRST PARAMETER, USE AS THE NAME OF THE PROFILE.
                        local ProfileName = table.remove(Parameters, 1)
                        Profiles[ProfileName] = Parameters
                else
                        CountProfiles = -1
                end
        until CountProfiles == -1

        Profile = function(ProfileName)
                local ShorthandName = Profiles[ProfileName][1]
                local ShorthandFunction = ProfileFunctions[ShorthandName]
                ShorthandFunction(unpack(Profiles[ProfileName], 2))
        end
end

-----------------------------------------------------------------------
-- TRANSITION MODULES

function ModuleMoveX()
        Curves['MoveX'] = function(t, Xi, Xf, Steps)
                return Xi + ((Xf - Xi) / 2) + ((Xf - Xi) / 2) * math.sin(math.pi * ((t / Steps) - 1/2))
        end
       
        AutoOptions['MoveX'] = function(MeterName)
                local Meter = SKIN:GetMeter(MeterName)
                local Xi = Meter:GetX()
                local UpdateFunction = function(X)
                        SKIN:Bang('!SetOption', MeterName, 'X', X)
                end
                return Xi, UpdateFunction
        end

        MoveToX = function(Meters, Target, VariableName, Steps)
                Start('MoveX', Meters, Target, 'To', VariableName, Steps)
        end

        MoveByX = function(Meters, Target, VariableName, Steps)
                Start('MoveX', Meters, Target, 'By', VariableName, Steps)
        end

        MoveToggleX = function(Meters, Modifier, Target, VariableName, Steps)
                Start('MoveX', Meters, Target, Modifier, VariableName, Steps)
        end

        if ProfileFunctions then
                ProfileFunctions['MoveToX']     = MoveToX
                ProfileFunctions['MoveByX']     = MoveByX
                ProfileFunctions['MoveToggleX'] = MoveToggleX
        end
end

function ModuleMoveY()
        Curves['MoveY'] = function(t, Xi, Xf, Steps)
                return Xi + ((Xf - Xi) / 2) + ((Xf - Xi) / 2) * math.sin(math.pi * ((t / Steps) - 1/2))
        end

        AutoOptions['MoveY'] = function(MeterName)
                local Meter = SKIN:GetMeter(MeterName)
                local Yi = Meter:GetY()
                local UpdateFunction = function(Y)
                        SKIN:Bang('!SetOption', MeterName, 'Y', Y)
                end
                return Yi, UpdateFunction
        end

        MoveToY = function(Meters, Target, VariableName, Steps)
                Start('MoveY', Meters, Target, 'To', VariableName, Steps)
        end

        MoveByY = function(Meters, Target, VariableName, Steps)
                Start('MoveY', Meters, Target, 'By', VariableName, Steps)
        end

        MoveToggleY = function(Meters, Modifier, Target, VariableName, Steps)
                Start('MoveY', Meters, Target, Modifier, VariableName, Steps)
        end

        if ProfileFunctions then
                ProfileFunctions['MoveToY']     = MoveToY
                ProfileFunctions['MoveByY']     = MoveByY
                ProfileFunctions['MoveToggleY'] = MoveToggleY
        end
end

function ModuleFade()
        Curves['Fade'] = function(t, Xi, Xf, Steps)
                return Xi + t * (Xf - Xi) / Steps
        end

        AutoOptions['Fade'] = function(MeterName)
                local Meter = SKIN:GetMeter(MeterName)
                local Ai, UpdateFunction
                if Meter:GetOption('ImageAlpha', '') ~= '' then
                        Ai = tonumber(Meter:GetOption('ImageAlpha'))
                        UpdateFunction = function(A)
                                SKIN:Bang('!SetOption', MeterName, 'ImageAlpha', A)
                        end
                else
                        for _,Option in ipairs( { 'ImageTint', 'FontColor', 'PrimaryColor', 'BarColor', 'LineColor', 'SolidColor' } ) do
                                if Meter:GetOption(Option, '') ~= '' then
                                        local Colors = ParseColorCode(Meter:GetOption(Option))
                                        Ai = Colors[4]
                                        UpdateFunction = function(A)
                                                SKIN:Bang('!SetOption', MeterName, Option, Colors[1]..','..Colors[2]..','..Colors[3]..','..A)
                                        end
                                        break
                                end
                        end
                end
                return Ai, UpdateFunction
        end

        Fade = function(Meters, Target, VariableName, Steps)
                Start('Fade', Meters, Target, 'To', VariableName, Steps)
        end

        FadeIn = function(Meters, VariableName, Steps)
                Start('Fade', Meters, 255, 'To', VariableName, Steps)
        end

        FadeOut = function(Meters, VariableName, Steps)
                Start('Fade', Meters, 0, 'To', VariableName, Steps)
        end

        FadeToggle = function(Meters, Modifier, Target, VariableName, Steps)
                Modifier = Modifier and Modifier or 0
                Target = Target and Target or 255
                Start('Fade', Meters, Target, Modifier, VariableName, Steps)
        end

        if ProfileFunctions then
                ProfileFunctions['Fade']       = Fade
                ProfileFunctions['FadeIn']     = FadeIn
                ProfileFunctions['FadeOut']    = FadeOut
                ProfileFunctions['FadeToggle'] = FadeToggle
        end
end

-----------------------------------------------------------------------
-- HELPER FUNCTIONS

function ParseColorCode(String)
        local Colors = {}

        for a in string.gmatch(String, '[%a%d]+') do
                table.insert(Colors, a)
        end

        if #Colors == 1 then
                local Hex = table.remove(Colors, 1)
                for a in string.gmatch(Hex, '[%a%d][%a%d]') do
                        a = tonumber(a, 16)
                        table.insert(Colors, a)
                end
        else
                for i,v in ipairs(Colors) do
                        v = tonumber(v)
                end
        end

        if #Colors == 3 then
                table.insert(Colors, 255)
        end

        return Colors
end

--by Kaelri

Rank: 2Rank: 2

UID
1540587
帖子
172
PB币
1177
贡献
0
技术
0
活跃
159
发表于 2015-7-15 10:04:51 |显示全部楼层
这个皮肤利用 Transition.lua 脚本产生的动画显示APP图标,类似于objectdock plus或dock、仿mac dock 的动画效果。修改 Transition.lua  可以改变图标延伸的方向,默认是向右,也可向其他方向。当鼠标略过,显示一排APP应用图标。 (rainmeter 特点: 占用RAM随皮肤大小变化、几乎不占用CPU,国产的雨滴则相反,超高的CPU占用和超低的RAM占用。)

Rank: 2Rank: 2

UID
1540587
帖子
172
PB币
1177
贡献
0
技术
0
活跃
159
发表于 2015-7-15 10:08:08 |显示全部楼层

Rank: 2Rank: 2

UID
4198017
帖子
99
PB币
132
贡献
0
技术
2
活跃
296
发表于 2015-10-18 17:55:25 |显示全部楼层
怎么用?没懂

Rank: 2Rank: 2

UID
982758
帖子
291
PB币
28
贡献
0
技术
0
活跃
231
发表于 2015-12-8 11:06:51 |显示全部楼层
pcbeta_murphy 发表于 2015-7-15 10:04
这个皮肤利用 Transition.lua 脚本产生的动画显示APP图标,类似于objectdock plus或dock、仿mac dock 的动画 ...

感谢,感谢。

Rank: 1

UID
4237456
帖子
59
PB币
8
贡献
0
技术
0
活跃
114
发表于 2015-12-15 13:31:36 |显示全部楼层
感谢楼主分享谢谢

Rank: 1

UID
3647884
帖子
27
PB币
13
贡献
0
技术
0
活跃
28
发表于 2016-1-22 15:04:34 |显示全部楼层
怎么用???????

Rank: 1

UID
2486807
帖子
15
PB币
0
贡献
0
技术
0
活跃
13
发表于 2016-2-11 22:16:46 |显示全部楼层
不明觉厉啊

Rank: 1

UID
1541602
帖子
99
PB币
23
贡献
0
技术
0
活跃
32
发表于 2016-2-28 16:05:31 |显示全部楼层
热热热热热热热热热热热热

Rank: 1

UID
3009233
帖子
61
PB币
32
贡献
0
技术
0
活跃
48
发表于 2016-3-3 10:26:36 |显示全部楼层
不错不错,支持支持

Rank: 2Rank: 2

UID
3154883
帖子
144
PB币
268
贡献
0
技术
0
活跃
70
发表于 2016-3-7 17:54:30 |显示全部楼层
只有大神们懂啦。。。。。

Rank: 1

UID
4731390
帖子
13
PB币
57
贡献
0
技术
0
活跃
14
发表于 2016-3-26 10:33:20 |显示全部楼层
感谢楼主分享谢谢

Rank: 2Rank: 2

UID
4699277
帖子
117
PB币
19
贡献
0
技术
0
活跃
63
发表于 2016-5-2 22:08:07 |显示全部楼层

感谢楼主分享谢谢

Rank: 2Rank: 2

UID
259287
帖子
98
PB币
1699
贡献
0
技术
0
活跃
116
发表于 2016-6-25 15:21:14 |显示全部楼层
不明觉厉 aaaaaaaaaaaa
关闭

站长推荐

回顶部
Copyright (C) 2005-2017 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛 | 电脑硬件 | 安卓软件