|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Вставка шестнадцатеричного кода цвета в редактор - как?
И снова это я)
Редактор дописан, все работает, хотелось бы еще прикрутить к нему среди прочих функций быстрой вставки тегов функцию вставки шестнадцатеричного кода выбранного цвета, как это реализовано во многих коммерческих редакторах, например, в Blumental's HTML Pad (скрин). Можно ли (и как) реализовать что-то подобное средствами Делфи? TColorDialog подойдет ли для этого? И как тогда заставить выполнять его именно эту функцию? Нужна только вставка кода в поле редактора в формате "#HHHHHH" и ничего более. Если это возможно, помогите каким-нибудь примером или исходником, пожалуйста. |
#2
|
||||
|
||||
Думается надо разложить значение цвета в RGB, потом каждый байт перевести в 16-ричный вид, записать попорядку и вставить в начале решетку. Смотри GetRValue, GetGValue, GetBValue, IntToHex.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
|||
|
|||
Aristarh Dark, о боже... попроще и попримитивнее способа нет, наверное? =(
|
#4
|
||||
|
||||
А это сложный способ????
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#5
|
|||
|
|||
Aristarh Dark, я ламер =( Для меня пока сложный(
|
#6
|
|||
|
|||
Есть способ проще и менее культурный. Правда, непонятно зачем, когда можно сделать нормально... =)
Код:
function GetHexColor: string; begin Result := '#000000'; if not ColorDialog1.Execute then Exit; Result := IntToHex(ColorDialog1.Color, 6); Result := '#' + Copy(Result, 5, 2) + Copy (Result, 3, 2) + Copy(Result, 1, 2); end; А вот "нормальный" способ: Код:
function GetHexColor: string; var hex: Cardinal; clrR, clrG, clrB: Byte; begin Result := '#000000'; if not ColorDialog1.Execute then Exit; clrR := GetRValue(ColorDialog1.Color); clrG := GetGValue(ColorDialog1.Color); clrB := GetBValue(ColorDialog1.Color); hex := clrB or (clrG shl 8) or (clrR shl 16); Result := '#' + IntToHex(hex, 6); end; |
#7
|
|||
|
|||
Nyctos Kasignete, спасибо, что помогаете!
Программа работает... и вставка цвета работает... правда, через задницу, из которой мои руки выросли Компилятор злостно ругается на строку Код:
if not ColorDialog1.Execute then Exit; А дальше... В общем, вот что я делаю: Код:
function GetHexColor: string; var hex: Cardinal; clrR, clrG, clrB: Byte; ColorDialog1: TColorDialog; begin Result := '#000000'; // if not ColorDialog1.Execute then Exit; clrR := GetRValue(ColorDialog1.Color ); clrG := GetGValue(ColorDialog1.Color); clrB := GetBValue(ColorDialog1.Color); hex := clrB or (clrG shl 8) or (clrR shl 16); Result := '#' + IntToHex(hex, 6); col:=Result; end; Код:
procedure TfrmMain.Button1Click(Sender: TObject); begin ColorDialog1.Execute; end; procedure TfrmMain.ColorDialog1Close(Sender: TObject); begin GetHexColor; SynEdit1.SelText:=col; end; При этом вставка вроде работает... Но вставляет один и тот же цвет - #56E8B6. Пробую пальцем в небо - переношу вызов функции в процедуру Button1Click - вставляет цвет #0F0FB7. Снова один и тот же. Где я туплю? PS: Да, и поскольку строку "if not ColorDialog1.Execute then Exit" приходится убрать (компилятор что-то ругаться перестал, но программа при нажатии Canсуд в диалоге выбора цвета выдает ошибку), при нажатии Отмена цвет тоже вставляется... Последний раз редактировалось Рената Литвинова, 27.05.2009 в 01:16. |
#8
|
||||
|
||||
Есть готовая функция. Подставляй значения.
Код:
color := RGB($FF,$AC,$00); — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#9
|
|||
|
|||
Рената Литвинова, немного странный способ вызова диалога выбора цвета... Писать обработчик события OnClose диалога необязательно. Всё можно сделать за один присест: вызвать диалог (модальное окно!) и по закрытии его изменить цвет.
Функцию-то написанную вы вызываете, а возвращаемое ею значение (самое главное) нигде не используеуте. Предлагаю вам убрать процедуру ColorDialog1Close совсем, а в обработчике события OnClick кнопки написать так: Код:
procedure TfrmMain.Button1Click(Sender: TObject); begin SynEdit1.SelText := GetHexColor; end; |