滚动文本示例

光庆 1天前 248

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=379;bottom=74)
winform.add(
plus={cls="plus";left=15;top=15;right=370;bottom=60;bgcolor=0xFFFFFF;font=LOGFONT(h=-21;name='黑体');z=1}
)
/*}}*/

winform.show();

var text = "我是滚动文本"
var w,x = winform.plus.measureString(text).width,0;
var brush = gdip.solidBrush(0xFFFF0000);
var format = gdip.stringformat();
format.lineAlign = 1/*_StringAlignmentCenter*/ ;

winform.plus.onDrawContent = function(graphics,rc,txtColor,rcContent,foregroundColor,font){
	graphics.clear(0xFFF0E68C);
	graphics.textRenderingHint = 4/*_TextRenderingHintAntiAlias*/;
	graphics.drawString(text,font,::RECTF(x,2,w,rc.bottom),format,brush);
	x -= 1;
	if x<-w x=rc.right;
}

winform.plus.setInterval( 
	function(){
		winform.plus.redraw()
	},10 
)

win.loopMessage();

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=554;bottom=74)
winform.add(
plus={cls="plus";left=15;top=15;right=540;bottom=60;bgcolor=0xFFFFFF;font=LOGFONT(h=-21;name='黑体');z=1}
)
/*}}*/

winform.show();

var text = {"习近平出席新疆维吾尔自治区成立70周年庆祝大会",
			"特朗普要求联合国调查“险恶”破坏事件",
			"美国迎来一位最特殊客人 世界哭笑不得",
			"中欧北极航线刚开通 波兰就后悔了",
			"给“第一夫人”送名牌包后 邪教女魔头被抓",
			"欧洲开始对美国武器说“不”",
			index = 1;
			ypos = 0;}
var brush = gdip.solidBrush(0xFFFF0000);
var format = gdip.stringformat();
format.lineAlign = 1/*_StringAlignmentCenter*/ ;

winform.plus.onDrawContent = function(graphics,rc,txtColor,rcContent,foregroundColor,font){
	var next = text.index+1;
	if next>#text next=1;
    graphics.clear(0xFFF0E68C);
    graphics.textRenderingHint = 4/*_TextRenderingHintAntiAlias*/;
    rc.offset(0,text.ypos);
    graphics.drawString(text[text.index],font,::RECTF(rc),format,brush);
    rc.offset(0,rc.height);
    graphics.drawString(text[next],font,::RECTF(rc),format,brush);
}

winform.plus.setInterval( 
    function(){
        text.ypos--;
        if text.ypos<-winform.plus.height {
        	text.ypos=0;
        	text.index++;
        	if text.index>#text text.index=1;
        	win.delay(2000)
        }
        winform.plus.redraw()
    },10
)

win.loopMessage();


最新回复 (6)
  • mfk 1天前
    0 2

  • mfk 1天前
    0 3
    大神精品。 再每行指令上加上注释 对新手更友好了。
  • demo 17小时前
    0 4
    能上下定时多条文本滚动吗?新闻那样
  • Mr_MAO 17小时前
    0 5

    厉害!学习了!

    照虎画猫,来一个static控件版的跑马灯效果↓

    //水平方向滚动
    import win.ui;
    /*DSG{{*/
    var winform = win.form(text="滚动 static控件 文本示例1";right=455;bottom=95;clipch=1)
    winform.add(
    static={cls="static";left=48;top=32;right=400;bottom=64;color=0x0000FF;db=1;dl=1;dr=1;dt=1;nWrap=1;transparent=1;z=1}
    )
    /*}}*/
    
    import color;
    var colorBack = color.rgb(255,255,0);
    
    var text = "我是滚动文本" 
    
    var sz = ::SIZE();
    ::Gdi32.GetTextExtentPoint32(::GetDC(winform.hwnd), text, #text/2, sz) 
    var textW = sz.cx;  //计算文本的宽度(像素)
    
    var x = 0;
    winform.static.onDrawItem = function(drawItem){  
        var hdc = drawItem.hDC;
        var rc =  drawItem.rcItem;
        gdi.fillRect(hdc, colorBack, rc)     
        ::DrawText(hdc, text, -1, rc.offset(rc.right+x,0), 0x20|0|4)
        x--;
        if(x<-(rc.right+textW)) x = 0;
    }
    
    winform.static.setInterval( 
        function(){
            winform.static.redraw()
        },10
    )
    
    winform.static.modifyStyle(,0xD/*_SS_OWNERDRAW*/)
    winform.show();
    win.loopMessage();


    庆大有更新了竖向滚动的例子,也跟着学一下↓

    //竖向滚动
    import win.ui;
    /*DSG{{*/
    var winform = win.form(text="滚动 static控件 文本示例2";right=552;bottom=95;clipch=1)
    winform.add(
    static={cls="static";left=48;top=32;right=511;bottom=64;border=1;clip=1;nWrap=1;transparent=1;z=1}
    )
    /*}}*/
    
    import color;
    var colorBack = color.rgb(255,255,0);
    var colorText = color.rgb(255,0,0);
    
    var texts = {"习近平出席新疆维吾尔自治区成立70周年庆祝大会",
                "特朗普要求联合国调查“险恶”破坏事件",
                "美国迎来一位最特殊客人 世界哭笑不得",
                "中欧北极航线刚开通 波兰就后悔了",
                "给“第一夫人”送名牌包后 邪教女魔头被抓",
                "欧洲开始对美国武器说“不”",
                index = 1;
                ypos = 0;
    }
    
    winform.static.onDrawItem = function(drawItem){  
        var hdc = drawItem.hDC;
        var rc =  drawItem.rcItem;
        gdi.fillRect(hdc, colorBack, rc)  
         
        var next = texts.index+1;
        if(next>#texts) next=1;
        var font = ::LOGFONT(h=-18; name='微软雅黑';weight=700;underline=0x1);
        var hfont = ::CreateFontIndirect(font)
        ::SelectObject(hdc,hfont)
        ::SetTextColor(hdc, colorText);
        ::DrawText(hdc, texts[texts.index], -1, rc.offset(10,texts.ypos), 0x20|0|4)
        ::DrawText(hdc, texts[next], -1, rc.offset(0,rc.height), 0x20|0|4)
    }
    
    winform.static.setInterval( 
        function(){
            texts.ypos--;
            if(texts.ypos<-winform.static.height){
                texts.ypos=0;
                texts.index++;
                if(texts.index>#texts) texts.index=1;
                win.delay(2000)
            }
            winform.static.redraw()
        },10
    )
    
    
    winform.static.modifyStyle(,0xD/*_SS_OWNERDRAW*/)
    
    winform.show();
    win.loopMessage();
  • 光庆 16小时前
    0 6
    demo 能上下定时多条文本滚动吗?新闻那样
    已完成
  • demo 6小时前
    0 7
    简直无法用言语表达,厉害
返回