无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 7186|回复: 24

[已解决] 请问如何清除已经加载的字体和背景图等?

[复制链接]
发表于 2018-10-18 12:20:11 | 显示全部楼层 |阅读模式
本帖最后由 sunsea 于 2018-10-19 19:52 编辑

如题,附件是一个重现问题的镜像文件

菜单文件都有尾续字库,然后菜单3没有指定背景图

结果从菜单1切换到2时没有加载2的字库,结果一些字显示不出来,分辨率切换后菜单也显示的不完全

菜单三继承了背景图,但我希望是个默认的纯黑背景

除了chainloader一个新的grldr之外还有什么办法吗?有没有什么命令能够清除已经加载的字体和背景图等?

错误的菜单2
错误的菜单2.jpg
正确的菜单2
正确的菜单2.jpg
错误的菜单3
错误的菜单3.jpg
正确的菜单3
正确的菜单3.jpg

菜单1
  1. terminal console
  2. graphicsmode -1 1024
  3. font --font-size=24
  4. splashimage /2.jpg

  5. title 错误显示的菜单2
  6. configfile /menu2.txt

  7. title 错误显示的菜单3
  8. configfile /menu3.txt

  9. title 正常显示的菜单2
  10. chainloader /menu2/grldr

  11. title 正常显示的菜单3
  12. chainloader /menu3/grldr

  13. title 重启
  14. reboot

  15. title 关机
  16. halt

  17. 0000:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000#,Name=仿宋,Size=18,DotSize=24,OffsetX=0,OffsetY=0,Bold=1,Italic=0,UnderLine=0,StrikeOut=0,IncludAnsi=0
  18. #剩下的字库省略
复制代码
菜单2
  1. terminal console
  2. graphicsmode -1 640
  3. font
  4. splashimage /1.jpg

  5. title [1] Windows PE (XP)   重现用         Windows PE (XP)   Chinese Version
  6. #假装这个菜单可启动
  7. chainloader /io.sys

  8. title 重新启动计算机
  9. reboot

  10. title 返回上一级
  11. configfile /menu1.lst

  12. #字库是正常的宋体16*16
复制代码
菜单3
  1. terminal console
  2. graphicsmode -1 640
  3. font

  4. title [1] Windows PE (XP)   重现用         Windows PE (XP)   Chinese Version
  5. #假装这个菜单可启动
  6. chainloader /io.sys

  7. title 重新启动计算机
  8. reboot

  9. title 返回上一级
  10. configfile /menu1.lst

  11. #字体同菜单2
复制代码



问题重现.rar

458.89 KB, 下载次数: 8

发表于 2018-10-18 17:58:59 | 显示全部楼层
试试不带参数的 splashimage 命令,我隐约记得貌似它可以清除背景图。

点评

谢谢。测试了一下成功清除了背景,那么请问如何清除字体呢?  详情 回复 发表于 2018-10-18 18:12
回复

使用道具 举报

 楼主| 发表于 2018-10-18 18:12:00 | 显示全部楼层
不点 发表于 2018-10-18 17:58
试试不带参数的 splashimage 命令,我隐约记得貌似它可以清除背景图。

谢谢。测试了一下成功清除了背景,那么请问如何清除字体呢?
回复

使用道具 举报

发表于 2018-10-18 18:14:58 | 显示全部楼层
执行 font  /.../.../unifont.hex 之前,应该先执行一条不带参数的 font 命令。

为什么呢?因为我们禁止连续执行两条 font /.../.../myfont.hex 命令。

为什么要禁止执行连续两条命令呢?

因为 font 字库通常都很大,而且通常都是放在磁盘介质上。多次加载同一个字库,会白白浪费电脑的时间。

所以,默认情况下,只加载一次字库。这样,即使用户错误地使用了多条 font 命令,也不会拖慢电脑的速度。

因为只有第一次使用的 font 命令会真的执行,而用户后续的 font 命令都不会执行了。

但有一个技巧,可以让后续的一条 font 命令执行,那就是先使用一条不带参数的 font 命令。

当使用不带参数的 font 命令之后,你就可以再次使用 font /.../.../... 来加载你的 font 文件了。

如果还需要再加载别的 font 文件,你仍然需要先执行一条不带参数的 font 命令,然后再执行一条带参数的  font 命令。

点评

谢谢指导,也就是说 我应当使用如下命令? 那如果是内置菜单的话,我应当 添加在我的菜单开头?  详情 回复 发表于 2018-10-18 18:21
回复

使用道具 举报

 楼主| 发表于 2018-10-18 18:21:32 | 显示全部楼层
不点 发表于 2018-10-18 18:14
执行 font  /.../.../unifont.hex 之前,应该先执行一条不带参数的 font 命令。

为什么呢?因为我们禁止 ...


谢谢指导,也就是说
我应当使用如下命令?(菜单都自带尾部字库的)
  1. font
  2. font 我的菜单文件
  3. configfile 我的菜单文件
复制代码


那如果是内置菜单的话,我应当
  1. font
  2. font (md)0x880+0x200
复制代码
添加在我的菜单开头?

点评

你也可以试试在菜单开头写一条不带参数的 font 命令,说不定就能管用了。  详情 回复 发表于 2018-10-18 18:27
回复

使用道具 举报

发表于 2018-10-18 18:27:11 | 显示全部楼层
sunsea 发表于 2018-10-18 18:21
谢谢指导,也就是说
我应当使用如下命令?(菜单都自带尾部字库的)

你也可以试试在菜单开头写一条不带参数的 font 命令,说不定就能管用了。

点评

我原来的菜单就是这么写的,没用。  详情 回复 发表于 2018-10-18 18:27
回复

使用道具 举报

 楼主| 发表于 2018-10-18 18:27:54 来自手机 | 显示全部楼层
不点 发表于 2018-10-18 18:27
你也可以试试在菜单开头写一条不带参数的 font 命令,说不定就能管用了。

我原来的菜单就是这么写的,没用。

点评

你的 menu1.lst 和 menu2.lst 之类的文件,开头有不带参数的 font 命令吗? 如果有,但它不管用,那你只好使用你刚才的办法:用 font font 的办法来加载字库。  详情 回复 发表于 2018-10-18 18:34
回复

使用道具 举报

发表于 2018-10-18 18:34:22 | 显示全部楼层
sunsea 发表于 2018-10-18 18:27
我原来的菜单就是这么写的,没用。

你的 menu1.lst 和 menu2.lst 之类的文件,开头有不带参数的 font 命令吗?

如果有,但它不管用,那你只好使用你刚才的办法:用

font
font <菜单文件>

的办法来加载字库。

点评

确实不管用,在内置和外置环境里都不管用。那么就只好硬性写一次加载了。  详情 回复 发表于 2018-10-18 18:36
回复

使用道具 举报

 楼主| 发表于 2018-10-18 18:36:54 来自手机 | 显示全部楼层
不点 发表于 2018-10-18 18:34
你的 menu1.lst 和 menu2.lst 之类的文件,开头有不带参数的 font 命令吗?

如果有,但它不管用,那你 ...

确实不管用,在内置和外置环境里都不管用。那么就只好硬性写一次加载了。

点评

font 命令执行多次,是不科学的。 建议只执行一次 font 命令。比如在第一个菜单文件里面,把后续要使用的所有汉字都包括进去。  详情 回复 发表于 2018-10-18 18:43
回复

使用道具 举报

发表于 2018-10-18 18:43:09 | 显示全部楼层
sunsea 发表于 2018-10-18 18:36
确实不管用,在内置和外置环境里都不管用。那么就只好硬性写一次加载了。

font 命令执行多次,是不科学的。

建议只执行一次 font 命令。比如在第一个菜单文件里面,把后续要使用的所有汉字都包括进去。

点评

谢谢建议。 这个问题的原本产生背景是,我的移动硬盘上部署了0pe和我自己制作的usb win10,我自己做了个grldr放在磁盘的根目录,提供加载的选择,然后我就使用了内置菜单和尾部字库并且用configfile方式加载0pe的  详情 回复 发表于 2018-10-18 18:48
回复

使用道具 举报

 楼主| 发表于 2018-10-18 18:48:10 来自手机 | 显示全部楼层
不点 发表于 2018-10-18 18:43
font 命令执行多次,是不科学的。

建议只执行一次 font 命令。比如在第一个菜单文件里面,把后续要使 ...

谢谢建议。

这个问题的原本产生背景是,我的移动硬盘上部署了0pe和我自己制作的usb win10,我自己做了个grldr放在磁盘的根目录,提供加载的选择,然后我就使用了内置菜单和尾部字库并且用configfile方式加载0pe的菜单(单独保存成菜单文件了),然后就发现了这个问题。

看来我应该找一个通用的字库,或者是把0pe中使用的所有汉字抠出来
回复

使用道具 举报

发表于 2018-10-18 18:54:00 | 显示全部楼层
现在电脑速度通常很快,不在乎加载一个大一点的字库。

但两次加载字库,就不科学了。因为需要两次访问磁盘的动作。

假如两次加载的汉字里面,有很多是重复的汉字,那就不划算了。

所以,尽量只一次性地加载所有的汉字,让字库处理模块只忙乎一次,不要累着它了。

点评

接上,还有外部菜单加载菜单文件时configfile应该也已经读入内存并解压了,全文件应该也在内存里,加载尾部字库也是内存吧?  详情 回复 发表于 2018-10-18 19:01
嗯,谢谢。 不过我还想问一个问题,内置菜单的尾部字库,应该加载时是读内存吧?读内存不存在时间问题吧?  详情 回复 发表于 2018-10-18 18:55
回复

使用道具 举报

 楼主| 发表于 2018-10-18 18:55:23 来自手机 | 显示全部楼层
不点 发表于 2018-10-18 18:54
现在电脑速度通常很快,不在乎加载一个大一点的字库。

但两次加载字库,就不科学了。因为需要两次访问磁 ...

嗯,谢谢。

不过我还想问一个问题,内置菜单的尾部字库,应该加载时是读内存吧?读内存不存在时间问题吧?

点评

内置菜单,确实是在内存中。此时加载字库,应该算是很经济的。 但内置菜单的空间不多,不适合放置超大的字库。我印象中,新版的内置菜单可以达到 32K 的大小(而且是 lzma 压缩后的大小,压缩前可以更大一些,只  详情 回复 发表于 2018-10-18 19:09
回复

使用道具 举报

 楼主| 发表于 2018-10-18 19:01:00 来自手机 | 显示全部楼层
不点 发表于 2018-10-18 18:54
现在电脑速度通常很快,不在乎加载一个大一点的字库。

但两次加载字库,就不科学了。因为需要两次访问磁 ...

接上,还有外部菜单加载菜单文件时configfile应该也已经读入内存并解压了,全文件应该也在内存里,加载尾部字库也是内存吧?

点评

configfile 加载磁盘上的 menu.lst,是按照磁盘路径去读取的,并未缓冲到内存中。 我印象中,菜单处理程序会先尝试用 font 命令作用于此文件(在磁盘上,而不是在内存中)。【所以,此时已经浪费了一个 open file  详情 回复 发表于 2018-10-18 19:41
回复

使用道具 举报

发表于 2018-10-18 19:09:59 | 显示全部楼层
sunsea 发表于 2018-10-18 18:55
嗯,谢谢。

不过我还想问一个问题,内置菜单的尾部字库,应该加载时是读内存吧?读内存不存在时间问题 ...

内置菜单,确实是在内存中。此时加载字库,应该算是很经济的。

但内置菜单的空间不多,不适合放置超大的字库。我印象中,新版的内置菜单可以达到 32K 的大小(而且是 lzma 压缩后的大小,压缩前可以更大一些,只要保证压缩后不超过 32K 即可)。

然而,grldr 文件本身也有长度限制。grldr 的最大长度,对不起,我记不清了。好像是 500K 左右吧,肯定不能达到 512K,一定要比 512K 小一些。这就对内置菜单的长度有了一定的限制。

点评

还有请问。压缩的外部菜单加载菜单文件时configfile应该也已经读入内存并解压了,全文件应该也在内存里,加载尾部字库也是内存吧?  详情 回复 发表于 2018-10-18 19:17
32K的限制,对于大部分应用来说足够了,毕竟其实不会需要多少汉字,菜单纵使如0PE的程序化菜单压缩后最长的也只有10K多(还是带了字库的)。一般来说最多两三百字足够了。这样的话怎么也不会超过限制。  详情 回复 发表于 2018-10-18 19:16
回复

使用道具 举报

 楼主| 发表于 2018-10-18 19:16:25 来自手机 | 显示全部楼层
不点 发表于 2018-10-18 19:09
内置菜单,确实是在内存中。此时加载字库,应该算是很经济的。

但内置菜单的空间不多,不适合放置超大 ...

32K的限制,对于大部分应用来说足够了,毕竟其实不会需要多少汉字,菜单纵使如0PE的程序化菜单压缩后最长的也只有10K多(还是带了字库的)。一般来说最多两三百字足够了。这样的话怎么也不会超过限制。
回复

使用道具 举报

 楼主| 发表于 2018-10-18 19:17:28 来自手机 | 显示全部楼层
不点 发表于 2018-10-18 19:09
内置菜单,确实是在内存中。此时加载字库,应该算是很经济的。

但内置菜单的空间不多,不适合放置超大 ...

还有请问。压缩的外部菜单加载菜单文件时configfile应该也已经读入内存并解压了,全文件应该也在内存里,加载尾部字库也是内存吧?

点评

像刚才说的那样,外置的菜单并未缓存到内存中。内存很紧张,没有专门的空间来缓存 menu.lst。 由于我们不缓存 menu.lst,因此,它的大小是没有限制的。  详情 回复 发表于 2018-10-18 19:50
回复

使用道具 举报

发表于 2018-10-18 19:41:56 | 显示全部楼层
sunsea 发表于 2018-10-18 19:01
接上,还有外部菜单加载菜单文件时configfile应该也已经读入内存并解压了,全文件应该也在内存里,加载尾 ...

configfile 加载磁盘上的 menu.lst,是按照磁盘路径去读取的,并未缓冲到内存中。

我印象中,菜单处理程序会先尝试用 font 命令作用于此文件(在磁盘上,而不是在内存中)。【所以,此时已经浪费了一个 open file 的动作了。】当发现尾部有字库时,菜单处理程序会自动执行一条

graphicsmode -1 -1 -1 24:32

进入 VBE 图形模式。如果没有发现菜单尾部字库,则不会自动进入图形模式(即,保持先前的模式不变)。如果发现菜单初始化命令里面已经有 graphicsmode 命令,则不会自动执行上述命令,而是会让菜单去执行它自己的 graphicsmode 命令。

刚才说了,menu.lst 并未拷贝到内存里面。当 font 执行完毕,貌似会 close file,然后再打开一次,这才执行菜单命令。我记不太清了。因此,这种情况不是从内存读取字库。

但是,刚才的 font 加载了菜单之后,貌似会自动执行一条不带参数的 font 命令。这样,你的菜单里面的 font 命令应该能够执行。但你却报告,菜单里面的 font 不能执行,这好像是个 bug 吧。让 chenall 或 yaya 看看哪里有问题?他们会权衡究竟应该怎么做。

点评

可以试一下一楼的那个问题重现img,映射成fd0之后启动,或者直接虚拟机。在那个里面我在menu1中就只使用了configfile切换到了menu2,menu2开头也有font,但确实没有成功加载尾部字体。似乎是个bug?等待chenall或者y  详情 回复 发表于 2018-10-18 20:57
回复

使用道具 举报

发表于 2018-10-18 19:50:22 | 显示全部楼层
sunsea 发表于 2018-10-18 19:17
还有请问。压缩的外部菜单加载菜单文件时configfile应该也已经读入内存并解压了,全文件应该也在内存里, ...

像刚才说的那样,外置的菜单并未缓存到内存中。内存很紧张,没有专门的空间来缓存 menu.lst。

由于我们不缓存 menu.lst,因此,它的大小是没有限制的。

回复

使用道具 举报

 楼主| 发表于 2018-10-18 20:57:16 来自手机 | 显示全部楼层
不点 发表于 2018-10-18 19:41
configfile 加载磁盘上的 menu.lst,是按照磁盘路径去读取的,并未缓冲到内存中。

我印象中,菜单处理 ...

可以试一下一楼的那个问题重现img,映射成fd0之后启动,或者直接虚拟机。在那个里面我在menu1中就只使用了configfile切换到了menu2,menu2开头也有font,但确实没有成功加载尾部字体。似乎是个bug?等待chenall或者yaya他们。
回复

使用道具 举报

发表于 2018-10-19 09:12:30 | 显示全部楼层
内置字库头部必须有 DotSize=xx,表明字符高度。
在 menu1.txt 中有 DotSize=24。在 menu2.txt 与 menu3.txt 中应当有 DotSize=16。
另外,在 menu3.txt 中,应当有 splashimage 或 splashimage /xx.jpg。
内置字库应当包含要显示的英文点阵字型。

点评

还有到哪边了解g4d新加的功能?本版块顶部的帮助文件已经三年没有更新了……  详情 回复 发表于 2018-10-19 10:36
谢谢解释……BOOTICE加上的字库从来没有这些辅助因子只有本体……我回去加上这些辅助信息试试。  详情 回复 发表于 2018-10-19 09:49
回复

使用道具 举报

 楼主| 发表于 2018-10-19 09:49:26 来自手机 | 显示全部楼层
2011yaya2007777 发表于 2018-10-19 09:12
内置字库头部必须有 DotSize=xx,表明字符高度。
在 menu1.txt 中有 DotSize=24。在 menu2.txt 与 menu3.t ...

谢谢解释……BOOTICE加上的字库从来没有这些辅助因子只有本体……我回去加上这些辅助信息试试。
回复

使用道具 举报

 楼主| 发表于 2018-10-19 10:36:16 来自手机 | 显示全部楼层
2011yaya2007777 发表于 2018-10-19 09:12
内置字库头部必须有 DotSize=xx,表明字符高度。
在 menu1.txt 中有 DotSize=24。在 menu2.txt 与 menu3.t ...

还有到哪边了解g4d新加的功能?本版块顶部的帮助文件已经三年没有更新了……
回复

使用道具 举报

发表于 2018-10-19 14:41:55 | 显示全部楼层
增强 GRUB4DOS 菜单编辑功能,支持动画,支持精简字库,支持图形菜单
http://bbs.wuyou.net/forum.php?m ... p;page=3#pid3663452

在 grub4dos 包内,有 ChangeLog_chenall.txt 更新文件。

点评

谢谢指导……  详情 回复 发表于 2018-10-19 19:52
回复

使用道具 举报

 楼主| 发表于 2018-10-19 19:52:06 来自手机 | 显示全部楼层
2011yaya2007777 发表于 2018-10-19 14:41
增强 GRUB4DOS 菜单编辑功能,支持动画,支持精简字库,支持图形菜单
http://bbs.wuyou.net/forum.php?mo ...

谢谢指导……
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-16 19:57

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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