? Digao Dalpiaz News on Telegram



25.03.2024 (версия 6.7) ( Минимальная версия dzhtmlText: 6.3 )
16.03.2024 (версия 6.6)
03/10/2024 (версия 6.5)
23.02.2024 (версия 6.4)
22.02.2024 (версия 6.3)
20.02.2024 (версия 6.2)
Lib{Platform}{Config} . Пожалуйста, просмотрите свои библиотечные пути.21.01.2024 (версия 6.1) ( Минимальная версия dzhtmltext: 5.2 )
12.01.2024 (версия 6.0) ( минимальная версия dzhtmltext: 5.1 )
ПРЕДУПРЕЖДЕНИЕ!!! Пожалуйста, полностью удалите предыдущую версию, удалив предыдущую папку компонентов DAM, потому что многие файлы изменили их имена и местоположения.
12/11/2023 (версия 5.2)
29.07.2023 (версия 5.1)
04/11/2023 (версия 5.0) ( Минимальная версия dzhtmltext: 4.0 )
DamUnitName12.09.2021 (версия 4.16)
24.07.2021 (версия 4.15)
13.06.2021 (версия 4.14)
21.03.2021 (версия 4.13)
14.03.2021 (версия 4.12)
13.03.2021 (версия 4.11)
05/05/2021 (версия 4.10)
02/10/2021 (версия 4.9)
18.12.2020 (версия 4.8)
27.11.2020 (версия 4.7)
11/11/2020 (версия 4.6)
31.10.2020 (версия 4.5)
27.10.2020 (версия 4.4)
26.10.2020 (версия 4.3) ( минимальная версия dzhtmltext: 2.6 )
26.10.2020 (версия 4.2)
18.10.2020 (версия 4.1) ( минимальная версия dzhtmltext: 2.04 )
14.10.2020 (версия 4.0)
Замечания:
24.09.2020
08/11/2020
08/07/2020
08/03/2020
30.07.2020
21.07.2020
25.05.2020
<img:nnn> ). Необходимо обновить компонент TDZHTMLTEXT.05/03/2020
05/02/2020
DamParams для заполнения параметров при использовании методов сообщений DAM. Это необходимо для версий Delphi ниже XE8, потому что не имел динамического массива в качестве поддержки типа.System.ImageList из блока Damlist (пакет времени проектирования), потому что не поддерживается версиями Delphi ниже XE8.AutoWidth в TDAM. Теперь в компоненте TDAMMSG появилась новая FixedWidth свойства, поэтому вы можете указать пользовательскую ширину по сообщению. Компонент сохранит внутреннюю функцию автоматической ширины, если фиксированная сила равна нулю (значение по умолчанию).CenterButtons по умолчанию false, потому что в стиле новых диалогов Windows есть кнопки, выровненные справа.26.04.2020
<imgres:{resource_name}> . Просто добавьте PNG -изображение в ресурсы приложения и используйте тег, чтобы ссылаться на их сообщение. Эта реализация находится в компоненте DZHTMLTEXT, используемой DAM. Вам просто нужно обновить свой компонент DZHTMLTEXT, и эта функция будет доступна. Пожалуйста, прочитайте раздел тега изображения DZHTMLTEXT, чтобы получить дополнительную информацию. Важно: изображения не будут видны во время дизайна .19.04.2020
10/07/2019
10/06/2019
10/05/2019
05/03/2019
02/11/2019
08/08/2019
07/07/2019
06/06/2019
02/05/2019
Добавьте новые свойства MessageColor и ButtonColor в компонент TDAM, чтобы разрешить настройку диалога сообщений.
Почти каждое приложение, которое вы создаете, вам необходимо добавить диалоговые окна сообщения.
Delphi предоставляет вам несколько вариантов, таких как Showmessage, Messagedlg и Messagebox.
По мере того, как ваш проект становится больше, диалоги могут испортить ваш код, в основном, если вам нужно написать много строк в сообщениях, со многими параметрами.
Если вам нужно отформатировать какую -то часть сообщения, вам нужно добавить метки в пользовательскую форму. Это может быть действительно плохо.
Посмотрите на это сообщение:
begin
ShowMessage( ' The task was scheduled to run at the time: ' +aTime+ ' . ' +# 13 # 10 +
# 13 # 10 +
' Please, check the schedule at main board. ' +
' If you want to change schedule, find by ID # ' +IntToStr(IDNumber)+ ' . ' +# 13 # 10 +
# 13 # 10 +
' This task was created by user ' +aUserName+ ' . Only this user can edit this task profile. ' );
end ;Итак, я думаю, что это действительно уродливо, не так ли? ?
С плотиной вы можете написать это же сообщение так :?
begin
InfoTaskScheduled([aTime, IDNumber, aUserName]);
end ;Этот компонент позволяет вам управлять всеми вашими сообщениями приложения в «контейнере». Вы можете создать диалоговое окно «Сообщение» с создателем мастера, позволяя вам форматировать сообщение (жирный, курсив, подчеркивание, имя шрифта, размер шрифта, цвет текстового фона, центр выравнивания, выравнивание справа, использовать выравнивание вкладок, кликабельные ссылки и т. Д.).
Вы можете указать кнопки сообщения, значок, заголовок формы и многое другое.
Затем вы указываете имя для сообщения. Итак, вы можете позвонить в сообщение в любой части вашего приложения, просто вызывая метод по имени сообщений!
Если вы указываете параметры в тексте сообщения, то при вызове метода сообщения вы можете указать параметры, которые будут заменены в тексте.
Пожалуйста, внимательно прочитайте эту документацию, чтобы узнать, как работает этот компонент. ?
Контейнер плотины перечисляет все созданные сообщения, сохраненные в DFM:

Создатель мастера сообщений, чтобы настроить диалог сообщения:

Диалог сообщения:?

Комплект
CTRL+Cдоступен в форме сообщения, чтобы скопировать сообщение в буфер обмена.
Сначала вам нужно установить мой компонент DZHTMLTEXT . Получите его здесь: https://github.com/digao-dalpiaz/dzhtmltext
Это метка с компонентом форматирования HTML. Сообщения используют этот компонент для отображения форматированного текста.
Если вы устанавливаете DZHTMLTEXT и DAM одновременно, используя утилиту установщика компонентов, после установки DZHTMLTEXT вам необходимо открыть и закрыть Delphi перед установкой DAM (это необходимо только для обновления файла пути библиотеки, используемого MSBuild).
LibWin32Release .Поддерживает Delphi XE3..Delphi 12
Перейдите в пакет меню> Откройте файл пакета (.lpk) и загрузите lazdampackage.lpk и нажмите на компиляцию .
Перейдите в пакет меню> Откройте файл пакета (.lpk) и загрузите lazdamdesignpackage.lpk и нажмите « Использовать»> «Установить» .
В настоящее время для сообщений доступны следующие языки:
Язык устанавливает заголовок кнопок в диалогах сообщения, таких как ОК, отменить, да, нет, и заголовок формы, когда информация, вопрос, предупреждение, ошибка и сообщение (пользовательский). Название формы может быть изменено в свойствах сообщения и может быть автоматически установлено другими объектами, такими как заголовок родительской формы, заголовок основной формы и заголовок приложения.
Вы можете открыть проблему, чтобы прислать мне новый языковой перевод или правильный текущий перевод
Основная идея состоит в том, чтобы сбросить один TDAM в основной форме или основной модуль данных. TDAM - это контейнер, в котором есть все tdammsg (диалог сообщения).
Чтобы управлять сообщениями, просто дважды щелкните по компоненту TDAM или щелкните правой кнопкой мыши и выберите «Управление сообщениями плотины» .
Но как вызвать сообщения?
У TDAM есть собственность под названием DamUnitName . Здесь вы определяете имя блока, чтобы содержать все методы сообщения. Когда вы используете блок сборки функции, компонент автоматически создаст этот блок в папке проекта с методами, основанными во всех созданных сообщениях (с тем же именем, что и имя сообщения).
Таким образом, в любом устройстве вы просто добавляете использование в этот блок и вызываете сообщение, которое вы хотите по имени сообщением. Если сообщение имеет параметры, метод будет объявлен автоматически запрашивать параметры в массиве.
Да, но если я нахожусь в одном классе (tform/tdatamodule), это сообщения TDAM и TDAMMSG, если я вызову метод по имени сообщением, Delphi думает, что я ссылаюсь на объект сообщения!
Это правда, и из -за этого компонент имеет скрытую функцию объекта. Вам нужно только назвать сообщение, начиная с _ . Таким образом, строитель устройства удалит этот символ, чтобы назвать метод, и Delphi не запутает две вещи.
Я рекомендую вам создать все сообщения с именем, начиная с _ символа.
Если вы используете мастер, имя будет автоматически начнется с этого символа.
На менеджере плотины есть кнопка, чтобы скрыть/не скрывать все выбранные сообщения.
Помните, каждый раз, когда вы меняете сообщения, вам нужно восстановить устройство. Просто нажмите блок сборки кнопки, чтобы обновить.
Хорошо, но я не хочу использовать это устройство! Есть еще один метод?
Да, конечно. Вы можете вызвать сообщение, используя функции объекта TDAMMSG. Просто используйте функции Run объекта сообщения или функции RunAsBool . В этом случае я рекомендую вам не скрывать сообщение, поэтому вы можете позвонить по имени объекта как есть.
Но я, честно говоря, рекомендую вам использовать устройство, так как это будет иметь гораздо больше смысла.
Могу ли я использовать более одного контейнера TDAM в своем приложении?
Да, вы можете. TDAM позволяет вам определить некоторые конфигурации, такие как шрифт сообщения и звуки. Таким образом, у вас может быть более одного TDAM, чтобы иметь эту группу конфигурации. Кроме того, вы можете использовать различные TDAM для групповых сообщений по категории. Вы можете поместить TDAM в определенные формы, но помните, что контейнер должен существовать, чтобы выпустить сообщения, конечно.
Если вы используете более одного TDAM, я рекомендую вам установить одно и то же DamUnitName на всех компонентах TDAM, поэтому при вызове кнопки «Сборка» он будет сгенерирован один блок со всеми сообщениями всех контейнеров TDAM. Таким образом, вы можете использовать этот единственный блок во всех других подразделениях вашего проекта, чтобы вызвать любое сообщение.
Коды результатов сообщения:
Если вы вызовите сообщение по методу имени сообщения, метод будет процедурой, если сообщение имеет только одну кнопку.
Если сообщение имеет две или три кнопки, метод будет функцией. Когда у него есть две кнопки, функция всегда будет возвращать логическое значение, возвращая True, если первая кнопка слева была нажата, или возвращение False, если нажатила вторая кнопка (последняя кнопка справа).
Когда сообщение имеет три кнопки, функция возвращает целое число 1, 2 или 3, в зависимости от того, какая кнопка была нажата в диалоговом окне сообщения. Первая кнопка - левая; Второе - средняя кнопка; Третья кнопка - правильная кнопка.
Итак, при использовании трех кнопок вы можете использовать переменную или даже case :
case QuestionSaveFile([aFileName]) of
1 : DoSaveFile; // Yes button
2 : { continue } ; // No button
3 : Abort; // Cancel button
end ; Если вы хотите использовать сменные параметры в сообщении, просто введите %p . Вы можете указать несколько параметров в одном и том же сообщении. Когда вы вызовуте сообщение, массив параметров последовательно в том же порядке, который они вводятся в сообщении.
Массив параметров - это тип варианта, поэтому им не нужны конверсии.
Пример:
// TDamMsg Message property = 'This is a %p message number %p at time %p'
MyCustomMessage([ ' test ' , 123 , Now]);
// or
MsgInfo( ' This is a %p message number %p at time %p ' , [ ' test ' , 123 , Now]); ButtonsColor: TColor = Определить цвет фона кнопок в диалоговом окне сообщения.
ButtonsFont: TFont = определяет текстовый шрифт с диалоговыми кнопками
ButtonsFontColor: TAlphaColor = определяет текстовый цвет для диалогового цвета (доступно только в среде FMX)
CenterButtons: Boolean = определить, будут ли кнопки в форме сообщения выровнены в центре. Если это свойство неверно, кнопки будут выровнены в правой форме.
DamDefault: Boolean = определяет, будет ли этот TDAM использоваться для сбора быстрых сообщений (пожалуйста, прочитайте раздел быстрых сообщений). У вас может быть только один, определяемый как по умолчанию в приложении.
DamUnitName: String = укажите имя блока, которое будет создано со всеми методами сообщений в папке проекта. Не указывайте расширение файла, потому что компонент автоматически завершит имя с помощью расширения .pas.
DialogBorder: Boolean = определяет, будет ли диалоговое окно «Окно сообщения» содержать границы. Вы можете отключить это свойство, чтобы создать современные темы диалога.
DialogPosition: TDamDlgPosition = определяет начальную позицию формы диалога:
HandleExceptions: Boolean = определяет этот TDAM для обработки всех исключений приложений, показывая сообщение об ошибке с тем же диалогом, что и все другие сообщения плотины. Только один TDAM может быть установлен для обработки исключений в приложении.
HideIcon: Boolean = Если True, значок в диалоговом окне сообщения будет подавлен.
Images: TCustomImageList = позволяет вам установить ImageList, используя TAG <img:idx> в тексте сообщения, где idx является индексом изображения.
Language: TDamLanguage = определяет язык, используемый кнопками сообщений и заголовком формы сообщения. Когда вы размещаете экземпляр компонента TDAM, это свойство будет инициализировано в соответствии с текущим языком системы. Если в соответствии с системой нет языка, английский язык будет установлен. Это свойство не имеет значения по умолчанию, именно потому, что оно должно хранить определяемый язык.
MessageColor: TColor = Определить цвет фона области сообщения в диалоговом окне сообщения.
MessageFont: TFont = определяет текстовый шрифт сообщений
MessageFontColor: TAlphaColor = определяет цвет текстового шрифта сообщений (доступный только в среде FMX)
PlaySounds: Boolean = Enable System Sounds При показе сообщений о предупреждении, вопросах и ошибках.
OnLinkClick(Sender: TObject; Msg: TDamMsg; const Target: string; var Handled: Boolean; var CloseMsg: Boolean; var MsgResult: TDamMsgRes) Это событие будет запускается при нажатии на ссылку, содержащуюся в сообщении.
По умолчанию цель ссылки будет автоматически открыта с использованием Shellexecute из Windows API, поэтому, если цель - это веб -ссылка, браузер по умолчанию откроет ссылку, или если цель является системным файлом, путь будет выполнен/открыт Windows.
Если вы хотите обойти это поведение, используйте это событие и установите Handled к True. Вы также можете установить CloseMsg флаг True и MsgResult , когда хотите закрыть окно сообщения.
OnShowMessage(Sender: TObject; Msg: TDamMsg; var MsgText: String; var Handled: Boolean; var MsgResult: TDamMsgRes) , перед отображением сообщения плотины, что позволяет вам перехватить сообщения и даже отображение обходного сообщения с помощью параметра обработанного.
Предупреждение! Если вы обходите сообщение об исключении, компонент не поднимет исключение, продолжая выполнение кода (если вы не создаете свое собственное исключение на процедуре события).
Button1: String = Подпись кнопки 1 в диалоговом окне сообщения. Доступно, когда кнопки = dbone/dbtwo/dbthree.
Button2: String = Подпись кнопки 2 в диалоговом окне сообщения. Доступно, когда кнопки = dbtwo/dbthree.
Button3: String = Подпись кнопки 3 в диалоговом окне сообщения. Доступно, когда кнопки = dbthree.
Buttons: TDamMsgButtons = определяет кнопки в диалоговом окне сообщения:
CustomIcon: TIcon = определяет пользовательский значок, чтобы показать в диалоговом окне сообщения. Этот значок отображается только при ICON = DICUSTOM.
CustomTitle: String = определяет пользовательский заголовок для формы сообщения. Эта заголовка используется только тогда title = dtcustom.
Dam: TDam = определяет контейнер плотины этого сообщения.
FixedWidth: Integer = определяет фиксированную ширину текстовой части в окне сообщения в пикселях. Если это значение равно нулю (по умолчанию), то ширина окна будет автоматически рассчитана в соответствии с текстом сообщения. Существует минимальные и максимальные фиксированные ограничения в форме сообщения (минимум = 300px / максимум = 75% ширины экрана - когда Android или iOS, максимум = 95% ширины экрана) .
HelpContext: THelpContext = определяет контекст справки. Если это свойство будет определен, когда в диалоговом окне «Сообщение» будет отображаться кнопка справки и откроет помощь при приложении в контексте цели. Также возможно использовать ключ F1.
HelpKeyword: String = определяет ключевое слово справки. Если это свойство будет определен, когда в диалоговом окне «Сообщение» будет отображаться кнопка справки и откроет справку приложения в целевой цели. Также возможно использовать ключ F1.
Icon: TDamMsgIcon = определяет значок в диалоговом окне сообщения:
Message: String = текст сообщения. Пожалуйста, используйте создателя мастера сообщений для форматирования текста или прочтите документацию Htlabel. Заменяемые параметры определяются %p в тексте сообщения. Используйте параметры при массиве в методе сообщения в том же порядке, что и в тексту сообщения. Вы также можете указать буквальный {except} , чтобы поймать текущее сообщение об исключении и заменить эту переменную в тексте сообщения (см. Примеры исключений).
Name: String = имя объекта сообщения. Если тогда имя начинается с _ символа, означает, что сообщение скрыто, поэтому Delphi не будет думать, что вы называете этот объект, когда вы называете метод сообщения, имеющего то же имя.
RaiseExcept: Boolean = установить это сообщение в качестве сообщения о повышении. Когда вы называете это сообщение, будет поднято исключение с текстом сообщения. В этом случае вам необходимо использовать хотя бы один TDAM с помощью лячных экспрессии = true, в противном случае сообщение не будет отформатировано с помощью настройки плотины.
SwapFocus: Boolean = по умолчанию, когда сообщение запускается, всегда первая кнопка слева начнется с фокуса. Если вы включите эту опцию, это сообщение запустит фокус на последней кнопке (кнопка справа).
Title: TDamMsgTitle = определяет заголовок формы сообщения
Все параметры сообщения автоматически «сбежались» компонентом.
Примеры:
procedure Test1 ;
begin
MyCustomMessage([ ' This will display <b> literal string ' , ' This will display "%p" literal string ' ]);
end ;
procedure Test2 ;
begin
MsgInfo( ' <b>First message parameter</b>: %p ' , [ ' Here I want to display literal <> characters ' ]);
end ;%p и {except} ).Если вы хотите отобразить литеральные символы HTML в фиксированной части сообщения, пожалуйста, проверьте константы побега на документации DZHTMLTEXT.
procedure MsgInfo ( const Msg: String; const Params: TDamParams = nil ); // message with Information icon
procedure MsgWarn ( const Msg: String; const Params: TDamParams = nil ); // message with Warning icon
procedure MsgError ( const Msg: String; const Params: TDamParams = nil ); // message with Error icon
function MsgQuest ( const Msg: String; const Params: TDamParams = nil ): Boolean; // message with Question mark icon
procedure MsgRaise ( const Msg: String; const Params: TDamParams = nil ); // message with Error icon (this raises an exception)
procedure ShowErrorMsg ; // show current error message
function CaptureErrorMsg : String; // get current error message Эти методы доступны по всему миру, на устройстве DamUnit или в названии устройства, которое вы указали в свойстве DamunitName.
Вы можете показывать быстрые сообщения непосредственно в коде, просто набирая сообщения и параметры, которые вам нравятся.
Эти методы будут использовать контейнер TDAM, который определяется как дефолт . Таким образом, вам нужно иметь один TDAM, доступный с свойством
DamDefault, установленным True .
Функция MsgQuest Результаты TRUE, если нажата кнопка «да», или возвращает FALSE, если кнопка не нажата.
Метод ShowErrorMsg показывает исключение в настоящее время. Вы можете использовать это в качестве попытки ... за исключением блока.
Function CaptureErrorMsg позволяет получить сообщение об ошибке в текущем исключении. Вы должны использовать это в Try..cept Block.
Пример улавливания исключений:
try
DoSomeStuff;
except
ShowErrorMessage; // will show error message dialog using Dam concept
end ; try
DoSaveFile;
except
MsgError( ' Fatal error saving file: %p ' , [CaptureErrorMsg]);
end ; Если вы указали Literal {except} в тексте сообщения, это будет заменено текущим сообщением об ошибке:
try
DoSaveFile;
except
MsgError( ' Fatal error saving file: {except} ' ); // don't need to use CaptureErrorMsg function!
end ;Вы также можете повторно создать исключение:
try
DoSaveFile;
except
raise EDam.Create( ' Fatal error saving file: {except} ' ); // re-raise a new exception with better text message
end ; Вы можете установить параметр RaiseExcept на объект сообщений плотины, поэтому при вызове сообщения будет поднято исключение.
Помните: чтобы воспользоваться ресурсами плотины, вам необходимо установить HandleExceptions на объекте контейнера плотины. Когда исключение будет поднято, DAM будет перехватывать это исключение и отобразить пользовательский диалог.
Примеры:
procedure TestException_Generic ;
begin
raise Exception.Create( ' This is my generic exception ' );
// HTML tags are NOT allowed when using generic exception
end ;
procedure TestException_DamRunTimeCreation ;
begin
raise EDam.Create( ' This is my <b>exception</b> with parameter %p ' , [ ' First parameter ' ]);
end ;
procedure TestException_DamDesignTimeCreation ;
begin
raise EDam.Create(MyCustomMessage, [ ' First parameter ' ]);
// MyCustomMessage represents a TDamMsg object created at design-time
end ;
procedure TestException_DamDesignTimeCreation_ByProperty ;
begin
_MyCustomMessage.Run([ ' First parameter ' ]);
// or
MyCustomMessage([ ' First parameter ' ]);
// MyCustomMessage represents a TDamMsg object created at design-time with property RaiseExcept=True
end ;
procedure TestException_Quick ;
begin
MsgRaise( ' This is my <b>exception</b> with parameter %p ' , [ ' First parameter ' ]);
// This method is for compatibility, but I recommend you to use "raise EDam.Create" instead.
end ;Существует файл под названием damlang.ini (папка ресурсов), в котором есть все строки, используемые на компоненте. Если вы хотите изменить текст в этом файле, вам нужно будет запустить « построить Dam Resource.bat » после этого. Эта партия создаст новый файл " dam_resource.res " в папке корневых компонентов.
После этого, пожалуйста, запустите « AfterBuild.Bat », чтобы опубликовать этот новый файл ресурса в папку "LIB".
Если вы хотите добавить новый язык, потребуются некоторые изменения в коде. Поэтому, пожалуйста, откройте новую проблему и опубликуйте нужные языковые строки, затем я буду применять в компоненте.
Когда вы используете версии Delphi ниже XE8, во всех методах плотины, которые содержат параметр Tdamparams, вы не сможете напрямую передавать параметр динамического массива.
В таких случаях используйте глобальную функцию DamParams . Эта функция также доступна на автоматическом устройстве DAM.
Итак, вот несколько примеров того, как использовать метод сообщения плотины в этих версиях:
// Quick message:
MsgInfo( ' This is a test message with parameter value = %p ' , DamParams([ 999 ]));
// Custom message:
MyCustomMessage(DamParams([ ' Parameter 1 ' , ' Parameter 2 ' ]));Дизайн этого компонента появился примерно в 2005 году, когда я проверил необходимость создания стандартизированных диалогового окна для моих приложений.
В то время я назвал компонент «лучшего диалога», который на португальском языке будет DM ( Diálogo Melhor ).
Через некоторое время проект содержит новую структуру с контейнером. Затем я переименовал компонент в «Еще лучший диалог», который на португальском языке - плотина ( Diálogo ainda melhor ). ?
Таким образом, название компонента в конечном итоге осталось как плотина.
Сегодня я использую этот компонент почти во всех моих приложениях Delphi.