Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2011, 16:59   #1
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,237
Стрелка Возможность редактирования текста в ComboBox

Есть стили у ComboBox, csOwnerDrawFixed и csOwnerDrawVariable. Строчки отрисовываются вручную при этих стилях. В таких режимах как-то надо заставить компонент давать редактировать текст как при csDropDown, не теряя ручной отрисовки строк.
Какие есть способы для этого?
Alter вне форума Ответить с цитированием
Старый 16.01.2011, 17:17   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Честно говоря я бы не мороча особо яйки, наложил на комбик сверху Эдит, так чтоб Эдит не закрывал стрелочку комбика. Тогда прога будет "делать вид" что ее Комбик супер-пупер навороченый, кто подмены то заметит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.01.2011, 19:01   #3
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Например :
Код:
procedure TForm1.ComboBox1Click(Sender: TObject);
begin
ComboBox1.Style:=csDropDown;
end;

procedure TForm1.ComboBox1Exit(Sender: TObject);
begin
ComboBox1.Style:=csOwnerDrawFixed;
end;
asmodey1 вне форума Ответить с цитированием
Старый 16.01.2011, 20:38   #4
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,237
По умолчанию

Вообщем ничего лучше, чем сделать потомка от ComboBox не придумал.
Код:
unit ComboBoxDirColor;

interface

uses
  Windows, SysUtils, Classes, Controls, StdCtrls, Graphics;

type
  TComboBoxDirColor = class(TComboBox)
  private
    { Private declarations }
  protected
    procedure DrawItem(Index: Integer; Rect: TRect;
                       State: TOwnerDrawState); override;
    procedure CreateParams(var Params: TCreateParams); override;
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MyCtrl', [TComboBoxDirColor]);
end;

{ TComboBoxDirColor }

procedure TComboBoxDirColor.CreateParams(var Params: TCreateParams);
begin
 inherited CreateParams(Params);
 if not (Self.Style in [csOwnerDrawFixed, csOwnerDrawVariable]) then
 with Params do
  Style := Style or CBS_OWNERDRAWFIXED;
end;

procedure TComboBoxDirColor.DrawItem(Index: Integer; Rect: TRect;
  State: TOwnerDrawState);
begin
 if (odSelected in State) then
  Canvas.Brush.Color := $CCCCCC
 else
  Canvas.Brush.Color := clWhite;
 Canvas.FillRect(Rect);
  case DirectoryExists(Items[index]) of
 True: begin
    Canvas.Font.Color := clGreen;
       end;
 False:begin
    Canvas.Font.Color := clRed;
       end;
  end;
 Canvas.TextOut(Rect.Left, Rect.Top, Items[Index]);
 inherited;
end;

end.
Если нужно просто контрол с возможностью редактирования, без отрисовки(у меня специфическая нужда в этом была ), то удалить это
Код:
    procedure DrawItem(Index: Integer; Rect: TRect;
                       State: TOwnerDrawState); override;

procedure TComboBoxDirColor.DrawItem(Index: Integer; Rect: TRect;
  State: TOwnerDrawState);
begin
 if (odSelected in State) then
  Canvas.Brush.Color := $CCCCCC
 else
  Canvas.Brush.Color := clWhite;
 Canvas.FillRect(Rect);
  case DirectoryExists(Items[index]) of
 True: begin
    Canvas.Font.Color := clGreen;
       end;
 False:begin
    Canvas.Font.Color := clRed;
       end;
  end;
 Canvas.TextOut(Rect.Left, Rect.Top, Items[Index]);
 inherited;
end;
и название класса поменять, чтобы не путать.
Вложения
Тип файла: rar MyCtrl.rar (8.2 Кб, 22 просмотров)

Последний раз редактировалось Alter; 16.01.2011 в 20:43.
Alter вне форума Ответить с цитированием
Старый 16.01.2011, 20:59   #5
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

А чем мой вариант не устроил ?
asmodey1 вне форума Ответить с цитированием
Старый 17.11.2021, 22:50   #6
avmaksimov
Новичок
Джуниор
 
Регистрация: 22.05.2012
Сообщений: 1
Лампочка

Цитата:
Сообщение от asmodey1 Посмотреть сообщение
А чем мой вариант не устроил ?
ПОтому что код не рабочий. Единственный верный вариант написал автор. Ещё можно проверку в Create убрать и стиль должен быть обязательно csDropDown.

Последний раз редактировалось Alar; 17.11.2021 в 23:51. Причина: минус ссыль
avmaksimov вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запрет редактирования части текста в документе Bagema Microsoft Office Word 1 04.02.2011 09:29
Возможность сокрытия текста макроса Хфедя Microsoft Office Excel 5 12.11.2010 10:41
Программа на Си++ для редактирования текста! Andersen1313 Помощь студентам 1 18.10.2010 12:56
Может сделать возможность редактирования первого поста? Вадим Буренков О форуме и сайтах клуба 0 02.08.2009 16:14

Реклама для незарегистрированных, регистрация на форуме