【问题标题】:MS Access image attachment flickerMS Access 图像附件闪烁
【发布时间】:2021-05-10 05:52:49
【问题描述】:

我有一个管理图像附件的表单 (MS Access) 和几个根据各种选择标准显示这些附件的报告。所有图像文件 (.jpg ) 的最大大小为 1.4Mb。表单一次只显示一个图像,当我移动到每条记录时,新图像会闪烁 - 通常显示,清除然后再次显示。有时图像只显示一次,但这种行为与图像大小之间似乎没有相关性 - 较小的附件通常会受到相同的影响,而较大的附件有时会显示一次而不会闪烁。表单显示和图像显示之间似乎存在一些相位问题,但我只是猜测。

在报告中,初始显示没有闪烁,只要我不使用滚动条上/下箭头或拖动滑块,任何刷新都是可以接受的(当然不是很流畅,但我可以忍受) .单击滑块任一侧的滚动条区域,刷新是可以接受的(不光滑)。使用滑块或箭头,会出现令人无法接受的频闪。

我在网上搜索了“MS ACCESS”,附件,图像,闪烁数次,但我只能找到关于闪烁表单的文章,这在此应用程序在 Windows 10 64 位上运行时没有问题,内存充足, 2Gb 图形。我找不到任何与图片附件闪烁相关的内容。

我主要关心的是提高表单的可用性;对于报告,谨慎的建议不要拖动滑块或使用滚动条箭头就足够了,在紧要关头。

在我当前的应用程序的上下文中,这不是一个大问题,因为图像附件不是关键要求。尽管如此,我想知道有什么方法可以在将来更重要的任何事情上停止闪烁。

根据以下建议进行进一步调查后进行编辑。

我尝试将 .visible = false 和 .visible = true 放入各种事件处理程序中,但没有太大变化,除了至少使用一种组合使闪烁变得更糟。我不确定我可以提供什么代码来帮助您提出任何建议,但以下内容可能有用:

表单的记录源是一个表格,提供一个数据类型附件的字段“imagelink”,加上两个文本字段:“description”(短文本)和“cmets”(长文本)。此外,该表单具有三个组合框。其中两个在一个父表 tblSite 和 tblSpecies 上都有一个简单 SQL 的行源,在这两种情况下都隐藏了外键,只有 tbleSite.sitename 和 tblSpecies.commonname 在组合框中可见。第三个组合框在一个表 (tblColour) 上有一个简单的 SQL 行源,它是 tblSpecies 的子表,受 WHERE 子句的约束,只提供适用于当前物种的颜色类型。除了删除按钮,就是这样。

我将一些 MsgBox 跟踪信息放入多个事件处理程序中以查看发生了什么。我使用 MsgBox 而不是调试器,因为我想同时在屏幕上查看事件和行为(Access noob)。这就是发生的情况,no .Visible = False/True 代码处于活动状态:

从头开始启动表单:

看不到图片

Form_Open

Form_Load

attImage_AttachmentCurrent

Form_Current

图像出现,无闪烁

Detail_Paint(两次)

随后通过导航按钮转到下一条记录:

Detail_Paint

第一张图片空白

Detail_Paint

第一张图片再次出现

Detail_Paint

第一张图片空白

Detail_Paint

下一个(第二个)图像出现

Detail_Paint(三遍)

第二张图片空白

Detail_Paint

第二张图片再次出现

attImage_AttachmentCurrent

Form_Current

Detail_Paint

第二张图片空白

Detail_Paint

第二张图片再次出现

Detail_Paint

第二张图片空白

Detail_Paint

第二张图片再次出现

每次我从一条记录移动到另一条记录时,都会发生上述顺序。毫无疑问,还会有其他事件;我只追踪了我认为最相关的内容。

此外,当停留在任何一条记录上但通过鼠标单击在各种文本和组合框之间更改焦点时,会发生这种情况:

Detail_Paint

图片空白

Detail_Paint

图像再次出现

表单上还有一个删除按钮,有时(我还没有尝试过跟踪它)会导致图像在鼠标经过时闪烁——我怀疑有很多 Detail_Paint 事件。这并不总是发生 - 如果需要,我可以做更多的跟踪,但我觉得我错过了一些非常简单、明显的点(Access noob,如前所述)。

我唯一拥有的其他事件代码是:

在站点和物种更新后,确保只有一个或另一个不为空,并相应地启用/禁用其他组合框(图像可以是昆虫或站点,不能同时是两者,颜色只能分配给已选择的物种)。物种更新后还会重置颜色组合框行源,以将颜色限制为与新物种相关的颜色。

在我看来,在留下记录时设置 .visible = False,然后在新记录稳定后设置 .visible = True,可能会起作用。但是,我看不到任何合适的 Detail 事件可以做到这一点。 On_Next_Record_Click 和 On_Current_Record_Finshed_Doing_Stuff 会有所帮助,但据我所知没有这样的事情。

如果有任何您认为可能有用的现有代码,我可以附上详细信息。我还有一些头发。对于我所做的任何愚蠢的事情,我深表歉意,但事件处理从来都不是我的强项——请给我一些程序。

【问题讨论】:

  • myimage.visible = false 开始加载记录,然后myimage.visible = true 加载完成。这应该可以防止闪烁。由于您没有显示任何代码,因此无法确定放置这些指令的 excat 位置。
  • 我现在不知道这是否适合您,但我从未使用过附加图像,而是使用与 id 相关的文件名或带有文件名的文本字段,然后简单地将它们分配给适当的控制显示。即使使用旧的慢速计算机,也从未遇到过闪烁问题。
  • Thomas G,请看一下编辑。 SunKnight0,如果我无法修复附件,我会将其视为一个选项。

标签: image ms-access attachment flicker


【解决方案1】:

我在我的数据库中遇到了同样的问题,当我从一条记录转到另一条记录时,照片附件会闪烁。我使用了 application.echo 属性并在当前事件代码上将其关闭,但问题仍然存在。

我意识到它也在通过更新后事件运行,但是当我在该代码上关闭 application.echo 时,它消除了闪烁。

确保在每个子例程结束时重新打开 application.echo。

【讨论】:

    【解决方案2】:

    为了防止屏幕在表单上从一个附件移动到下一个附件时闪烁,您可以将 Attachment 控件的 KeyDown 事件与表单的 Timer 事件结合起来。

    我通过在 Attachment 控件的 KeyDown 事件上关闭屏幕重绘并在 Form 的 Timer 发生时再次打开它来实现所需的结果。表单的 TimerInterval 属性指定 Timer 事件之间的间隔。在我的例子中,一毫秒就足以防止闪烁。

    Private Sub Attachment_Artwork_KeyDown(KeyCode As Integer, Shift As Integer)    
      If 33 = KeyCode Or _
         34 = KeyCode Or _
         37 = KeyCode Or _
         38 = KeyCode Or _
         39 = KeyCode Or _
         40 = KeyCode Then Application.Echo False
    End Sub
    
    Private Sub Form_Timer()
      Application.Echo True
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2016-11-21
      • 1970-01-01
      • 2012-08-22
      • 2015-04-25
      • 2012-05-13
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多