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 тут не подходит
|
|
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
|
Большое спасибо
|
|
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
|
Я же сказал, что мой способ — корявый
|
|
AVC |
Отправлено: 17.11.2004, 18:24 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
дык я просто и предлагал вам поправить у себя в строке bool .... |
|