Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/76: Рейтинг темы: голосов - 76, средняя оценка - 4.84
3 / 3 / 0
Регистрация: 25.04.2012
Сообщений: 50
1

Присвоить свойству Font стандартные значения

20.07.2012, 10:57. Показов 14517. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть ли стандартная функция, которая присваивает стандартные значения Font, чтобы не прописывать все это:
C++
1
2
3
4
5
6
7
8
9
Form1->StringGrid1->Font->Charset=DEFAULT_CHARSET;
Form1->StringGrid1->Font->Color=clWindowText;
Form1->StringGrid1->Font->Height=-13;
Form1->StringGrid1->Font->Name="Tahoma";
Form1->StringGrid1->Font->Orientation=0;
Form1->StringGrid1->Font->Pitch=0;
Form1->StringGrid1->Font->Quality=0;
Form1->StringGrid1->Font->Size=8;
//... и т.д.
Если это не возможно, как правильно присвоить Style все значения false?
нерабочий вариант:
C++
1
Form1->StringGrid1->Font->Style->fsBold=false
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.07.2012, 10:57
Ответы с готовыми решениями:

Присвоить Font'у StringGrid'a свой шрифт
MyComponents.h(11): E2459 VCL style classes must be constructed using operator new Мне нужно...

Borland C++ Builder. Как свойству Text компонента Edit присвоить значение строки?
Как свойству Text компонента Edit присвоить значение строки? string a; a = "word"; Edit1->Text...

Как присвоить свойству productname текст "моя программа"?
Присвоить свойству productname текс "моя программа"

Если значения переменных не равны то присвоить каждой сумму их значений, иначе присвоить переменным нулевые значения
uses crt; var x: integer; f1,f2: text; begin clrscr; assign(f1,'ishod.txt'); ...

8
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
20.07.2012, 11:16 2
ФМиИ, кто мешает создать шрифт (только потом, при завершении программы не забыть удалить), присвоить ему нужные параметры:

C++
1
2
3
4
5
6
7
8
9
10
11
    TFont *DefFont; // в классе формы
 
    DefFont = new TFont();
    DefFont->Charset=DEFAULT_CHARSET;
    DefFont->Color=clRed;
    DefFont->Height=-13;
    DefFont->Name="Tahoma";
    DefFont->Orientation=0;
    DefFont->Pitch=0;
    DefFont->Size=12;
    // ...
, а потом, там где нужно:

C++
1
    StringGrid1->Font->Assign(DefFont);
А с fsBold-ом так не получается, потому что это множество. Вот так должно сработать:
C++
1
Form1->StringGrid1->Font->Style = Form1->StringGrid1->Font->Style >> fsBold; // убираем из множества
1
3 / 3 / 0
Регистрация: 25.04.2012
Сообщений: 50
20.07.2012, 11:22  [ТС] 3
Это присваивает стиль fsBold. Мне нужно, наоборот, чтобы он и каждый подпункт в Style был не активен (false).
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
20.07.2012, 11:36 4
Цитата Сообщение от ФМиИ Посмотреть сообщение
Это присваивает стиль fsBold
Это не присваивает, а убирает стиль Bold. Занесение в множество - это "<<", извлечение - ">>". Хотя, если надо очистить Style полностью - то можно сделать так:
C++
1
Form1->StringGrid1->Font->Style = TFontStyles();
Цитата Сообщение от ФМиИ Посмотреть сообщение
Получается нет возможности присвоить Font стандартные значения?
Что такое "стандартное значение" для шрифта? Скажем, Height. Почему ты записал туда -13? У меня вот по умолчанию выставлено -11. И какое из них правильное? Нет такого понятия "стандартные значения".

C++
1
2
   DefFont = new TFont();
   DefFont->Assign(StringGrid1->Font);
при старте программы и у тебя в DefFont хранится то, что выставлено в Object Inspector-е. Как это может усложнить задачу - непонятно.
0
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
20.07.2012, 11:44 5
C++
1
 ... ->Font->Style = TFontStyles()>>fsBold>>fsItalic>>... ;
- это установка стилей в false,
C++
1
 ... ->Font->Style = TFontStyles()<<fsBold<<fsItalic ... ;
- а так - в true
2
3 / 3 / 0
Регистрация: 25.04.2012
Сообщений: 50
20.07.2012, 12:43  [ТС] 6
Цитата Сообщение от UI Посмотреть сообщение
Что такое "стандартное значение" для шрифта? Скажем, Height. Почему ты записал туда -13? У меня вот по умолчанию выставлено -11. И какое из них правильное? Нет такого понятия "стандартные значения".
Да действительно. Тогда так - как сохранить в файл свойство Font? Таким же образом, записывая все его подпункты?

Добавлено через 27 минут
Как теперь в файл записать этот Style - на него везде билдер орет.

C++
1
2
3
4
5
6
7
8
9
10
11
12
TStringList *Dann=new TStringList;
   Dann->Append(StringGrid1->Font->Charset);
   Dann->Append(StringGrid1->Font->Color);
   Dann->Append(StringGrid1->Font->Height);
   Dann->Append(StringGrid1->Font->Name);
   Dann->Append(StringGrid1->Font->Orientation);
   Dann->Append(StringGrid1->Font->Pitch);
   Dann->Append(StringGrid1->Font->Quality);
   Dann->Append(StringGrid1->Font->Size);
   Dann->Append(StringGrid1->Font->Style);//на эту строчку орет
   Dann->SaveToFile("dannie.txt");
   delete Dann;
0
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
20.07.2012, 13:26 7
а так нельзя, - TFontStyles это целая функция, а не одна переменная. Если уж очень нужно запомнить стили, то программно преобразовать в значение и потом делать обратное преобразование. Например таким макаром (запись в четыре младших бита)__
C++
1
2
3
4
5
     TFontStyles el = Label1->Font->Style ;
     int h  = 0 | el.Contains(fsBold) |
              2*el.Contains(fsItalic) |
              4*el.Contains(fsUnderline) |
              8*el.Contains(fsStrikeOut) ;
Добавлено через 12 минут
Или так (по Вашим текстам)__
C++
1
2
3
4
   Dann->Append(1&StringGrid1->Font->Style.Contains(fsBold));
   Dann->Append(1&StringGrid1->Font->Style.Contains(fsItalic));
   Dann->Append(1&StringGrid1->Font->Style.Contains(fsUnderline));
   Dann->Append(1&StringGrid1->Font->Style.Contains(fsStrikeOut));
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
20.07.2012, 15:09 8
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Цитата Сообщение от ФМиИ Посмотреть сообщение
Тогда так - как сохранить в файл свойство Font? Таким же образом, записывая все его подпункты?
Вот прямо больше делать нечего, как вручную записывать. Есть средства в Билдере, позволяющие записать шрифт в файл. Надо только чуть-чуть пошаманить, чтобы ими воспользоваться:

1) создаем обертку над TFont-ом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class TFontWrapper : public TComponent
{
private:
    TFont *FFont;
    void __fastcall SetFont(TFont *fnt)
    {
        FFont->Assign(fnt);
    }
public:
    __fastcall TFontWrapper(TComponent *AOwner) : TComponent(AOwner)
    {
        FFont = new TFont;
    }
    __fastcall virtual ~TFontWrapper(void)
    {
        delete FFont;
    }
__published:
    __property TFont *Font = {read = FFont, write = SetFont};
};
2) и теперь - когда надо сохранить - сохраняем шрифт в файл, а когда надо прочесть - читаем. Для проверки сделал 2 кнопки: по первой текущий Font сохраняется в файл, после чего цвет шрифта меняется и грид перерисовывается. А потом восстанавливаем шрифт из файла и опять перерисовываем грид, чтоб убедиться, что цвет восстановился:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void __fastcall TForm1::btnSaveFontClick(TObject *Sender)
{
    TFileStream *fs = new TFileStream("font.dat", fmCreate);
    wrap = new TFontWrapper(0);
 
    wrap->Font = StringGrid1->Font;
    fs->WriteComponent(wrap);
    delete wrap;
    delete fs;
 
    StringGrid1->Font->Color = clRed;
    StringGrid1->Invalidate();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::btnLoadFontClick(TObject *Sender)
{
    TFontWrapper *wrap = new TFontWrapper(0);
    TFileStream *fs = new TFileStream("font.dat", fmOpenRead);
 
    fs->ReadComponent(wrap);
    StringGrid1->Font->Assign(wrap->Font);
 
    delete fs;
    delete wrap;
    StringGrid1->Invalidate();
}
Ну, try/finally сам добавишь, хотя я предпочитаю работать с std::auto_ptr, а не удалять объекты руками.
2
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.07.2012, 15:37 9
C++
1
Form->Font->/*задаем свойства*/
В компонентах фомы например
C++
1
Label->ParentFont= true;
Еще можно посмотреть есть ли такое
C++
1
Screen->Font->/*...*/
???
0
20.07.2012, 15:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.07.2012, 15:37
Помогаю со студенческими работами здесь

Не могу присвоить значение свойству Caption
Собсна, я юзаю Embarcadero® RAD Studio XE Version 15.0.3890.34076. Почему-то простое присвоение...

Как присвоить свойству Value выбранную позицию ComboBox?
В Comboboxe List содержит вариативное количество колонок. Программно созданы условия, когда...

Как свойству EcdNtpReason присвоить объект IList<>
есть: private IList&lt;EcdNtpReason&gt; NtpReasons; ecdNtpReasonBindingSource.DataSource =...

Присвоить свойству типа enum значение int
Не смог самостоятельно найти решение школьного вопроса. Итак: Есть enum public enum trololo...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru