Delphi. TSTATUSBAR, TCHECKBOX, TRADIOBUTTON и TBUTTON с другим лицом.:
SICOZ Sicoz@narod.ru
Исследуя хелпы по Delphi и сопутствующую литературу, я нарыл несколько приколов, которые могут приятно разнообразить внешний вид стандартных компонентов.
Многострочный TBUTTON.
Рис 1.
Т.к. лучший рассказ о программном коде это сам программный код, смотрим нижеследующий фрагмент:
procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.Caption:='Многострочная'#13'кнопка';
SetWindowLong(Button1.Handle,GWL_STYLE,
GetWindowLong(Button1.Handle,GWL_STYLE) or BS_MULTILINE);
end;
Просто и сердито. Строки обязательно, нужно разделять #13(символ возврата каретки, т.е. переход на новую стоку). Ну и само собой разумеется строк может быть много, главное каретку переводить:).
Выравнивание надписей в TBUTTON.
Рис 2.
Продвигаясь путем предыдущей главы:
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Button1.Handle,GWL_STYLE,
GetWindowLong(Button1.Handle,GWL_STYLE) or BS_RIGHT or BS_TOP);
end;
Ну здесь и так все ясно. Единственное, что нужно добавить, так это сообщения, которыми можно равнять надписи.
Выравнивание по горизонтали – BS_RIGHT BS_CENTER BS_LEFT
Выравнивание по вертикали – BS_TOP BS_VCENTER BS_BOTTOM.
Комбинируя через дизъюнкцию, текст можно загнать в какой-нибудь угол(как в примере).
Не TCHECKBOX и TRADIOBUTTON, а кнопочки.
Рис 3.
Рис 4.
Во многих апликушках такие кнопочки используются, но в стандартных компонентах такое не предусмотрено:( Зараз мы это исправим.
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(CheckBox1.Handle,GWL_STYLE,
GetWindowLong(CheckBox1.Handle,GWL_STYLE) or BS_PUSHLIKE);
end;
Теперь у нас есть прикольный Чекбоксик. Работать с ним надо так же, как и с обычным. Вставив в это сообщение хэндлы РадиоБатона вместо Чекбоксовских, получим все тот же РадиоБатон в виде кнопки.
Простейший способ вставить картинки в TSTATUSBAR.
Рис 5.
1. Кидаем на форму StatusBar и ImageList.
2. В ImageList забивается одна и более картинок.
3. При создании формы посылаем вот такое сообщение:
procedure TForm1.FormCreate(Sender: TObject);
begin
SendMessage(Statusbar1.Handle,SB_SETICON,0,
ImageList_GetIcon(ImageList1.Handle,0,0));
end;
4. В раздел uses добавляем модуль CommCtrl. И вообще, если у нашего Бара несколько панелей, то в N-ую панель картинка заливается следующим образом:
Необходимо отметить то, что нумерация панелей и картинок начинается с нуля. Компилируем и радуемся красивому Бару. Единственно, что нужно добавить, так это то, что при разрушении формы не мешало бы удалить объект следующим образом:
procedure TForm1.FormDestroy(Sender: TObject);
begin
DeleteObject(SendMessage(StatusBar1.Handle,SB_GETICON,N,0));
end;
где N - номер панели в Statusbar в которой удаляем объект.