На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> ShowMessage - нельзя ли цветным сделать? , ... или что-то другое есть подобное?
    Чтобы привелечь внимание юзера к сообщению - взбрело в голову - сделать ShowMessage цветным.
    Подскажите, пожалуйста, это возможно или нет? Или что-то такое же подобное есть?
      Вот такие варианты можно использовать:
      1) Стандартный ShowMessage (описан в Dialogs.pas) использует CreateMessageDialog(...): TForm для
      получения диалога. Так что можно самостоятельно его получить и выполнить "раскраску" его элементов
      самостоятельно. На нем располагаются:
      а) для отображения текста: компонент TLabel с именем "Message";
      б) для иконки: компонент TImage с именем "Image";
      в) кнопки TButton в зависимости от опций с именами "Yes", "No", "OK", "Cancel", "Abort", "Retry",
      "Ignore", "All", "NoToAll", "YesToAll", "Help".
      Так что можно использовать конструкции вида:
      ExpandedWrap disabled
        ...
         
        uses ..., Dialogs;
         
        ...
        function MyShowMessage( const Msg: string; DlgType: TMsgDlgType = mtInformation; Buttons: TMsgDlgButtons = [mbOK]; HelpCtx: Longint = 0; X: integer = -1; Y: Integer= -1; const HelpFileName: string = '' ) : Integer;
        var
           AComp: TComponent;
           ADlgForm : TForm;
        begin
           ADlgForm := CreateMessageDialog(Msg, DlgType, Buttons);
         
           with ADlgForm do
           try
              // Раскрашиваем что надо...
                 // получить нужный компонент на форме
                 AComp := ADlgForm.FindComponent( 'Message' ); // здесь пытаемся получить TLabel для сообщения (имя должно быть "Message")
                 if AComp is TLabel then
                    TLabel(AComp).Color := clRed; // меняем цвет на красный
         
                  ... аналогично можно изменять и остальное ...
                  ... можно и добавить новое ...
         
              // Далее стандартно (как в Dialogs.pas:: MessageDlgPosHelp)
              HelpContext := HelpCtx;
              HelpFile := HelpFileName;
              if X >= 0 then Left := X; if Y >= 0 then Top := Y;
              if (Y < 0) and (X < 0) then Position := poScreenCenter;
         
              Result := ShowModal;
         
           finally
              Free;
           end;
        end;



      2) создать свою форму для сообщений и использовать дизайнер Delphi, имея полную свободу действий.
        Цветным? Синий ShowMessage, красный ShowMessage, зеленый ShowMessage? ;)

        Ну а вообще, почему бы и нет?

        ExpandedWrap disabled
          unit Unit2;
           
          interface
           
          uses
            Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
            Dialogs, StdCtrls;
           
          type
            TForm2 = class(TForm)
              Button1: TButton;
              procedure Button1Click(Sender: TObject);
            private
              procedure WMUser(var Message: TMessage); message WM_USER;
            end;
           
          var
            Form2: TForm2;
           
          implementation
           
          {$R *.dfm}
           
          procedure TForm2.Button1Click(Sender: TObject);
          begin
            PostMessage(Handle, WM_USER, 0, 0);
            MessageBox(Handle, 'This Is A colored Message Box', 'Colored MessageBox.',
              MB_OK or MB_ICONWARNING);
          end;
           
          function NewOpenWndProc(Wnd: HWND; uMsg: DWORD;
            WParam, LParam:integer): Integer; stdcall;
          begin
            case uMsg of
              WM_CTLCOLORSTATIC:
              begin
                Result := CallWindowProc(Pointer(GetWindowLong(Wnd, GWL_USERDATA)),
                  Wnd, uMsg, WParam, LParam);
                SetTextColor(WParam, $FF0000);
                Exit;
              end;
              WM_COMMAND:
              begin
                EndDialog(Wnd, 0);
                Exit;
              end;
              WM_NCDESTROY:
                Result := 1;
            else
              Result := CallWindowProc(Pointer(GetWindowLong(Wnd, GWL_USERDATA)),
                Wnd, uMsg, WParam, LParam);
            end;
          end;
           
          procedure TForm2.WMUser(var Message: TMessage);
          var
            hMBHandle: HWND;
          begin
            hMBHandle := GetActiveWindow;
            if hMBHandle <> 0 then
              SetWindowLong(hMBHandle, GWL_USERDATA,
                SetWindowLong(hMBHandle, DWL_DLGPROC, DWORD(@NewOpenWndProc)));
          end;
           
          end.
          :rolleyes: Ребята! Умнички! Спасибо огромное за помощь! :rolleyes:
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0465 ]   [ 16 queries used ]   [ Generated: 28.04.24, 10:17 GMT ]