В Delphi 10.3.2 , когда я программно вставляю элементы в TComboBox, имеющий "CharCase = ecLowerCase" (или ecUpperCase), я получаю ошибку Проект XXXX вызывает класс исключений EOutOfResources с сообщением 'Невозможно вставить строку '
Ошибка появляется только тогда, когда я добавляю в свой проект единицу измерения SHAREMEM (мне нужно сослаться на эту единицу, поскольку я должен обмениваться динамическими строками сDLL).
Похоже, ошибка связана с этим замечанием, которое я нашел в процедуре TComboBoxStrings.Add () (unit StdCtrls.pas): Из документации Windows SDK: Comclt32. dll версии 5.0 или более поздней: если установлена CBS_LOWERCASE или CBS_UPPERCASE, Unicode-версия CB_ADDSTRING изменяет строку. При использовании глобальной памяти только для чтения это приводит к сбою приложения.
program combo_lowercase;
uses ShareMem,
Vcl.Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
unit Unit1;
interface
uses Forms, Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Controls, Vcl.StdCtrls;
type
TForm1 = class(TForm)
combo: TComboBox;
procedure FormCreate(Sender: TObject);
end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
combo.Items.Clear;
combo.Items.Add('AAAAAAAAAAAAAA');
combo.Items.Add('bbbbbbbbbbbbbb');
combo.Items.Add('CCCCCccccccccc');
combo.Items.Add('ddddddDDDDDDDD');
end;
end.
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 206
ClientWidth = 496
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object combo: TComboBox
Left = 48
Top = 20
Width = 145
Height = 21
Style = csDropDownList
CharCase = ecLowerCase
TabOrder = 0
end
end
Есть ли обходной путь? Заранее спасибо.