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

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

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2015, 18:11   #1
Anton931
Пользователь
 
Регистрация: 20.02.2015
Сообщений: 35
По умолчанию Изменить цвет Edit

Подскажите пожалуйста, как изменить цвет Static компонента, а точнее Edit в WINAPI. Нужно сделать фон у Edit черный, а буквы белыми (примерно как в CMD)Знаю что делается через сообщение WM_CTLCOLORSTATIC, но все примеры на C++, и в этом проблема, в нем я не силен. Нужно на Delphi.
Anton931 вне форума Ответить с цитированием
Старый 02.04.2015, 18:23   #2
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Edit1.Color - цвет фона
Edit1.Font.Color - цвет шрифта
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 02.04.2015, 18:29   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а точнее Edit в WINAPI.
А почему именно в WinAPI? Ты же с компонентами работаешь, зачем тебе WinAPI?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.04.2015, 18:40   #4
Anton931
Пользователь
 
Регистрация: 20.02.2015
Сообщений: 35
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А почему именно в WinAPI? Ты же с компонентами работаешь, зачем тебе WinAPI?
я создаю динамический компонент

Код:
  Memo := CreateWindowEx(WS_EX_CLIENTEDGE,
                         'Edit',
                         nil,
                         WS_CHILD or WS_VISIBLE or WS_VSCROLL or ES_AUTOHSCROLL or ES_MULTILINE or ES_WANTRETURN or ES_NUMBER,
                         165, 131, 100, 50,
                         hWindow,
                         Memo_1,
                         hInstance,
                         nil);
Anton931 вне форума Ответить с цитированием
Старый 02.04.2015, 18:49   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
CreateWindowEx
О_о... Извини за излишнее любопытство но почему именно так?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.04.2015, 18:54   #6
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
По умолчанию

да интересно почему?)
HTTqp вне форума Ответить с цитированием
Старый 02.04.2015, 18:59   #7
Anton931
Пользователь
 
Регистрация: 20.02.2015
Сообщений: 35
По умолчанию

Цитата:
О_о... Извини за излишнее любопытство но почему именно так?
и
Цитата:
да интересно почему?)
Какая разница, есть конкретный вопрос, и хотелось бы получить ответ от знающих людей, а зачем и как это реализовал не имеет смысла. Прошу не постить не по теме, благодарю за понимание...
Anton931 вне форума Ответить с цитированием
Старый 02.04.2015, 19:43   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Понятно. Что ж. Насколько я понимаю тебе нужно в процедуре обработки окна прописать что-то типа
Код:
function WindowProc(hwnd, msg, wparam, lparam: longint): longint; stdcall; //обработчик сообщений
begin
  Result := DefWindowProc(hwnd, msg, wparam, lparam);
  case Msg of

WM_CTLCOLORSTATIC:
if (lParam = Edit1)  then
  begin
        SetTextColor(HDC(wParam), RGB(255,255,255));
        SetBkColor(HDC(wParam), RGB(0,0,0));
  end
;

...
  end;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.04.2015, 19:59   #9
Anton931
Пользователь
 
Регистрация: 20.02.2015
Сообщений: 35
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Понятно. Что ж. Насколько я понимаю тебе нужно в процедуре обработки окна прописать что-то типа
Код:
function WindowProc(hwnd, msg, wparam, lparam: longint): longint; stdcall; //обработчик сообщений
begin
  Result := DefWindowProc(hwnd, msg, wparam, lparam);
  case Msg of

WM_CTLCOLORSTATIC:
if (lParam = Edit1)  then
  begin
        SetTextColor(HDC(wParam), RGB(255,255,255));
        SetBkColor(HDC(wParam), RGB(0,0,0));
  end
;

...
  end;
end;
увы что то похоже не так,
я пробывал вот этот способ

Код:
 WM_CTLCOLOREDIT: begin
      SetBkColor(wParam, $00);
      SetTextColor(wParam, $ffffff);
      Result:=GetStockObject(BLACK_BRUSH);
    end;
ну и он что то не работает, может не правильно применяю. Вот код целиком:

Код:
program Project1;

uses
   Windows, Messages;
  {$SETPEFLAGS IMAGE_FILE_RELOCS_STRIPPED}

const
  Memo_1 = 100;

var
  MSG: TMSG;
  WC: TWndClass;
  hWindow, Memo: HWND;

function WndProc(hWnd: HWND; Msg: UINT; WParam: Integer; lParam: Integer): Integer; stdcall;
begin
  Result:=0;
  case msg of
  WM_CTLCOLORSTATIC:
    if (lParam = Memo)  then
      begin
            SetTextColor(HDC(wParam), RGB(255,255,255));
            SetBkColor(HDC(wParam), RGB(0,0,0));
      end;
    WM_DESTROY:
      begin
        PostQuitMessage(0);
        Exit;
      end;
  end;
  Result := DefWindowProc(hWnd, Msg, WParam, LParam);
end;

procedure CreateWindow;
begin
  FillChar(WC, SizeOf(TWndClassEx), 0);
  WC.lpszClassName := 'Window';
  WC.lpfnWndProc := @WndProc;
  WC.hbrBackground := 1;
  WC.hCursor := LoadCursor(0, IDC_ARROW);
  RegisterClass(WC);
  hWindow := CreateWindowEx(0,
                            WC.lpszClassName,//Имя класса окна
                            nil{Имя окна},
                            WS_VISIBLE or WS_DLGFRAME,//Стиль
                            200,300,400,200,
                            0,
                            0,
                            hInstance,//Описатель приложения, с которым окно связывается
                            nil);
  Memo := CreateWindowEx(WS_EX_CLIENTEDGE,
                         'Edit',
                         nil,
                         WS_CHILD or WS_VISIBLE or WS_VSCROLL or ES_AUTOHSCROLL or ES_MULTILINE or ES_WANTRETURN,
                         10, 10, 300, 100,
                         hWindow,
                         Memo_1,
                         hInstance,
                         nil);
  sendmessage(Memo, EM_REPLACESEL, 0, longword(pchar('Сообщение: '+#13#10)));
  ShowWindow(hWindow, SW_SHOW);//Показать окно
  UpDateWindow(hWindow);//Обновления окна
end;
//============================Конец "Создание формы"============================

begin
  CreateWindow;
  while GetMessage(MSG, 0, 0, 0) do
    begin
      TranslateMessage(MSG);
      DispatchMessage(MSG);
    end;
end.
Anton931 вне форума Ответить с цитированием
Старый 02.04.2015, 20:16   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

У меня нет возможности проверить.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
изменить цвет Dimarik HTML и CSS 2 20.07.2010 10:18
Как с помощью JavaScript изменить цвет фона ячеек в таблице,так что бы можно было выбрать цвет из списка Gotessa JavaScript, Ajax 1 09.05.2009 16:05
цвет ссылки изменить wolf950 HTML и CSS 3 16.03.2009 18:32
Изменить цвет неактивного Edit Xardas Общие вопросы Delphi 11 20.01.2008 22:38
Цвет в Memo из Edit M@rsel Win Api 4 16.02.2007 12:43