Аналог компонента TComboBox

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

>>в одних текстурах. до конца января черновик опубликую.
Зачем мне в текстурах?, мне нужен лцлный наследник TCustomForm, безболезненно заменяющий TForm

Добавлено спустя 3 минуты 9 секунд:
зачем мне это нужно: http://forum.lazarus.freepascal.org/ind ... 205.0.html
7bit
новенький
Сообщения: 43
Зарегистрирован: 01.10.2011 12:35:52

Сообщение 7bit »

olegy123 писал(а):Я бы не советовал изучать сразу EhLib, там много сложного..
посмотрите как расписано тут.
http://delphikingdom.com/asp/viewitem.a ... logid=1213

Интереса ради попробовал запустить тестовый примерчик в Ubuntu 16.04 gtk2. Не работает, при запуске выдает ошибку (уже не помню какая точно, с виджетами связана).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
olegy123
долгожитель
Сообщения: 1643
Зарегистрирован: 25.02.2016 11:10:20

Сообщение olegy123 »

Код: Выделить всё

type


  { TListForm }

  TListForm = class(TCustomForm)

  protected
    procedure CreateParams(var Params: TCreateParams); override;
    procedure CreateWnd; override;

  end;

  { TMyComboBox }
  TMyComboBox = class (TEdit)
  private
    FListForm:TListForm;

  protected
//    procedure WMChar(var Message: TLMChar); message LM_CHAR;
    procedure InitializeWnd; override;

  end;

implementation

{ TListForm }

procedure TListForm.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
end;

procedure TListForm.CreateWnd;
begin
  inherited CreateWnd;
//  gtk_window_set_decorated()
end;

{ TMyComboBox }
procedure TMyComboBox.InitializeWnd;
var
  pos:TPoint;
begin
  inherited InitializeWnd;
  FListForm:=TListForm.CreateNew(self);
  pos:=ClientToScreen(Point(0,Height));
  FListForm.Left:=pos.x;
  FListForm.Top:=pos.y+24;
  FListForm.FormStyle:=fsSystemStayOnTop;
  FListForm.BorderStyle:=bsNone;
  FListForm.Show;
end;


пример1.jpg


Добавлено спустя 1 минуту 34 секунды:
С gtk вообще не работал так что точно какие там команды нужны для формирования окошек, я не знаю.

Добавлено спустя 2 минуты 17 секунд:
та же Popup выводится нормально, т.е. в принципе можно изучить формирования окон
У вас нет необходимых прав для просмотра вложений в этом сообщении.
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Уважаем чужое время и даем код который компилируется без дописывания
olegy123
долгожитель
Сообщения: 1643
Зарегистрирован: 25.02.2016 11:10:20

Сообщение olegy123 »

Код: Выделить всё

var
  cb:TMyComboBox;

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  cb:=TMyComboBox.Create(self);
  cb.Parent:=self;
  cb.Left:=130;
  cb.Top:=80;
end;
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Время говорю сэкономить... полный текст привести... а не кучку обрывков...

Вот собственно что я имею ввиду https://imgur.com/a/NSHu4 сначала открываются комбобоксы типа линий и цвета - они честные, кустомдравные, фокус не крадут. потом открывается муляж комбобокса с выбором слоев - фокус крадется, что заметно по морганию рамки окна

Реализация этого http://svn.shamangrad.net/zcad/trunk/ca ... mbobox.pas не моя, я только туда довольно по хамски впилил взаимодействие с потрохами зкада - чтоб со стороны этих потрохов было как можно меньше забот о правильности содержимого этого "комбобокса"

Что там надо вписать в

Код: Выделить всё

procedure TZCADDropDownForm.CreateParams(var Params: TCreateParams);

или еще куда, чтоб фокус лишний раз не дергать? пусть хотябы под виндой работает как надо
olegy123
долгожитель
Сообщения: 1643
Зарегистрирован: 25.02.2016 11:10:20

Сообщение olegy123 »

cb.tar.gz


Добавлено спустя 4 минуты 17 секунд:
zub писал(а):чтоб фокус лишний раз не дергать?

все зависит от видов окон(в винде одно на всех.. в gtk их вроде два normal & popup.)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить