Мне удалось исправить эту проблему в VS 2015 с помощью следующих шагов.
[1] (Не уверен, что это необходимо) Отключить / GL во всех компонентах
C / C ++> Оптимизация> Оптимизация всей программы> Нет
В файлы .VCXPROJ это:
<WholeProgramOptimization>false</WholeProgramOptimization>
Выключить / LTCG
Библиотекарь> Общие> Генерация временного кода связи
<LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>
[2 ] Более важный шаг, убедитесь, что все компоненты рисуются из одних и тех же каталогов. Мой основной EXE-файл использовал:
Release Include
$(WindowsSdkDir)include\um;$(WindowsSdkDir)include\shared;$(UniversalCRT_IncludePath);$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include
Release Library
$(VC_LibraryPath_x86);$(WindowsSdk_71A_LibraryPath_x86);
.lib использовал разные каталоги (неправильно):
Release Include
$(VC_IncludePath);$(WindowsSDK_IncludePath);
Release Library
$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86
Я изменил каталоги .lib так, чтобы они были такими же, как .exe, и ошибка компиляции исчезла.
Каждый кликабельный тег не обязательно должен быть отдельным элементом управления. Это просто должна быть область, в которой вы можете обнаружить щелчок.
Предположим, вы представляете каждую область как область Windows . Вы можете определить ширину каждого из них по тексту с помощью функции TCanvas.TextExtent
. Затем создайте область с помощью функции типа CreateRectRgn
. Для закругленных углов попробуйте вместо этого CreateRoundRectRgn
. Вы можете проверить наличие событий мыши в каждом регионе с помощью функции PtInRegion
. Вы можете нарисовать границы вокруг них с помощью FrameRgn
. Последнее препятствие - нарисовать их на экране, чтобы они все поместились. Вы создаете регионы и знаете их ширину,
Если вы используете последнюю версию Delphi, используйте TFlowPanel и некоторые соответствующие элементы управления для тегов. Для этого подойдет простой TButton или TLinkLabel.
Существует два возможных решения настраиваемого выравнивания в Delphi 7. Вы можете создать свою собственную потоковую панель, унаследовав от TCustomPanel и переопределив метод AlignControls (), или вы можете установить выравнивание на alCustom и обработать событие OnAlignPosition.
Думаю, я бы выбрал вариант TCustomPanel-производный. TFlowPanel в форме Delphi 2007 использует эту опцию - хотя я должен признать, что я никогда не пробовал себя ...