Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись параметров шрифта в файл 
:(
    Опции темы
docwar
Дата 12.11.2006, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Маленький вопросец! =)

Запись данных о стиле шрифта, выбранном в FontDialog'е в переменную делаю так:
Код
TFontStyles fsb

FontDialog1->Execute();
fsb = FontDialog1->Font->Style << fsBold;
Memo1->Font->Style = fsb;


Но как записать значение этой переменной в ini-файл?
Вот так не получается (не хочет ТФонтСтиль в АнстСтринг ковертировать)
Код
TIniFile *ini;
ini=new TIniFile("D:/nazvanie.ini");
ini->WriteString("permennaya1",f,fsb);
delete ini;

PM MAIL   Вверх
Khan
Дата 13.11.2006, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



PM MAIL   Вверх
Vyacheslav
Дата 13.11.2006, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Цитата(Khan @  13.11.2006,  08:04 Найти цитируемый пост)
Посмотри здесь: http://forum.vingrad.ru/topic-119179/hl/%2...25B0/index.html 


Мда. Зачем так сложно smile.
Во первых у сетов есть операторы ввода <<  и вывода >>  в поток

Код

ostream& operator <<(ostream& os, const Set<T, minEl, maxEl> & arg)
istream& operator >> (istream& is, Set<T, minEl, maxEl> & arg)

Для того, что бы их использовать достаточно записать
Код

#defined VCL_IOSTREAM

и строки из нулей и единиц у Вас в кармане smile
Ну а кому не по вкусу нули и единицы можно  получить и непосредственно строковый набор
таким образом 
Код

AnsiString strStyle = GetSetProp(Memo1->Font, "Style", "[]"));
 
Ну и восстановить его из строки
Код

 AnsiString strStyle = "[fsBold, fsItalic]";
 SetSetProp(Memo1->Font, "Style", strStyle);


Добавлено @ 11:49 
Соответственно имеем 
Код

ini->WriteString("Font","Style",GetSetProp(Memo1->Font, "Style", "[]"));



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
docwar
Дата 13.11.2006, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Vyacheslav, спасибо!
Проблема возникла теперь в другом! Как только сделаю любые изменения с шрифтом - текст зачеркивается. Проверял параметры шрифта формы и memo - ошибок нет.
Вот код, относящийся к передаче параметров из FontDialog -> Memo1:
Код
TFontStyles fsb,fsi,fsu,fss;

if(FontDialog1->Execute())
{
Memo1->Font->Charset=FontDialog1->Font->Charset;
Memo1->Font->Color=FontDialog1->Font->Color;
Memo1->Font->Height=FontDialog1->Font->Height;
Memo1->Font->Name=FontDialog1->Font->Name;
Memo1->Font->Pitch=FontDialog1->Font->Pitch;
Memo1->Font->Size=FontDialog1->Font->Size;

fsb = FontDialog1->Font->Style << fsBold;
Memo1->Font->Style = fsb;

fsi = FontDialog1->Font->Style << fsItalic;
Memo1->Font->Style = fsi;

fsu = FontDialog1->Font->Style << fsUnderline;
Memo1->Font->Style = fsu;

fss = FontDialog1->Font->Style << fsStrikeOut;
Memo1->Font->Style = fss;
}

PM MAIL   Вверх
Vyacheslav
Дата 13.11.2006, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



И почему бы ему не зачеркиваться, если Вы  ему прямо говорите : "зачеркнись"
Код

fss = FontDialog1->Font->Style << fsStrikeOut;
Memo1->Font->Style = fss;


Добавлено @ 13:18 
Правда перед этим, Вы ему также говорите стань жирным, потом меняете на курсив, потом на подчекивание.

Добавлено @ 13:24 
Я бы все Ваши издевательства на фонтом изменил на код из хелпа smile
Код

FontDialog1->Font =  Memo1->Font;
if(FontDialog1->Execute())
{
   Memo1->Font =  FontDialog1->Font;
}




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
docwar
Дата 13.11.2006, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Спасибо большое, но это все равно не решает проблемы... уже не знаю где косяк...
Помогите, пожалуйста, отладить код. При запуске получаю, что "" не имеет интовского значения!!! =(
В этом коде пытаюсь сделать загрузку параметров шрифта из файла D:/nazvanie.ini с применением их для Memo1 и сохранение их (параметры) при закрытии в тот же файл (D:/nazvanie.ini).
Код
AnsiString c,cc,f,s,ss,ff;

void __fastcall TForm5::FormCreate(TObject *Sender)
{

TIniFile* file=new TIniFile("D:/nazvanie.ini");
TStringList* lst=new TStringList;

AnsiString strStyle = "[fsBold, fsItalic]";
SetSetProp(Memo1->Font, "Style", strStyle);

ff=lst->Values["Name"];
cc=lst->Values["Color"];
ss=lst->Values["Size"];

Memo1->Font->Name=ff;
Memo1->Font->Color=StringToColor(cc);
Memo1->Font->Size=ss.ToInt();

delete lst,file;
}
//---------------------------------------------------------------------------
void __fastcall TForm5::Label1Click(TObject *Sender)
{
if(FontDialog1->Execute())
{
 AnsiString strStyle = GetSetProp(Memo1->Font, "Style", "[]");
 Memo1->Font =  FontDialog1->Font;
 ff=Memo1->Font->Name;
 cc=ColorToString(Memo1->Font->Color);
 ss=Memo1->Font->Size;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm5::FormClose(TObject *Sender, TCloseAction &Action)
{
Memo1->Lines->SaveToFile(PP + ExtractFileName("notes.txt"));

c="Color";
f="Name";
s="Size";

TIniFile *ini;
ini=new TIniFile("D:/nazvanie.ini");
ini->WriteString("Parametrs",f,ff);
ini->WriteString("Parametrs",c,cc);
ini->WriteString("Parametrs",s,ss);

ini->WriteString("Font","Style",GetSetProp(Memo1->Font, "Style", "[]"));

delete ini;
}

PM MAIL   Вверх
pandrew
Дата 13.11.2006, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.3.2006

Репутация: 3
Всего: 3



Цитата(docwar)
Memo1->Font->Size=ss.ToInt();

Эта строка выкидывает исключение, если ss не содержит числа. Поставь try..catch, либо используй atoi(ss.c_st());

PM MAIL   Вверх
docwar
Дата 13.11.2006, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



pandrew, не могли бы вы подробнее ответить? 
В хелпе смотрел - перевод не помог мне... =)
PM MAIL   Вверх
docwar
Дата 13.11.2006, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Установил, что ошибка в этом коде:
Код
void __fastcall TForm5::FormCreate(TObject *Sender)
{
Memo1->Lines->LoadFromFile(PP + ExtractFileName("notes.txt"));

TIniFile* file=new TIniFile("D:/nazvanie.ini");
TStringList* lst=new TStringList;

AnsiString strStyle = "[fsBold, fsItalic]";
SetSetProp(Memo1->Font, "Style", strStyle);

ff=lst->Values["Name"];
cc=lst->Values["Color"];
ss=lst->Values["Size"];

Memo1->Font->Name=ff;
Memo1->Font->Color=StringToColor(cc);
Memo1->Font->Size=ss.ToInt();

delete lst,file;
}

Точную строку определить не удалось - ругается при любом считывании данных... =(  :'(
PM MAIL   Вверх
Bima
Дата 14.11.2006, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 15.8.2006

Репутация: 2
Всего: 2



Ошибка происходит на строке
Код

Memo1->Font->Color=StringToColor(cc);


потому что на строках:
Код

ff=lst->Values["Name"];
cc=lst->Values["Color"];
ss=lst->Values["Size"];

переменным ff, cc, ss присваевается Null !!!

я так и не смог понять код. Вы создаете новый TStringList и пытаетесь вытащить название, цвет и размер компонента? или чего нибудь другого??? Компонент не визуальный, как можно из него вытащить размер и цвет???


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
pandrew
Дата 14.11.2006, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.3.2006

Репутация: 3
Всего: 3



Цитата(docwar @ 13.11.2006,  20:43)
Установил, что ошибка в этом коде:
Код
void __fastcall TForm5::FormCreate(TObject *Sender)
{...
TStringList* lst=new TStringList;
...
ff=lst->Values["Name"];
...
Memo1->Font->Name=ff;
...
delete lst,file;
}

Точную строку определить не удалось - ругается при любом считывании данных... =(  :'(

Собственно неудивительно:
1)создается список (по умолчанию он пустой)
2)из него (из пустого) пытаются вытащить величину "Name" - естественно получают пусто
3)эту величину присваивают Memo1->Font->Name - этот фокус пройдет, но результат =пусто
4)присвоение Memo1->Font->Color=<пусто> выдаст исключение ибо StringToColor ждет по хелпу:
The S parameter can be either the name of a built-in color constant such as 'clBtnFace', or the string representation of a valid TColor value such as '$02FF8800'.  StringToColor returns the TColor value that corresponds to the S parameter.аналогично
Memo1->Font->Size=lst->Values["Size"].ToInt(); даст исключение

Правильная логика в рамках вашего алгоритма при входе:
1)создается список (по умолчанию он пустой)
2)загружаем список из файла LoadFromFile(const AnsiString FileName) 
3)загружаем в Memo, интересующие нас параметры (контролируя их существование)
4)разрушаем список за ненадобностью

при выходе:
1)создается список
2)формируем параметры в списке (используя свойства Memo)  TStringList::Add("..")
3)выгружаем в файл: SaveToFile(const AnsiString FileName)
4)разрушаем список за ненадобностью

Алгоритм типичной отладки:
1)устанавливаем цель: узнать точно, что и где не так (это в голове должно созреть):
2)компилируем проект
3)ставим точку останова на начало процедуры и запускаем
4)последовательно нажимаешь F8, изучая значения своих параметров (окно Watch отладчика)
5)как только что-то не так (не так как должно) - садимся и думаем (головой), где же мы напортачили
6)правим код - переходим к п. 1)
PM MAIL   Вверх
Vyacheslav
Дата 14.11.2006, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



docwar,  у Вас проблемы с пониманием, что такое алгоритм и что  следует применить в конкретном случае
Ну зачем Вы использовали вот этот код
Код

AnsiString strStyle = "[fsBold, fsItalic]";
SetSetProp(Memo1->Font, "Style", strStyle);

который я дал для понимания механизма преобразлвания строки в сет. Этот код надо было использовать для чтения стиля из ini-файла, а не для его первоначальной инициализации 
Ведь проще и более правильнее было написать 
Код

Memo1->Font = TFontStyles() << fsBold << fsStyle;

А зачем здесь strStyle = GetSetProp(Memo1->Font, "Style", "[]") ?
strStyle  нигде не используется в дальнейшем
Код

AnsiString strStyle = GetSetProp(Memo1->Font, "Style", "[]");
 Memo1->Font =  FontDialog1->Font;
 ff=Memo1->Font->Name;
 cc=ColorToString(Memo1->Font->Color);
 ss=Memo1->Font->Size;

И не кажется, ли Вам , что использовать Label для вызова диалога настройки шрифта  это  выглядит весьма странно smile  Обычно для этого используется  Button (кнопка)
Код

void __fastcall TForm5::Label1Click(TObject *Sender)
{
if(FontDialog1->Execute())
{
 


И зачем Вы постояннн используете промежуточные переменные  ff, cc, ss? Ведь в любой момент Вы можете непосредственно взять эту информацию из того же Memo1->Font непосредственно перед сохранением в ини-файл

docwar,   мне кажется, что Вы просто не совсем понимаете, что  сами  делаете.
Судя по этому и другим топикам Вам следует для начала ознакомится с базовыми понятиями ООП и С++. Иначе в этом топике все сведется к тому же, что и в топике с гридом: кто-то не выдержит и напишет Вам весь код. Это кстати небольшой труд. Займет от силы минут 5. Но зачем это Вам? Надеюсь Ваша цель - научиться программировать, а не копировать чужой код.







--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Bima
Дата 14.11.2006, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 15.8.2006

Репутация: 2
Всего: 2



Хотел бы написать пару строк на последние сообщения и просто обратится к автору программы.
Приминительно к последнему топику, а именно обращаюсь к Vyacheslav: зря вы так. Не все программируют на том уровне, что и вы (судя по колличеству заметок, которые вы здесь с легкостью оставляете).
Приминительно к данной теме могу написать:
Цитата

И зачем Вы постояннн используете промежуточные переменные  ff, cc, ss? Ведь в любой момент Вы можете непосредственно взять эту информацию из того же Memo1->Font непосредственно перед сохранением в ини-файл

Для отладки программы, это самый легкий способ отследить переменную, если вставлять Break point (хотя конечно можно пользоваться и Debug window, но это на любителя)
Цитата

docwar,   мне кажется, что Вы просто не совсем понимаете, что  сами  делаете.

Многие сюда обращаются, что бы воспользоваться советом, НО НЕКТОРЫЕ не настолько сильны в программировании, что бы понять схду код, который здесь напишут. (не про себя пишу smile )

Цитата

кто-то не выдержит и напишет Вам весь код

впринципе это наверно идельное решение для того, кто спрашивает. И я понимаю тех, для кого написать код за пять минут вызывает раздражение. Если допустим я начинаю помогать советом или кодом программы, то это не значит, что я буду тыкать мордой в монитор по поводу компьютерной безграмотности.

Цитата

Надеюсь Ваша цель - научиться программировать, а не копировать чужой код

Инетресно, а как нучиться тонкостям языка, если не применять чужой код???
Иногда здесь я встречаю намного оптимизированный код, по сравнению со своим (который был написан давно). Естественно, я буду его использовать.

Теперь автору заметки:
Было бы неплохо если бы ты повнимательней читал советы.



--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
Vyacheslav
Дата 14.11.2006, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Цитата(Bima @  14.11.2006,  15:03 Найти цитируемый пост)
Приминительно к последнему топику, а именно обращаюсь к Vyacheslav: зря вы так. Не все программируют на том уровне, что и вы (судя по колличеству заметок, которые вы здесь с легкостью оставляете).

Ну что вы. Я за четыре с лишним года оставил меньше 1300 сообщений. Вы за три месяца 190. Так что максимум через года полтора Вы спокойно переплюнете smile Я отвечаю обычно только на интересные вопросы или помогаю решить проблемы, которые не связаны с элементарным незнанием С++.
А вопрос этого топика был действительно не ординарен. Но к моему большому сожалению, интересные вопросы встречаются все реже. 

Цитата(Bima @  14.11.2006,  15:03 Найти цитируемый пост)
Многие сюда обращаются, что бы воспользоваться советом, 

Это верно. Только "что бы воспользоваться советом" очень часто требуется иметь хотя бы определенный базовый уровень.
Цитата(Bima @  14.11.2006,  15:03 Найти цитируемый пост)
Инетресно, а как нучиться тонкостям языка, если не применять чужой код???

Наверное анализировать, разбирать его по косточкам и творчески применять в своем приложении, а не использовать "copy-past"




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Vyacheslav
Дата 14.11.2006, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Цитата(Vyacheslav @  14.11.2006,  11:01 Найти цитируемый пост)
кто-то не выдержит и напишет Вам весь код. Это кстати небольшой труд. Займет от силы минут 5

Короче, будем считать, что не выдержал я  smile , после критики Bima
Код

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

#ifndef Unit24H
#define Unit24H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <IniFiles.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TMemo *Memo1;
    TButton *Button1;
    TFontDialog *FontDialog1;
    void __fastcall Button1Click(TObject *Sender);
private:
    void __fastcall RestoreFont(TFont*);    // User declarations
public:        // User declarations
    __fastcall TForm1(TComponent* Owner);
private:
    TIniFile* m_IniFile;
    void __fastcall SaveFont(TFont* AFont);
    __fastcall ~TForm1();
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Код

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

#include <vcl.h>
#pragma hdrstop

#include "Unit24.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TForm1 *Form1;
const String c_FileName =  "C:/nazvanie.ini";
const String c_SectionName = "Font";
const String c_Name = "Name";
const String c_Size = "Size";
const String c_Color = "Color";
const String c_Style = "Style";
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner), m_IniFile( new TIniFile(c_FileName) )
{
   RestoreFont(Memo1->Font);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RestoreFont(TFont* AFont)
{
   AFont->Name = m_IniFile->ReadString(c_SectionName, c_Name, "MS Sans Serif");
   AFont->Size = m_IniFile->ReadInteger(c_SectionName, c_Size, 8 );
   AFont->Color = m_IniFile->ReadInteger(c_SectionName, c_Color, 0);
   SetSetProp(AFont, c_Style, m_IniFile->ReadString(c_SectionName, c_Style, "[]"));
}

void __fastcall TForm1::SaveFont(TFont* AFont)
{
    m_IniFile->WriteString(c_SectionName, c_Name, AFont->Name );
    m_IniFile->WriteInteger(c_SectionName, c_Size, AFont->Size );
    m_IniFile->WriteInteger(c_SectionName, c_Color, AFont->Color );
    m_IniFile->WriteString(c_SectionName, c_Style, GetSetProp(AFont, c_Style, "[]") );
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    FontDialog1->Font = Memo1->Font;
    if( FontDialog1->Execute() )
    {
         Memo1->Font = FontDialog1->Font;
    }
}
//---------------------------------------------------------------------------
__fastcall TForm1::~TForm1()
{
    SaveFont(Memo1->Font);
    delete  m_IniFile;
}




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
docwar
Дата 14.11.2006, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Цитата(Bima @  14.11.2006,  08:31 Найти цитируемый пост)
переменным ff, cc, ss присваевается Null !!!

А почему ноль? Ведь значения берутся из ини файла, значения получая из соответствующих переменных (Name,Color,Size). 
Ини-файл выглядит следующим образом:
Name=***
Color=***
Size=***
Цитата(Bima @  14.11.2006,  08:31 Найти цитируемый пост)
Вы создаете новый TStringList и пытаетесь вытащить название, цвет и размер компонента? или чего нибудь другого??? Компонент не визуальный, как можно из него вытащить размер и цвет??? 

Практически верно! Создаю СтрингЛист, чтобы обратиться через него к ини-файлу (см. пример файла выше).  Значения, стоящие после равно я и пытаюсь передать в переменые, а потом уже и в мемо.

Цитата(pandrew @  14.11.2006,  10:06 Найти цитируемый пост)
создается список (по умолчанию он пустой)

Почему? =) Никак не пойму...
Мне бы с кодом помочь, а то именно это вызывает у меня трудности! =) Но все равно спасибо!

Vyacheslav, с чего вы взяли, что у меня проблемы с понятием алгоритма? С того, что неправильно написал код или задаю простые для вас вопросы?
Цитата(Vyacheslav @  14.11.2006,  11:01 Найти цитируемый пост)
А зачем здесь strStyle 

Собственно... вы указали - я и написал...  А то, что написанное вами в ответе на мой вопрос мне не нужно, я не сообразил...
Цитата(Vyacheslav @  14.11.2006,  11:01 Найти цитируемый пост)
И не кажется, ли Вам , что использовать Label для вызова диалога настройки шрифта  это  выглядит весьма странно   Обычно для этого используется  Button (кнопка)

А что тут странного, что не хочу пользоваться кнопками? Мне Лейбл больше нравится и по дизайну подходит!
Цитата(Vyacheslav @  14.11.2006,  11:01 Найти цитируемый пост)
И зачем Вы постояннн используете промежуточные переменные  ff, cc, ss?

Просто напрямую записывать без переменных мне не удалось...
Цитата(Vyacheslav @  14.11.2006,  11:01 Найти цитируемый пост)
мне кажется, что Вы просто не совсем понимаете, что  сами  делаете.

Боюсь, что вам так только кажется! Если я не знаю, то не стал бы просить оптимизирвать код, а попросил бы ОБЬЯСНИТЬ его, что и не делаю!
Если же у кого-то здесь слабые нервы.. ну неужели Вы сразу стали высококлассным программистом, не задающим вопросы, кажущиеся тривиальными еще более "крутым" программерам?
Копировать чужой код? А как же мне тогда учиться, не разбирая чужие программы и исходники? Все пограммисты советуют разбирать не только примеры в книгах!
А причем здесь базовые понятия ООП и С++? Ну, неужели вы думаете, что я совершенно тупой, раз у меня вызывает проблему загрузка параметров из ини-файла или мне эти БАЗОВЫЕ понятия помогут решить мой вопрос? Абсурд!

P.s.Выражаю благодарность Bima за понимание!

Добавлено @ 19:20 
Цитата(Vyacheslav @  14.11.2006,  18:21 Найти цитируемый пост)
Наверное анализировать, разбирать его по косточкам и творчески применять в своем приложении, а не использовать "copy-past"

Именно поэтому и не воспользуюсь вашим кодом, а найду другое решение, следуя вашему совету.

Всем спасибо! Тему можно и закрыть, если кого-то раздражают мои вопросы.

PM MAIL   Вверх
Bima
Дата 15.11.2006, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 15.8.2006

Репутация: 2
Всего: 2



Становится все интереснее и интереснее smile
Последние три сообщения читал и смеялся smile , кто то не выдерживает smile , кто-то сердится smile , прямо Санта-барбара какая-то.
Предлагаю всем забыть прошлые недорозумения и разобраться в поставленном вопросе.

Расмотрим твой код docwar :
Код

void __fastcall TForm5::FormCreate(TObject *Sender)
{
Memo1->Lines->LoadFromFile(PP + ExtractFileName("notes.txt"));

TIniFile* file=new TIniFile("D:/nazvanie.ini"); //Здесь понятно
TStringList* lst=new TStringList;//Здесь ты создаешь новый стринглист (и прошу заметить ПУСТОЙ)

AnsiString strStyle = "[fsBold, fsItalic]";
SetSetProp(Memo1->Font, "Style", strStyle); //Здесь операции над стилями

//А вот здесь начинается самое интересное
ff=lst->Values["Name"]; //Берем имя из пустого стринглиста и записываем в переменную ff
cc=lst->Values["Color"]; //анологично с цветом компонента
ss=lst->Values["Size"]; //анологично с размером
//где присваивание стринглисту всех тех параметров, которые ты пытаешься считать?
//если ты его создал, это не значит, что поля заполнятся автоматически, как при создании визуального компонента (типа лабела или тогоже стрингрида)

Memo1->Font->Name=ff; //Здесь ошибки нет, но по сути ты переменной присвоил пустое занчение
Memo1->Font->Color=StringToColor(cc); //а вот здесь ошибка будет в операторе StringToColor, так как он не может преобразовать пустое значение в колор
Memo1->Font->Size=ss.ToInt(); // здесь анологичная ошибка

delete lst,file;
}


надеюсь ты поймешь свои ошибки


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
pandrew
Дата 15.11.2006, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.3.2006

Репутация: 3
Всего: 3



Ну с кодом вам помогли, поэтому только ответ на вопрос:
Цитата(docwar)
Цитата(pandrew)

создается список (по умолчанию он пустой)

Почему? =) Никак не пойму...

Если вы посмотрите на определение списка (TStringList - список строк), вы узнаете что:
1)список это - упорядоченная последовательность элементов данных, каждый из которых может быть либо списком, либо атомарным неделимым элементом
2)список одна из базовых структур данных (тип контейнера) - класс в терминологии C++, а значит имеет методы и свойства

Когда вы создаете экземпляр списка вы создаете пустой контейнер (по простому: ящик в котором ничего нет). У ящика есть метод  LoadFromFile(), с помощью которых вы сможете его заполнить.
PM MAIL   Вверх
docwar
Дата 15.11.2006, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Учел всю критику, исправил код! Все работает, кроме загрузки стилей! Не пойму как использовать строку "Memo1->Font = TFontStyles() << fsBold << fsStyle;" smile
Код
void __fastcall TForm5::FormCreate(TObject *Sender)
{
TIniFile* file=new TIniFile("D:/nazvanie.ini");
TIniFile * ini;
ini=new TIniFile("D:/nazvanie.ini");

Memo1->Font->Name=ini->ReadString("Parametrs","Name", Memo1->Font->Name);
ss=ini->ReadString("Parametrs","Size", Memo1->Font->Size);
Memo1->Font->Size=ss.ToInt();
Memo1->Font->Color=StringToColor(ini->ReadString("Parametrs","Color", Memo1->Font->Name));

//Memo1->Font = TFontStyles() << fsBold << fsStyle;

delete file,ini;
}
//---------------------------------------------------------------------------
void __fastcall TForm5::Label1Click(TObject *Sender)
{
if(FontDialog1->Execute())
{
 Memo1->Font =  FontDialog1->Font;
 AnsiString strStyle = GetSetProp(Memo1->Font, "Style", "[]");
 ss=Memo1->Font->Size;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm5::FormClose(TObject *Sender, TCloseAction &Action)
{
TIniFile *ini;
ini=new TIniFile("D:/nazvanie.ini");

ini->WriteString("Parametrs","Name",Memo1->Font->Name);
ini->WriteString("Parametrs","Size",Memo1->Font->Size);
ini->WriteString("Parametrs","Color",Memo1->Font->Color);

ini->WriteString("Font","Style",GetSetProp(Memo1->Font, "Style", "[]"));

delete ini;

PM MAIL   Вверх
Vyacheslav
Дата 15.11.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Вы опять невнимательны smile
Строка  
Код

TIniFile* file=new TIniFile("D:/nazvanie.ini");// 

лишняя, так file нигде не используетс
Строка
Код

Memo1->Font = TFontStyles() << fsBold << fsStyle;

Означает, что содержимое стиля обнуляется и инициализируется заново конкретыми значениями. И здесь эта строка не нужна
Следует выполнить следущее
Код

 SetSetProp(Memo1->Font, "Style",ini->ReadString("Parametrs", "Style", "[]"));


Добавлено @ 13:04 
Эта строка также не нужна, так как strString нигде не используется
Код

AnsiString strStyle = GetSetProp(Memo1->Font, "Style", "[]");



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
docwar
Дата 15.11.2006, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Цитата(Vyacheslav @  15.11.2006,  13:00 Найти цитируемый пост)
Вы опять невнимательны 

Я предпочитаю немного другую формулировку - "Новичок"! )))

Vyacheslav, извините меня, пожалуйста, за немного резкий ответ с моей стороны! 
Vyacheslav, Bima, примите рейтинг в знак благодарности!
pandrew, Ваш рейтинг будет завтра (ограничение стоит).
Вопрос решен, всем больше спасибо! =) 

Это сообщение отредактировал(а) docwar - 15.11.2006, 14:17
PM MAIL   Вверх
docwar
Дата 15.11.2006, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



И последний вопрос:
почему при изменении имени файла с параметрами шрифта вылазит ошибка, что MS Sans Serif не является интовским значением???

ini=new TIniFile(PP + ExtractFileName("fonts.ini"));

Если указать полный путь до файла, то ошибки нет...
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1057 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.