Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2022, 23:00   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 478
По умолчанию CreateMessageDialog без кнопок/со своими кнопками

Вопрос такой
1. Можно ли создать CreateMessageDialog без кнопок?
Так чтобы потом приделать свои через TButton.Create

2. Лучше вариант, если такое возможно:
Создать свою кнопку со своими параметрами, со своим именем, которая будет передаваться в CreateMessageDialog

Сейчас все делается через
Код:
          cm := FindChildControl('Yes');
            TButton(cm).Height:=35;
            TButton(cm).Font.Charset:=RUSSIAN_CHARSET; 
                                    {если не прописать Charset - на 11ке бывают сбои}
            TButton(cm).WordWrap:=True;
            TButton(cm).SetTextBuf('Название');
            TButton(cm).Font.Style:=[fsBold];
Но это выглядит довольно криво - сначала создается кнопка, потом проводится ее поиск, потом изменение параметров... Хочется как-то выпрямить этот алгоритм, чтобы сразу создавалась нужная кнопка
Kronos913 вне форума Ответить с цитированием
Старый 05.10.2022, 01:25   #2
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 478
По умолчанию

Нашел такой способ: сделать цикл
Код:
For i:=0 to ControlCount-1 do begin
И дальше через case переименовать все кнопки

Но это все равно не прямой путь...
Kronos913 вне форума Ответить с цитированием
Старый 05.10.2022, 01:51   #3
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,174
По умолчанию

Тогда зачем вы пытаетесь что-то создать? Любая программа это набор доступных(известных программисту) возможностей комбинированных произвольным образом. Прямого пути не существует.
macomics вне форума Ответить с цитированием
Старый 05.10.2022, 13:08   #4
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 478
По умолчанию

Ну я сейчас до такого кода додумался
Но есть ли лучше путь для достижения этой же цели?

Код:
Procedure Knopki(MD: TForm);
const
  wrYes=56190323;
  wrNo=151151;
  wrCancel=105079150;
  wrAll=54619244;

  Names:array [0..3] of pChar=('Имя 1', 'Имя 2', 'Имя 3', 'Имя 4');
var
  i:integer;

  Procedure GoGo(const a:byte);
  begin
    with TButton(MD.Controls[i]) do begin
      Height:=35;
      Font.Charset:=RUSSIAN_CHARSET;
      WordWrap:=True;
      ShowHint:=true;
      SetTextBuf(Names[a]);
    end;
  end;

begin
  With MD do begin
    Font.Charset:=RUSSIAN_CHARSET;
    For i:=0 to ControlCount-1 do begin
      case MessageDialogButtonsCase(Controls[i].Name) of
           wrYes: begin
                    GoGo(3);
                    TButton(Controls[i]).Hint:='Подсказка 4';
                  end;
            wrNo: begin
                    GoGo(0);
                    TButton(Controls[i]).Hint:='Подсказка 1';
                  end;
        wrCancel: begin
                    GoGo(1);
                    TButton(Controls[i]).Hint:='Подсказка 2';
                  end;
           wrAll: begin
                    GoGo(2);
                    TButton(Controls[i]).Hint:='Подсказка 3';
                  end;
      end;
    end;
  end;
end;
MessageDialogButtonsCase - asm-процедура, которая превращает строку в число, чтобы запихнуть ее в case
Kronos913 вне форума Ответить с цитированием
Старый 05.10.2022, 14:32   #5
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,174
По умолчанию

А чего подсказки в массив не запихнули?
Код:
   Hints: array [0 .. 3] of PChar = ('Подсказка 1', 'Подсказка 2', 'Подсказка 3', 'Подсказка 4');
   function GoGo(a: Integer): PChar; // Для 32-битной программы нет смысла экономить на длине индекса.
   begin
      ...
      Result := Hints[3];
   end;
...
    mrYes: TButton(Controls[i]).Hint := GoGo(3);
    ...
Индексация в любом режиме процессора не может быть выполнена коротким значением. Для 16-битного режима byte все равно превратится в word, а у вас будут лишние заморочки для этого. Для 32-битной программы byte будут расширять до longint, а в 64-битной до int64 - потому, что процессору нужно значение длиной соответствующей разрядности, чтобы можно было индексировать массив.

Последний раз редактировалось macomics; 05.10.2022 в 14:44.
macomics вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отключить перенос строки в CreateMessageDialog Kronos913 Общие вопросы Delphi 4 03.02.2022 21:50
управление ScrollBox своими кнопками dsbv Общие вопросы Delphi 1 12.04.2019 09:14
С Кнопками ProGec4 Windows Forms 2 05.01.2012 10:07
Можно ли работать с кнопками Button как с массивом кнопок? i-cpp Общие вопросы .NET 6 25.09.2010 22:29
Работа с кнопками. dan582107 Общие вопросы Delphi 10 31.08.2010 08:56