Поставлена задача - написать красивое приложение. Может кто компоненты подскажет?
Используются button, edit, combobox, dbgrid.
Основная проблема: как сделать у edit, combobox и dbgrid фоном картинку, а не простую заливку?
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
01-12-2006 12:04
>>> А красоты своего грида
Лично по мне, стандартный грид - некрасив. Нормальную альтернативу предлагает TMS сетки. Рекомендую. При этом сетка не слишком сильно отличается от привычной. Кстати, в этом же пакете есть и другие красивые компоненты (но не сильно отличающиеся от стандартных - это основной плюс!).
>>>попробуйте JVCL
Попробовал. Переварить всё сразу не смог - буду переваривать по частям. :-)))
>>>www.devexpress.com
Спасибо. Насколько я понял - они платные и в данный момент более актуальны бесплатные компоненты.
>>>картинка не сделает ваше приложение красивым.
Вы стали бы играть в игровые автоматы, если бы дизайн игрушки был сделан в виндовом стиле? Я пишу ПО для автомата по продаже рингтонов и красивая шкурка - обязательный элемент.
>>To : Алексей Румянцев
>>TTreeView = class(ComCtrls.TTreeView)
кстати, хороший способ подмены компонентов, не устанавливая их в палитру и сохраняя визуальный контроль, сам пользуюсь - удобно
тока такие дописки лучше выделить в отдельный модуль и подключать его последним в списке модулей (в части Interface)
Shoor: Да не "ну,ну" а точно - ты отделался ответом как разукрасить кнопку и нунукаешь... а ты бы ответил по поводу остальных контролов, зачем остановился...
Например у меня валяется код(автора не знаю) как поместить задний фон в TTreeView, но, например, для TListView его надо будет ещё доработать: в TListView в WM_PAINT красится только рабочая часть. Для TEdit работает, но надо обработать WM_SETFOCUS, для TMemo также как для TListView. С TStringGrid'ом проблема в том, что когда курсор перемещается на ячейку ниже видимых на экране, то, видимо для уменьшения мирцания, сдвигают канву на высоту ячейки вверх, и на экране видно как дёргается background, нужно думать как заблокировать изображение в момент перерисовки, в TDBGrid скорей всего тоже что и в TStringGridе.
procedure TTreeView.WndProc(var Message: TMessage);
begin
if Message.Msg = WM_ERASEBKGND then
begin
Message.Result := 1
end else
begin
case Message.Msg of
CN_NOTIFY:
if TWMNotify(Message).NMHdr^.code = TVN_ITEMEXPANDING then
InvalidateRect(Handle, nil, False);
WM_KEYDOWN, WM_HSCROLL, WM_VSCROLL, WM_MOUSEWHEEL:
InvalidateRect(Handle, nil, False);
end;
inherited
end
end;
07-10-2006 04:43 | Комментарий к предыдущим ответам
2 Shoor: На форуме люди дают советы как сделать что-то лучше. Слушать эти советы или игнорировать их - это личное дело спрашивающего.
Наилучший (с моей точки зрения) ответ на этот вопрос (вопрос о красоте) - посоветовать автору отказаться от рисования картинок на канве. А красоты своего грида он может добиться многими другими способами, например вот так http://www.delphikingdom.com/asp/viewitem.asp?catalogid=168 Но эта ссылка выходит за рамки вопроса
Хм, человек задал вопрос, а тут вместо помощи его пытаются убедить, что ему не надо это, это глупо, не красиво, и вообще, как ему такая мысль в голову пришла!!! Рисовать на кнопках!!! Это же надо, додумался. Сидел бы там себе спокойно под стандартными кнопками, стандартными окнами, осталость только весь мир еще в одинаковую одежду нарядить, и все, тогда я точно повешусь на проводе от стандартной мышки для порта PS/2. Кгм, это я...
Ладно, меньше слов - больше дела.
Итак, к великой радости на всех визуальных компонентах делфи можно рисовать! Для этого лишь надо знать HDC компонента (это по сути хендл его только графический, и рашифровывается как Handle Device Context). Так вот, этот самый хендл возвращает функция GetDC(handle), где handle-хендл объекта типа HWND.
Что теперь с этим HDC делать?
Можно сразу с помощью его рисовать, например:
var h:HDC;
begin
h:=GetDC(Button1.handle); //здесь создаем ссылку
Rectangle(h,5,5,15,15);
ReleaseDC(Button1.handle,h) //здесь освобождение ссылки
DeleteDC(h); //здесь удаление ссылки
end;
Можно создать канву, и с помощю ее делать с кнопкой все что захоца:
var q:TCanvas;
begin
q:=TCanvas.Create;
q.Handle:=GetDC(Button1.Handle);
q.MoveTo(0,0);
q.LineTo(10,10);
ReleaseDC(Button1.handle,q.Handle);
DeleteDC(q.Handle);
q.Free;
end;
Ну и наконец, если вдруг захочется прям так компонент, чтобы был всегда под рукой, и содержал канву, то можно его написать, вот пример апдейта обыкновенного TButton:
Тоже считаю, что красота программы должна быть в ее функциональности и удобстве, а не в картинках и круглых кнопках (которые, обычно, еще и неправильно работают, взять, для примера, тот же Roxio Easy Creator 7.0 или Ad-Aware)
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.