C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Шрифт, стиль шрифта
Sl@Sh
  Отправлено: 08.11.2004, 22:26


Мастер участка

Группа: Участник
Сообщений: 383



Здравствуйте уважаемые коллеги ! Помогите разобраться, как можно стиль шрифта (жирный и.т.п) присвоить переменной. Ну в инспекторе там параметры fsBold и.т.п принимают значение или false или true (т.е. bool).
Конечно можно было бы через if..., но нельзя ли как-то использовать просто присвоение ?

Заранее спасибо !
Nick
Отправлено: 09.11.2004, 08:45


Машинист паровоза

Группа: Участник
Сообщений: 247



вот кусочек

if (pFIBDS_PriceNAL->AsString == "+") AFont->Style = AFont->Style>> fsItalic;
else AFont->Style = AFont->Style << fsItalic;
Sl@Sh
Отправлено: 09.11.2004, 16:45


Мастер участка

Группа: Участник
Сообщений: 383



Спасибо конечно за ответ, но я спрашивал как это без if сделать.

Мне просто нужно шрифт записать в ini файл и не получается записать его стиль. if тут не подходит sad.gif
Konstantine
Отправлено: 09.11.2004, 17:33


Мастер участка

Группа: Модератор
Сообщений: 545



а чем не подходит?

ну по идее можешь преобразить к ИНТу и сохранить,.... потом обратно
AVC
Отправлено: 09.11.2004, 17:36


Ветеран

Группа: Модератор
Сообщений: 1583



Разобрать set на части, каждую записать. При чтении — все наоборот.
Sl@Sh
Отправлено: 13.11.2004, 21:28


Мастер участка

Группа: Участник
Сообщений: 383



to AVC :

А можно подробнее ?
AVC
Отправлено: 15.11.2004, 09:32


Ветеран

Группа: Модератор
Сообщений: 1583



Вот, выдрал из приложения.
CODE

PACKAGE void __fastcall IniFontSave (AnsiString sect, TFont *fnt)
{
int i;

Windows_XY->WriteInteger (sect, "FntColor", fnt->Color);
Windows_XY->WriteInteger (sect, "FntSize",  fnt->Size );
Windows_XY->WriteString  (sect, "FntName",  fnt->Name );
i = 0;
if (fnt->Style.Contains(fsBold)) i |= 01;
if (fnt->Style.Contains(fsItalic)) i |= 02;
Windows_XY->WriteInteger (sect, "FntStyle", i);
}

//---------------------------------------------------------------------------

PACKAGE void __fastcall IniFontRestore (AnsiString sect, TFont *fnt)
{
int i;

fnt->Color = (TColor)(Windows_XY->ReadInteger (sect, "FntColor", fnt->Color));
fnt->Size = Windows_XY->ReadInteger (sect, "FntSize",  fnt->Size );
fnt->Name = Windows_XY->ReadString  (sect, "FntName",  fnt->Name );
i = 0;
if (fnt->Style.Contains(fsBold)) i |= 01;
if (fnt->Style.Contains(fsItalic)) i |= 02;
i = Windows_XY->ReadInteger (sect, "FntStyle", i);
if (i & 01) fnt->Style = fnt->Style << fsBold;
if (i & 02) fnt->Style = fnt->Style << fsItalic;
}

Можно сказать от сердца отрываю. Один из самых древних кусков, который не менялся на протяжении N лет.
Sl@Sh
Отправлено: 15.11.2004, 14:43


Мастер участка

Группа: Участник
Сообщений: 383



Большое спасибо biggrin.gif biggrin.gif biggrin.gif
Sl@Sh
Отправлено: 17.11.2004, 09:55


Мастер участка

Группа: Участник
Сообщений: 383



Я решил сам попробовать что-то сотворить, и вот получилось :

CODE

bool fBold, fItalic, fUnderline, fStrikeOut;

if (Font->Style == Font->Style+TFontStyles()<<fsBold) fBold = true; else fBold = false;
if (Font->Style == Font->Style+TFontStyles()<<fsItalic) fItalic = true; else fItalic = false;
if (Font->Style == Font->Style+TFontStyles()<<fsUnderline) fUnderline = true; else fUnderline = false;
if (Font->Style == Font->Style+TFontStyles()<<fsStrikeOut) fStrikeOut = true; else fStrikeOut = false;


Конечно это коряво, но я думаю использовать можно

Спасибо всем, кто отвечал !!!!!!

Отредактировано Sl@Sh — 17/11/2004, 10:59
Guest
Отправлено: 17.11.2004, 10:42


Не зарегистрирован







Зачем такое сравнение
if (Font->Style == Font->Style+TFontStyles()< когда у set'а есть нормальный метод Contains ?
(это примерно как чесать правой рукой левое ухо через затылок)

запись может быть проще
bool isBold = Font->Style.Containts()fsBold);
bool isItalic ...

avc
Sl@Sh
Отправлено: 17.11.2004, 17:42


Мастер участка

Группа: Участник
Сообщений: 383



Я же сказал, что мой способ — корявый biggrin.gif
AVC
Отправлено: 17.11.2004, 18:24


Ветеран

Группа: Модератор
Сообщений: 1583



дык я просто и предлагал вам поправить у себя в строке bool .... biggrin.gif

Вернуться в Вопросы программирования в C++Builder