无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 128152|回复: 501
打印 上一主题 下一主题

[发布] 增强 GRUB4DOS 菜单编辑功能,支持动画,支持精简字库,支持图形菜单

    [复制链接]
跳转到指定楼层
#
发表于 2015-7-9 20:57:09 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
[ 本帖最后由 2011yaya2007777 于 2023-3-29 16:11 编辑 ]\n\n

2023-03-29
  增加外部定时器应用:进度条(ProgressBar)。
  使用方式:ProgressBar [--no-box] 左上角x 左上角y x尺寸 y尺寸 颜色 模式
  颜色:24位色  0x红红绿绿蓝蓝
  模式(0-3):1.水平从左到右  2.水平从右到左  3.垂直从上到下  4.垂直从下到上
  模式(4-7):0.递增  1.递减
  x与y采用像素表示
  --no-box: 在递增模式不显示边框

2021-10-13
  增强菜单项目、项目注释以及菜单字符串的文字颜色功能。例如:
    title boot $[0xff00ff]Windows $[]10x64
2019-12-20
  1. 改进 setmenu 字符串功能,增加索引和菜单区域内居中。字符串可以使用背景色。
     setmenu --string[=iINDEX]=[X|s|m]=[-]Y=COLOR="STRING"
  iINDEX 范围是 i0-i15. 如果没有 =iINDEX 索引自动递增。
  如果水平位置是 s 则字符串在全屏居中; 如果水平位置是 m 则字符串在菜单区域内居中。  2. 动态更新日期时间增加标题,可显示中文。
     例如:“date&time日期时间:  =MMM.dd.yyyy  HH:mm:ss”
2019-9-9
  setmenu 函数增加 --keyhelp-on* --keyhelp-off 参数。  

2019-8-8
  菜单每秒动态更新日期时间。
  1. 指定日期时间格式
  setmenu --string=x=y=color="date&time=FORMAT"
  例如:“date&time=MMM.dd.yyyy  HH:mm:ss”
        “date&time=dd/MMM/yy  hh:mm:ss AP"
  2. 隐含ISO8601标准日期时间格式(yyyy-MM-dd  HH:mm:ss)
  setmenu --string=x=y=color="date&time”
  3. 清除日期时间
  setmenu --string=date&time

2019-3-25
    条件菜单项目(iftitle )支持图形菜单。
    图形菜单改进:支持背景高亮、支持图文混排。
        
    setmenu --graphic-entry=图形类型=图形菜单行数=图形菜单列数=图形宽=图形高=图形行间隙 图形文件
    图文混排时,图形与文本选中项(高亮项)的设置,是各种独立的,可以单独设置。
    如果高亮只需要通过文本实现,图形类型可设置为0x90.
    图形类型:
    位0:前景高亮    位1:前景色翻转    位2:图形加框    位3:背景高亮   位4:图文混排     位7:背景透明
    图形行间隙在图文混排模式,不能实现随意调整。如果间隙不理想,可以设置图形间隙为零。然后使用增加字符间距实现。(setmenu --font-spacing=0:n)

2018-8-21
  增加 setmenu --auto-num-all-on 参数。
  给所有标题编号。(--auto-num-on 参数仅给引导标题编号)
  注释:0x8274 00/01/02=禁止自动编号/仅给引导标题编号/给所有标题编号
        0x8275 标题编号与标题内容之间的字符。如:0x20=' '   0x2d='-'
        0x8276 返回当前标题编号。(按所有标题计)

2018-07-01
  增加 setmenu --triangle-on --triangle-off 参数,打开/关闭菜单三角形指示器。默认打开。
  增加 setmenu --middle-align 参数。菜单项目及菜单项目帮助居中。

2018-06-12
  1. 增加 beep 函数,播放音乐。(issues #175)(issues #176)
  beep [--start|--mid|--end] [--play=N] [--nowait] 频率 持续时间 ...
  频率: Hz    持续时间: ms     最大 126 音符.
  N:播放次数 0-255。0是停止播放,255是连续播放(按任何键停止播放)。
  当音节很多时,可以用不同的行书写。使用 [--start|--mid|--end] 指定.
  例1: 警报
  beep --play=10 400 20 500 20 600 20 700 20 800 20 900 20 1000 20 1100 20 1200 20 1300 20 1400 20 1500 20 1600 20
  例2: 茉莉花
  title beep
  !BAT
  beep --start 330 600 330 300 392 300 440 300 522 300 522 300 440 300 392 600 393 300 440 300 392 1200
  beep --mid 392 600 392 600 392 600 330 300 392 300 440 600 440 600 392 1200
  beep --mid 330 600 293 300 330 300 392 600 330 300 293 300 261 600 261 300 293 300 261 1200
  beep --mid 330 300 293 300 261 300 330 300 293 900 330 300 392 600 440 300 522 300 392 1200
  beep --mid 293 600 330 300 392 300 293 300 330 300 261 300 220 300 196 1200
  beep --end --play=255 --nowait 220 600 220 300 261 300 293 900 330 300 261 300 293 300 261 300 220 300 196 1800
  2. 改善图像透明背景的算法。
  3. 修改 grub_memmove 函数,提高运算速度。
  4. 修正 map 函数中碎片映射的错误。

2018-04-23  在菜单项首行增加 !BAT 可按批处理方式书写与执行,使用批处理的功能。比如:goto :label

2018-03-15  增强 setmenu --string 函数功能
   --string=[X]=[-]Y=COLOR="STRING"
   没有X, 表示水平居中.
   -Y表示从菜单底部计数.  -0就是最后一行.

2017-12-05  增强颜色赋值功能。修正color及echo帮助信息。
  1. 按目标分配颜色,顺序不能乱(未选菜单 被选菜单 帮助 标题)。颜色可用占位符n替换。
    例: color black/cyan yellow/cyan red/cyan light-green/cyan    字符颜色/背景颜色,使用符号颜色。
    例: color 0x30 0x3e 0x34 0x3a    高位背景色,低位字符颜色,8位数字。
    例: color 0x888800000000 0x888800ffff00 0x888800880000 0x88880000ff00    64位数字。
    例: color 0x30    其余同NORMAL。在命令行上使用,改变控制台颜色。
    例: color 0x30 0xe n 0xa    背景色取自NORMAL。使用占位符n。
  2. 可以给指定目标赋颜色,NORMAL应当在首位。
    例: color normal=0x888800000000    其余目标颜色同NORMAL。
    例: color normal=0x4444440000ffff helptext=0xc highlight=0xd heading=0xe border=0xa    背景色同NORMAL。
    例: color standard=0xFFFFFF    改变控制台颜色。
  3. 改变字符串的颜色
    例: echo $[0xCD]字符串    改变字符串的颜色(8或64位数字)。C=背景色,D=字符颜色。
    例: echo $[]字符串        字符串使用系统标准颜色。
  4. 具体颜色可在命令行查看。
    例: echo -h-rrggbb
    例: echo -rrggbb

2017-11-28  修正 setmenu 函数,并且增加下列参数:
  1. --draw-box=[索引]=[起始x]=[起始y]=[水平长度]=[垂直长度]=[线宽]=[颜色]
          划线或画框。其中:索引=1-16;颜色=24色;线宽=1-255;尺寸单位是像素。
          --draw-box=[索引]  清除指定的线或框。
          --draw-box=        清除所有的线或框。
  2. --string=  清除所有的字符串。

2016-04-04
  支持动画菜单
  setmenu --graphic-entry=类型=菜单行数=菜单列数=图形宽(像素)=图形高(像素)=菜单行间距(像素)  菜单项0的路径文件名
  类型: 位0:高亮指定颜色    位1:高亮颜色翻转    位2:高亮显示线框    位7:背景透明(最好使用黑色背景)
  文件名: *n.??? 格式    n=00-99
  高亮颜色由 color HIGHLIGHT=0xrrggbb 指定。
  字符可以使用任意字型、字高、颜色,可以辅以图标。

2016-03-25
  菜单字符可以使用不同字型。
  例如:"七" 使用不同字型,将 .hex 文件中的 unicode 码 “4e03” 修改为 “0080”,  
            将菜单中的 "七" 修改为 “\X0080”。

2016-03-15
  1.增加动画控制热键 F2:播放/停止。
  2.增加动画控制位 0x835b,位0:0/1=停止/播放。
  3.增加精简字库模式:--simp=起始0,终止0,...,起始3,终止3
    内置字库应当包含 DotSize=[font_h],['simp']
    中文可以使用 --simp=
    例如:font --font-high=24 --simp= /24_24.hex
             DotSize=24,simp
    不使用热键:              可以加载 32*32 unifont 全字库
    使用热键:                 可以加载 24*24 unifont 全字库
    使用精简字库:           可以加载 46*46 汉字全字库
    使用精简字库及热键: 可以加载 40*40 汉字全字库
  4.不再支持 bin 格式字库。

2016-02-26  
加载透明背景的图像    splashimage [--offset=[type]=[x]=[y]] FILE
类型[type]:bit 7: 透明背景

2016-02-21
  1.增加图像背景色设置方法。    splashimage --fill-color=[0xrrggbb]
    作用之一,作为小图像的背景。
    作用之二,直接作为菜单的背景(即不加载图像背景)。此时只设置字体的前景色即可。
  2.增加动画菜单。    splashimage --animated=[type]=[delay]=[last_num]=[x]=[y] START_FILE
    类型[type]:bit 0-3: 播放次数    bit 4: 永远重复    bit 7: 透明背景
                      type=00: 禁止播放
                播放n次:序列图像各显示n次,时间独占。可作为启动前导、序幕。
                永远重复:序列图像无限循环,时间与菜单共享。可作为菜单里的动画。
                背景透明:即抠像。要求4角像素为背景色。
                                背景色最好为白色或黑色,这样可以去除一些灰色杂波。若是彩色背景,则应当非常干净。
                提醒:请以16进制方式输入。否则易错。
    延迟[delay]:序列图像之间的延迟。单位是滴答,即1/18.2秒。
    序列数[last_num]:序列图像总数(2位数,从1开始计数)。
    偏移[x]、[y]:图像偏移,单位像素。
    起始文件名[START_FILE]命名规则:*n.???   n: 1-9 或 01-99 或 001-999。
   
附演示动画,把它复制到.img或者.iso文件。希望大家展示自己创作的动画菜单。

2012-02-14
setmenu函数增加参数:
--highlight-short   高亮菜单项背景色仅限于文字(默认)
--highlight-full      高亮菜单项背景色整行显示(有人偏爱老旧模式)


今天上传的版本,可以增强 GRUB4DOS 菜单的编辑功能。
1.支持每像素16位彩色模式(64K 5:6:5)。
2.支持 jpg(jpeg,jpe)图像格式。
3.在 vbe 模式,使用 echo -rrggbb 可以显示 216 种彩色样本。
4.使用 echo -v 可以显示版本、内存信息。
5.增加 setmenu 函数,增强图形菜单编辑功能。参数:
  --ver-on --ver-off 版本信息打开/关闭。默认打开;
  --lang=en --lang=zh 菜单帮助信息中英文切换。默认英文;
  --auto-num-off --auto-num-on 关闭/打开菜单自动编号。默认关闭;
  --left-align --right-align 菜单左对齐/右对齐。默认左对齐。
  --font-spacing=[font]:[line] 设置字符间距/行间距。单位:像素。默认0。应当位于下面的参数之前;
  --string=[x]=[y]=[color]=["string“] 字符串位置、颜色与内容,可用于标题,说明,帮助等。单位:列,行,24位色彩;
    注:如果省略颜色,位于菜单框以上按标题颜色,位于菜单框以下按帮助颜色;
          字符串头尾要加英文双引号;
          列数=图像水平像素/(字符宽+字符间距)   字符宽=8;
          行数=图像垂直像素/(字符高+行间距)      字符高=10;
  --help=[x]=[w]=[y] 帮助位置。单位:列,行;
    注:x=0 由边框确定(默认);w=0 水平居中;
  --keyhelp=[y_offset]=[color] 按键帮助位置,颜色。单位:列,行,24位色彩;
    注:y_offset=0,项目与按键帮助位于同一区域,项目帮助可以覆盖按键帮助(默认);
          y_offset != 0,按键帮助到项目帮助的行偏移,项目帮助与按键帮助共存;
          y_offset<=4,项目帮助的显示行数;
          color=0 默认 “color helptext";
  --box x=[x] y=[y] w=[w] h=[h] l=[l] 菜单项标题起始列,起始行,每行最大字符数,最大菜单项数,菜单框线条宽度(像素);
    注:w=0 表示水平居中。此时 w 应当在 x 之后;
       l=0 表示不显示菜单框;
  --u 恢复菜单原始状态;
  --timeout=[x]=[y]=[color] 倒计时位置、颜色。单位:列,行,24位色彩.
    注:x=y=0 默认位于选中项目的尾部;
          color=0 默认 "color highlight"。
6.在 font 函数增加参数:
    font [--font-high=24] [--simp=] 文件名
    例子:  font /my.hex
                font --font-high=24 --simp=  /24.hex
  内置字库,如果不是 16*16 字体,头部需声明:DotSize=24,simp

高亮颜色.jpg (146.48 KB, 下载次数: 422)

高亮颜色.jpg

颜色翻转.jpg (111.65 KB, 下载次数: 396)

颜色翻转.jpg

高亮线框.jpg (72.47 KB, 下载次数: 419)

高亮线框.jpg

图文混排.jpg (178.35 KB, 下载次数: 379)

图文混排.jpg

背景高亮.jpg (192.25 KB, 下载次数: 364)

背景高亮.jpg

动画演示.rar

1.49 MB, 下载次数: 2156, 下载积分: 无忧币 -2

点评

能否搞一个说明书啊!这个项目太复杂了  发表于 2022-6-28 08:13
"unifont 全字库"是什么?是UniFonts吗?  发表于 2016-3-16 06:47
"unifont 全字库"是什么?是UniFonts吗?  发表于 2016-3-16 06:46
"unifont 全字库"是什么?是UniFonts吗?  发表于 2016-3-16 06:46

评分

参与人数 7无忧币 +35 收起 理由
zhczf + 5 赞一个!
879792799 + 5 好厉害!
ccccc5321c + 2 很给力!
2011cwj6958 + 5
mountainbear + 8 赞一个!
+ 5
oldking + 5 很给力!

查看全部评分

484#
 楼主| 发表于 2024-3-19 21:04:42 来自手机 | 只看该作者
在命令行执行:help color
回复

使用道具 举报

483#
发表于 2024-3-19 19:40:04 | 只看该作者
问一下大哥,线框的颜色怎么改啊
回复

使用道具 举报

482#
 楼主| 发表于 2023-10-6 12:59:03 来自手机 | 只看该作者
本帖最后由 2011yaya2007777 于 2023-10-6 13:00 编辑
请教,在菜单中我该如何得知目前屏幕是4:3还是16:9


背景图不仅有长宽比,还有尺寸!这就要求你预想设置屏幕分辨率。如果是你自己的电脑,可以预先查看一下支持的分辨率。如果是通用菜单,那要考虑使用比较常见的分辨率。最早是640*480,后来是800*600。现在好像大部分支持1280*768。这样就准备一张背景图就可以了。也可以预先判断一下,不是预先设定的分辨率,就不加载背景图。还有一个问题,就是考虑字体大小的问题。分辨率高,16*16字体太小了。
回复

使用道具 举报

481#
发表于 2023-10-5 21:56:31 | 只看该作者
请教,在菜单中我该如何得知目前屏幕是4:3还是16:9,进而使用不同的图片当作背景,谢谢。
回复

使用道具 举报

480#
 楼主| 发表于 2023-10-3 11:49:45 来自手机 | 只看该作者
不要加载到内存,试一试
回复

使用道具 举报

479#
发表于 2023-10-3 11:44:05 | 只看该作者
2011yaya2007777 发表于 2023-9-21 15:42
在主菜单里设置:
从子菜单返回主菜单,不想二次加载背景图        calc *0x8312&2 > nul ||  splashi ...

受主板限制 BOOT.WIM 大于1G后 LEGACY就不能正常启动了(会报内存不足,无法创建RAMDISK设备),而UEFI方式并无此限制,大大有没有办法可以解决这个1G的问题
回复

使用道具 举报

478#
发表于 2023-9-30 03:13:20 | 只看该作者
本帖最后由 oluolio 于 2024-1-14 23:05 编辑

.
回复

使用道具 举报

477#
发表于 2023-9-30 03:07:38 | 只看该作者
本帖最后由 oluolio 于 2024-1-14 23:05 编辑

.
回复

使用道具 举报

476#
发表于 2023-9-30 03:07:17 | 只看该作者
本帖最后由 oluolio 于 2024-1-14 23:06 编辑

.
回复

使用道具 举报

475#
发表于 2023-9-30 03:06:49 | 只看该作者
本帖最后由 oluolio 于 2024-1-14 23:23 编辑

.
回复

使用道具 举报

474#
发表于 2023-9-23 14:28:53 | 只看该作者
2011yaya2007777 发表于 2023-9-21 15:42
在主菜单里设置:
从子菜单返回主菜单,不想二次加载背景图        calc *0x8312&2 > nul ||  splashi ...

优化了一下菜单后,现在用此方法已飞快,再次谢谢yaya!
回复

使用道具 举报

473#
发表于 2023-9-22 16:47:33 | 只看该作者
2011yaya2007777 发表于 2023-9-21 15:42
在主菜单里设置:
从子菜单返回主菜单,不想二次加载背景图        calc *0x8312&2 > nul ||  splashi ...

试了一下,稍好。谢谢yaya!
回复

使用道具 举报

472#
 楼主| 发表于 2023-9-21 15:42:16 | 只看该作者
哦,原来用 gfxmenu 返回很快,以为是一次性加载再次读取的内存。这个字体反复加载有点慢不太理想。


在主菜单里设置:
从子菜单返回主菜单,不想二次加载背景图        calc *0x8312&2 > nul ||  splashimage /boot/grub/lt.jpg
从子菜单返回主菜单,不想二次加载字库           calc *0x8312&4 > nul || font /boot/grub/unifont.hex.gz

点评

zyy
受主板限制 BOOT.WIM 大于1G后 LEGACY就不能正常启动了(会报内存不足,无法创建RAMDISK设备),而UEFI方式并无此限制,大大有没有办法可以解决这个1G的问题  详情 回复 发表于 2023-10-3 11:44
回复

使用道具 举报

471#
发表于 2023-9-20 19:30:55 | 只看该作者
哦,原来用 gfxmenu 返回很快,以为是一次性加载再次读取的内存。这个字体反复加载有点慢不太理想。
谢谢YAYA 的回复。
回复

使用道具 举报

470#
 楼主| 发表于 2023-9-20 19:07:36 来自手机 | 只看该作者
G4D使用以上方法返回主菜单,同样要加载一次字体。
回复

使用道具 举报

469#
发表于 2023-9-20 18:45:48 | 只看该作者
谢谢 yaya 的更新,新版 grub4dos-for_UEFI-2023-08-18 已解决我这里 G4E 无法载入主菜单显示黑屏的问题,现在一切正常,再次谢谢!

另外,请教个问题 G4E 下子菜单返回主菜单, 怎么像 G4D 下,用 calc *0x307FFC-0x110000 > nul && configfile (md)4+8 ! configfile (md)0x880+0x200 重新加载该内存块来重新加载内置菜单, 不然每次返回都要重新加载一次字体,有点慢。

回复

使用道具 举报

468#
发表于 2023-8-19 09:06:35 | 只看该作者
谢谢楼主分享心得,最近在学习GRUB4 UEFI版   看看与其他启动方式有什么不同
回复

使用道具 举报

467#
发表于 2023-4-12 15:51:04 | 只看该作者
caocaofff 发表于 2023-4-9 13:50
为啥我使用ProgressBar没有进度条边框?
/boot/grub/ext/ProgressBar 100 540 600 10 0x444444 1

将所有更新为最新,试试。
回复

使用道具 举报

466#
发表于 2023-4-9 13:50:52 | 只看该作者
为啥我使用ProgressBar没有进度条边框?
/boot/grub/ext/ProgressBar 100 540 600 10 0x444444 1
回复

使用道具 举报

465#
发表于 2023-4-3 14:22:08 | 只看该作者
谢谢分享。
回复

使用道具 举报

464#
 楼主| 发表于 2023-4-2 08:49:04 | 只看该作者
请教下大佬,怎么在标题上 获取当前电脑启动的方式,如是uefi  还是bios

calc *0x8272&0xff > nul ;; set ver=%@retval%
%ver%==0   BIOS
%ver%==32 UEFI 32
%ver%==64 UEFI 64
回复

使用道具 举报

463#
发表于 2023-3-31 20:17:24 来自手机 | 只看该作者
请教下大佬,怎么在标题上 获取当前电脑启动的方式,如是uefi  还是bios
回复

使用道具 举报

462#
发表于 2023-3-30 09:47:22 | 只看该作者
功能强大,原来早几年就实现我想要的功能了,我还傻着找不到这贴,从昨晚一直学习到现在,感觉功能强大丰富,谢谢大佬
回复

使用道具 举报

461#
发表于 2023-3-22 08:48:38 | 只看该作者
学习中
回复

使用道具 举报

460#
发表于 2023-3-21 21:02:04 | 只看该作者
2011yaya2007777 发表于 2023-3-21 18:08
我在实机测试,uefi启动正常,切换正常。在qemu虚拟机测试,g4d情况下加载图像及字库特别慢。

怪事!我这边其它文件为最新的,只将ProgressBar文件替换为3月15日的,可以启动显示菜单,但一旦换为最新3月21日的文件就黑屏死机。
回复

使用道具 举报

459#
 楼主| 发表于 2023-3-21 18:08:39 来自手机 | 只看该作者
我在实机测试,uefi启动正常,切换正常。在qemu虚拟机测试,g4d情况下加载图像及字库特别慢。
回复

使用道具 举报

458#
发表于 2023-3-21 17:58:48 | 只看该作者
2011yaya2007777 发表于 2023-3-21 09:57
问题基本解决,测试一下。注意取消了--countdown参数。

  使用方式:ProgressBar [--no-box] 左上角x  ...

初步测试情况:
1. 虚拟机中G4D和G4E主菜单显示正常,倒计时与进度条已能同步,模式:1,2,0x11,0x12在UD分区和正常分区均显示正常,0x11,0x12有意思的显示方式,赞一个。但G4D用U盘载入显示菜单异常缓慢,UD分区镜像测试还好(不知何故,也许是虚拟机的缘故吧)。
2. 实机测试G4D载入显示主菜单速度还正常,来回切换正常,但G4E无法载入主菜单显示黑屏。
回复

使用道具 举报

457#
 楼主| 发表于 2023-3-21 09:57:20 | 只看该作者
本帖最后由 2011yaya2007777 于 2023-3-21 11:13 编辑
关于进度条在实际使用中的情况向yaya报告一下:

问题基本解决,测试一下。注意取消了--countdown参数。

  使用方式:ProgressBar [--no-box] 左上角x 左上角y x尺寸 y尺寸 颜色 模式
  颜色:24位色  0x红红绿绿蓝蓝
  模式(0-3位):1.水平从左到右  2.水平从右到左  3.垂直从上到下  4.垂直从下到上
        模式(4-7位):0.递增  1.递减
        x与y采用像素表示
        --no-box:递增模式时,不显示进度条的边框
你可以试一试模式:1,2,0x11,0x12



进度条测试.rar

314.11 KB, 下载次数: 20, 下载积分: 无忧币 -2

回复

使用道具 举报

456#
发表于 2023-3-18 22:00:53 | 只看该作者
2011yaya2007777 发表于 2023-3-18 09:24
没有办法下载。一点就打开无忧网站。

权限不够,不能发完整链接。
回复

使用道具 举报

455#
发表于 2023-3-18 21:39:38 来自手机 | 只看该作者
牛牛牛
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-20 04:58

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表