GetTextMetrics为Courier New返回不同的最大和平均字符宽度
我正在使用Windows 7上运行的Borland C ++构建器6维护应用程序. 应用程序使用字体快递错误地绘制文本,因为每个字母都被略微切断.问题是在调用方法getTextMetrics时,因为它以不同的tmavecharwidth和tmmaxcharwidth值填充了Textmetics结构.然后,应用程序使用tmavecharwidth用错误计算字符宽度是错误的,因为该值可能小于tmmaxcharwidth.我将解决这个问题. 我很勇敢地getTextMetrics返回不同的tmavecharwidth和tmmaxcharwidth值的新新值?我的理解是,快递是新的字体,而tmavecharwidth和tmmaxcharwidth应该相同.我用其他单型字体测试了该假设是正确的. 这是有关问题的代码部分: hFont = CreateFontIndirect(&lpInstData->lf); hDC = GetDC(hWnd); hFontOld = S
0 2023-12-07
编程技术问答社区
在Win 10中调试卸载DLL时的崩溃,但不是Win 7
不完全确定我已经解决了这个问题,但这是我看到的,我认为正在进行中. 我有一个Win32程序,主要用C加载A C ++ DLL. DLL通过COM对象将数据从C程序传递到另一个应用程序 - 一个可能由DLL本身实例化.所有这些显然都通过Windows XP和Windows 7(可能是Win95和Win98,我需要更深入地查看代码历史记录以找出何时引入该界面),但是在Windows 10中,程序崩溃了在Freelibrary()呼叫此dll期间. 在调试器中检查此内容时,DLL_DETACH_PROCESS似乎已成功处理(处理该消息时未执行代码).崩溃发生在(或while)从入口点离开代码. 如果我继续介入,我最终会进入一个名为utilcls.h的标头文件,这似乎是Borland C Builder 6标头文件之一.我相信其中的模板代码与被拆除的com对象有关. unbind()呼叫通过,这是我可以在崩溃之前步骤的最后一行. 如果我使用调试器的CPU窗口并继续步进,那
4 2023-12-06
编程技术问答社区
超出虚拟内存地址空间(Borland C++ Builder 6程序)。
我在C ++构建器下写的某些应用程序有问题.6.运行时间(一周,月)后,应用程序崩溃并关闭而没有任何错误消息.在我的应用程序日志中不久之前,我得到了许多"失误"例外. 当它抛出内存异常(下面的屏幕截图)时,我查看了该过程,并具有许多不合时宜的私人记忆空间.这种行为的原因是什么? 几年前,我遇到了一次这样的问题.原因是在链接器选项中未选中的"使用动态库"的选项.当我检查一下时,问题消失了,反之亦然.我制作的测试应用程序只是调用"新char [1000000]",然后删除.每次都释放了内存(Windows Task Manager中没有承诺的内存增加),但是一段时间后我离开了内存,VMMAP显示出完全相同的事情.许多保留的私人记忆,但大部分都没有承诺. 现在问题返回,但我无法以相同的方式解决.我不知道这是否是原因,但是我的建筑商6和2010在同一台机器上被插入.现在我只有建筑商6,看来我无法像以前那样通过测试应用程序重现错误.以太方式似乎存在一些内存管理器错误或其他内容. Cod
6 2023-12-06
编程技术问答社区
在OnShow事件中处理信息 c++ builder
我正在使用C ++构建器(BCB6)和: FormShow 事件有: Application->ProcessMessages 我想知道: 的究竟是什么责任 Application->ProcessMessages 到底是什么?当我们用它使用时?什么时候会导致exp.? 谢谢! 解决方案 BDS 2006 IDE有助于Application->ProcessMessages以下: 中断应用程序的执行,以便可以处理消息队列. 呼叫ProcessMessages允许该申请处理当前在消息队列中的消息. ProcessMessages循环Windows消息循环直到其为空,然后将控制返回到应用程序. 忽略消息处理仅影响调用ProcessMessages的应用程序,而不是其他应用程序.在冗长的操作中,调用ProcessMessages定期允许应用程序响应油漆和其他消息. ProcessMessages不允许应用程序闲置,而
2 2023-09-02
编程技术问答社区
wglShareLists失败,错误6:ERROR_INVALID_HANDLE 句柄是无效的
我尝试在两个类之间共享HPBufferarb:tglform和tglform2. (我尝试了FBO,但是拥有一个旧的Borland Builder 6我无法使用FBO管理的版本) 我的目标是在两个OpenGL窗口中显示相同的缓冲区. 所以我在第一个形式之外声明了这个对象: struct GLRenderToTexture { struct { HDC hdc; HGLRC hGlRc; HPBUFFERARB hBuffer; PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB; PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormatARB; PFNWGLCREATEPBUFFERARBPROC wglCreatePbufferARB; PFNWGLGETPBUFFER
12 2023-05-10
编程技术问答社区
繪圖箱無法從計時器方法繪圖 C++ builder borland
我正在使用Borland C ++建筑商6. 我有两种形式的方法: void __fastcall FDisplay::PaintBox1Paint(TObject *Sender) void __fastcall FDisplay::TimerLabelsViewTimer(TObject *Sender) 在第一个方法中,我绘制坐标系. ,在第二种方法中,我做了: PaintBox1->Canvas->MoveTo(693,201); PaintBox1->Canvas->LineTo(770,187); ,该线未出现在坐标系上. 我的第二个问题,如何擦除线并返回基础油漆?我应该这样做吗? PaintBox1->Invalidate(); PaintBox1->Update(); 解决方案 您必须在OnPaint事件处理程序内部的图纸的所有上做.其中包括您的线图.您的OnTimer事件处理程序无法直接在油漆框上绘制,下
54 2023-03-06
编程技术问答社区
Borland 6.0中的链接错误
Borland 6.0中有链接错误(致命违规.违反链接终止). 我怎么知道它的原因是什么? 有没有我可以打开的输出文件并获取更有信息的消息? 解决方案 您应该能够使用传递给链接器的命令行来确定哪些.OBJ文件将传递给链接器.然后,您可以包括/排除文件以查看错误时. 自BCB6以来已经解决了许多链接器问题,您可能需要尝试从较新版本的演示中尝试链接器,以查看是否解决了您的问题. 其他解决方案 项目中的某些文件的文件路径不正确.
10 2023-03-05
编程技术问答社区
如何将SQL查询的数值存储到ComboBox组件中?
我在Borland C ++ Builder 6中的TComboBox组件有问题. 在Combobox中,我想插入SQL查询的结果,例如: ID value --------- 1 one 2 two 3 three 我想向用户显示value列的值,例如one,two,three,但请参考ID列的值. 有人可以帮我吗? Google对我没有说太多. 解决方案 道歉忘了放入一些代码 ComboBox1->AddItem("one", (TObject *) 1); ComboBox1->AddItem("two", (TObject *) 2); ComboBox1->AddItem("three", (TObject *) 3); 在我的组合中,值正确显示了一个,两个,三个,三个,三个 现在,我想显示当前选择的项目的ID,例如2 Label1->Caption = ??? 我不知道如何引用ID值 其他解决方案 有人在
26 2023-03-02
编程技术问答社区
将事件分配给运行时动态创建的VCL控件
我正在尝试在运行时创建动态VCL控件,并为其分配事件处理程序. 我认为我已经尽一切努力使它变得正常工作,但是无法(我尝试的所有事情都会产生不同的错误). 如果您可以帮助填写以下代码中的问号,那将有很大的帮助! 哦,如果您想知道为什么它在namespace而不是class中,那是因为这实际上是我一直添加的大型库.当我将其更改为class时,您会认为这会没关系,但是不,它会产生一个奇数的怪异错误. test.h namespace TestSpace { TTimer *time; AnsiString file; void __fastcall MyFunc(AnsiString f); ?Declaration for OnTimer event? } test.cpp void __fastcall TestSpace::MyFunc(AnsiString f) { TestSpace::file = f;
38 2023-03-02
编程技术问答社区
将屏幕截图(Bitblt)存储在内存缓冲区,通过IdTCPClient发送。
在Windows Vista上的C ++构建器6中... Graphics:: TBitmap * bmpscreencapture = new Graphics::TBitmap; bmpscreencapture-> Height = Screen-> Height; bmpscreencapture-> Width = Screen-> Width; HDC ScreenSrc = GetWindowDC (0); BitBlt (bmpscreencapture-> Canvas-> Handle, 0, 0, Screen-> Width, Screen-> Height, ScreenSrc, 0, 0, SRCCOPY); Canvas->Draw(10, 10, bmpscreencapture); ReleaseDC (GetDesktopWindow (), ScreenSrc); delete bmpscreencapture; 我目前有一个代码部分,用于
14 2023-03-02
编程技术问答社区
Borland C++ Builder 6和字符串连接法
我正在使用Borland C ++构建器6尝试进行一些简单的字符串串联.但是,我遇到了我认为是一个有趣的问题. 我能够找到我应该能够做一些简单的事情的所有内容: String word = "a" + "b" + "c"; 但是,当我尝试编译此代码时,我会收到"无效的指针添加"错误.我可以将每个零件分配给其自身变量,并将每个部分添加在一起以获取所需的输出.但是,我认为这是不必要的,因为这是一个例子. 我唯一能够根据需要工作的唯一方法是这样做: String a = ""; String word = a + "a" + "b" + "c"; 我的问题是:为什么第二个示例可以正常工作,但第一个示例不正常? 解决方案 原因是"a"的类型是char*(即:指针到char),这意味着当您编写 时 "a" + "b" 您正在尝试将指针添加在一起,这是不允许的. 创建String类型时,operator+被超载SO String a = "
14 2023-03-02
编程技术问答社区
当我的编译器不符合标准时,如何将数组成员归零?
我的编译器(C ++ builder6)句法允许数组成员初始化(至少为零),但实际上并没有真正做到这一点.因此,下面给出的示例中的断言取决于上下文. #include struct TT { char b[8]; TT(): b() {} }; void testIt() { TT t; assert(t.b[7] == 0); } 更改编译器目前不是一个选项.我的问题是:关于将来的可移植性和标准符合的"修复"此缺陷的最佳方法是什么? 编辑: 事实证明,我的第一个示例 太短.它错过了这样的观点,即阵列的填充水平是如此必不可少的,以至于必须非常接近数组,即:在同一类中. 即使原始问题仍然存在,我的实际问题模式通常是: struct TT2 { int size; char data[8]; // ... some more elements TT2(): size(0),
14 2023-02-25
编程技术问答社区
加载OpenSSL动态库 arm & x86 (FMX, C++)
我能够在iOS应用中使用openssl静态库(libcrypto.a and libssl.a). -data-to-ubidots-fmx-win32">此帮助.现在,我还可以在我的Android应用程序版本中使用openssl动态库(libcrypto.so and libssl.so). nofollow noreferrer">此信息.我从我的问题:如何制作使用ARM设备和Intel上正确的库文件的Android构建?我不知道如何为此部署两组文件.以下是项目窗口的剪辑,显示我测试的位置添加了X86的第二个libcrytpo.so库文件. 但是,第二个libcrypto.so并未在部署窗口中显示,仅保留了我添加的第一个版本(ARM版本). 我希望我能以某种方式使用 compiler指令,但也许我只是完全需要2个独立项目?一个用于Android Arm,另一个用于Android X86?此外,我在代码中需要的只是IdHTTP1->Get(),所以也许它们是我可以使用内置的bor
18 2022-09-27
编程技术问答社区
转换事件处理程序的发送者参数,以读取控件的名称?
我正在使用 Borland C++Builder 6.0 编写一个表单应用程序.我已经放置了 2 个 TImage 控件并生成了 OnClick 事件处理程序,如下所示: void __fastcall TForm1::Image1Click(TObject *Sender) { AnsiString imageName; TImage *image; // How can I get the image name via the *Sender ? // How can I convert *Sender into TImage image = (TComponent)*Sender; imageName = image->Name; } 我在我的两个 TImage 控件上分配了相同的 OnClick 事件. 我想要实现的是有一个事件处理程序来读取被点击的 TImage 的 Name. 据我所知,这可以通过 TObject *
160 2022-08-09
编程技术问答社区
消息框 "程序异常终止 "使我的应用程序一直在运行
...有点.正如这个极其简单的例子所示, 非常罕见(到目前为止仅报告过一次),我的一个应用程序碰巧以这种方式崩溃.当发生非特定异常时,我想像往常一样终止它.我的策略是(低级)记录问题,然后终止.该应用程序是子系统的一部分,如果检测到任何问题,我想(重新)启动它.它使用 C++-Builder 6 构建并在 Windows (XP...7, 也是 8) 上运行.我了解到 abort() 很可能导致错误消息.该应用程序有一个 GUI,这就是为什么会显示一个消息框而不是仅仅对 stderr 进行(解除阻塞)输出. 只要消息框不被用户接受,我的应用程序明显保持运行,例如它处理计时器(上面示例中的生命周期增加)或进程间消息,完全不知道这个问题. 阅读了什么是使C++程序崩溃的最简单方法?和raise(SIGABRT) 和 abort() 方法的区别,我尝试了以下 void mySignalHandler(int sig) { // low-level error rep
1510 2022-07-19
编程技术问答社区