Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi] - тема Органайзер, Пишу курсовой на Delphi-тема Органайзер 
V
    Опции темы
BlackDan
Дата 31.5.2009, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 31.5.2009
Где: г. Новосибирск

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



Дамы и господа, пишу курсовой на Delphi тема проста как пять пальцев - "Органайзер" столкнулся с некоторыми банальными и не очень трудностями. Помогите пожалуйста в решении пары траблов и как более опытные подскажите лучшие чем мои алгоритмы. Исходный код (правда в нем много мусора) прилагается.
Кратко о проекте: 4 формы. Основная форма, это TMonthCalendar и TMainMenu. Вторая форма это добавление события на дату.Третья - чтение события с даты (т.е при двойном щелчке на дате в MonthCalendar на основной форме). Четвертая - пока не активная (пытался сделать несколько событий на одну дату). Пятая(ну как же без сентиментализма) - "О программе" или хвала разработчикам
===
Трабл #1) Довольно странная ошибка - сохраняю событие в файл
Код

  reset(base);
  write(base,c_t);
   showmessage(inttostr(filepos(base)));
    closefile(base);
     close;
 showmessage(inttostr(filepos(base))); - выдает мне текущую позицию указателя в файле, дык вот при каждом сохранении программа перезаписывает предыдущую запись т.к. указатель не сдвигается, хотя это должно происходить автоматически
--
На всякийслучай - проверьте корректность чтения
Код

i:=1;
 assignfile(base,'base.dat');
  reset(base);
   while not (eof(base)) do
  begin
   read(base,c_t_b[i]);
    i:=i+1;
  end;
closefile(base);
--
Трабл #2)Сохранение выравнивания текста

    1)Проверяю применены ли операции выравнивания посредством стандартных action'ов и присваиваю их выделенным под них элементам булево-массива в типе данных

        
Код

        if richeditAlignRight1.Checked=true then begin c_t.format[1]:=true; showmessage('Yes1') end;
        if richeditAlignCenter1.Checked=true then begin c_t.format[2]:=true; showmessage('Yes2') end;
        


    2)При Двойном щелчке на дате проверяю содержимое файла на операции выравнивания и определяю свойства объекта RichEdit1 на форме три

        
Код

        if c_t_b[j].format[1]=true then begin f3flags[1]:=true;//form3.RichEdit1.Alignment:=taRightJustify;
           if c_t_b[j].format[2]=true then f3flags[2]:=true;//form3.RichEdit1.Alignment:=taCenter;
        


    Как видите пробовал по разному, в том варианте который вы видите сейчас я присваиваю булева массиву который использую как флаг значения а на создание формы три вешаю присвоение выравнивания либо вариант два

        
Код

        if c_t_b[j].format[1]=true then Form3.RichEdit1.Alignment:=taRightJustify;
           if c_t_b[j].format[2]=true then form3.RichEdit1.Alignment:=taCenter;
        


Вопрос по другим свойствам текста, почему операция
Код

RichEdit1.font.Style:=fsbold;
Приводит к "[DCC Error] Unit1.pas(122): E2010 Incompatible types: 'TFontStyles' and 'TFontStyle'"
Как это предотвратить?

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

Есть еще парочка вопросов и траблов, но их пока трогать не буду. Заранее благодарю

Присоединённый файл ( Кол-во скачиваний: 70 )
Присоединённый файл  bproject.zip 476,76 Kb
PM MAIL ICQ Jabber   Вверх
Sanek123
Дата 31.5.2009, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



BlackDan, во-первых: сильно много букв. Не устал писать? Я пока до последней строчки дочитал - забыл что было в начале.

И сразу вопросы: а почему ничего не работает? Непонятные названия? И что вообще убило - поиск записи для редактирования (по дате и времени создания записи) задаешь вплоть до секунд! Я например если сделаю заметку, а для того она и делается что память ни к черту, я не буду помнить в какой дате я ее назначал, и уж точно не скажу в котором часу, минуте и секунде! 

А вообще не люблю я работать с текстовыми файлами если надо хранить более 10-100 строк, и еще постоянно их обрабатывать. Мой тебе совет - использу базу данных, хоть Аксесс, реально проще.

Вот когда-то мне делать нечего было тож писал органайзер, но все время отвлекали, так и не закончил его. Ниже ссылка на файл (весит ~3Мб, а здесь можно только метр, так что залил на  летитбит) - мой проект, еще прошлогодний, много чего надо доработать, но по крайней мере работает. Может музу играть, сообщение показать, или прогу запустить, плюс сколько угодно записей на одну дату!, плюс поиск (корректный, по календарю), плюс висит в трее (исходник "трея" был из какойто книжки, я его просто под свои нужды подмонтировал, и т.д.). Приятный, более менее красивый интерфейс программы, только кнопки бешено мигают, та надо проверку на текущую картинку поставить, и все будет ок.

Вообщем могу много хвалить, а времени мало... Вот "оно": Органайзер.rar
--------------------
Вас разыскивают бойцы 139-го порта...
PM MAIL   Вверх
kami
Дата 31.5.2009, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

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



Цитата(BlackDan @  31.5.2009,  19:52 Найти цитируемый пост)
Трабл #1) Довольно странная ошибка - сохраняю событие в файл

Не вижу ничего странного.
Reset переводит указатель на начало файла.


Цитата(BlackDan @  31.5.2009,  19:52 Найти цитируемый пост)
Трабл #2)Сохранение выравнивания текста

Лучше сделать так:
поле с_t.Format сделать типа TAlignment(нажмите F1), будет занимать 1 байт и будет сохраняться/загружаться и использоваться гораздо легче.


Цитата(BlackDan @  31.5.2009,  19:52 Найти цитируемый пост)
Приводит к "[DCC Error] Unit1.pas(122): E2010 Incompatible types: 'TFontStyles' and 'TFontStyle'"

потому что RichEdit1.font.Style - это набор из стилей.
нужно так: RichEdit1.font.Style:=[fsbold]; И это следует хотя бы из инспектора объектов.

Добавлено через 2 минуты и 2 секунды
Цитата(BlackDan @  31.5.2009,  19:52 Найти цитируемый пост)
тема проста как пять пальцев - "Органайзер"

Да?
А я бы не сказал так. Но вам виднее.

Добавлено через 4 минуты и 29 секунд
Цитата(Sanek123 @  31.5.2009,  21:02 Найти цитируемый пост)
Мой тебе совет - использу базу данных, хоть Аксесс, реально проще.

Ну, это кому как.
Не сложилось у меня с базами. Хотя Access даже не требует присутствия офиса на компьютере, поддержка его баз заложена в саму Windows. Но - все равно не сложилось.
Наверное, потому что задач, действительно требующих работы с базами и только с базами до сих пор не было.
PM MAIL WWW   Вверх
Keeper89
Дата 31.5.2009, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

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



Я думаю дело не в количестве строк, а в структуре проекта. Я бы здесь использовал БД, хотя в данном случае это должно оговариваться преподавателем.


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


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 31.5.2009
Где: г. Новосибирск

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



Цитата

Не вижу ничего странного.
Reset переводит указатель на начало файла.

Спасибо, но как тогда правильно открыть типизированый файл, append'ом не открывает
Цитата

Лучше сделать так:
поле с_t.Format сделать типа TAlignment(нажмите F1), будет занимать 1 байт и будет сохраняться/загружаться и использоваться гораздо легче.

Да, так намного лучше!
Цитата

Да?
А я бы не сказал так. Но вам виднее.

Я имел ввиду под простотой не сложность программы, а простоту понимания темы как таковой  smile 

У вас случайно нет идей как записать на одну дату несколько событий без использования БД?

PM MAIL ICQ Jabber   Вверх
Dmi3ev
Дата 1.6.2009, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



для кажой даты на которую создается событие(я) создавать файл, и хранить несколько событий там


--------------------

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


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 31.5.2009
Где: г. Новосибирск

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



Слишком много файлов, а это не есть хорошо=) Я уже думал о таком решении и решил что оно не из лучших но все равно спасибо)
PM MAIL ICQ Jabber   Вверх
BlackDan
Дата 1.6.2009, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 31.5.2009
Где: г. Новосибирск

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



Все, траблы с записью решил =) Записываю теперь так 
Код

if FileExists('base.dat') then begin
 reset(base);
  seek(base,i);
   i:=i+1;
    c_t.pointer:=i;
   write(base,c_t);
 //showmessage(inttostr(filepos(base)));
  closefile(base);
 end
  else begin
   rewrite(Base);
  write(base,c_t);
 closeFile(Base);
  end;

А читаю вот так:
Код

 i:=1;
  assignfile(base,'base.dat');
   if FileExists('base.dat') then begin
    reset(base);
     while not (eof(base)) do
      begin
       read(base,c_t_b[i]);
        i:=i+1;
       end;
      closefile(base);
    end
   else begin
  rewrite(Base);
   closeFile(Base); end;


Оцените пожалуйста корректность и оптимальность кода. 
===
FontStyle тоже записывает теперь нормально, а вот выравнивать не хотит...
Сохранение(На форме2 во время сохранения всех данных в файл):
Код

if richeditAlignLeft1.Checked=true then c_t.Aligns:=taLeftJustify;
if richeditAlignRight1.Checked=true then c_t.Aligns:=taRightJustify;
if richeditAlignCenter1.Checked=true then c_t.Aligns:=taCenter;

Присваивание(происходит на форме1 при двойном клике на дату): 
Код

form3.RichEdit1.Alignment:=c_t_b[j].Aligns; 


Это сообщение отредактировал(а) BlackDan - 1.6.2009, 15:49
PM MAIL ICQ Jabber   Вверх
Dmi3ev
Дата 1.6.2009, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



Цитата

Слишком много файлов, а это не есть хорошо=)

поэтому и придумал бд, но файлы тоже не так плохо, просто называть их 0106.txt для примера... и все... сколько много? в год максимум 365 файлов, это разве много... тем более не каждый же день события... хз, а для каждого года создавать новую папку... и получится вполне нормально... 


--------------------

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


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 31.5.2009
Где: г. Новосибирск

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



Цитата

поэтому и придумал бд, но файлы тоже не так плохо, просто называть их 0106.txt для примера... и все... сколько много? в год максимум 365 файлов, это разве много... тем более не каждый же день события... хз, а для каждого года создавать новую папку... и получится вполне нормально... 


В принципе тоже верно =) 

PM MAIL ICQ Jabber   Вверх
kami
Дата 1.6.2009, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

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



так.
Все нижесказанное - сугубо imho, не претендующее на истину ни в какой инстанции.

для чтения/записи в файл давно придумали TFileStream. А всякие AssignFile и иже с ними - пережитки паскаля. Но это не значит, что их нельзя использовать - все зависит от задачи.

Мое видение процесса (ваши исходники я НЕ скачивал).
Файл должен быть один. В начало записывается количество записей, потом - сами записи. Я использую работу со строками (т.е. string, а не string[200] к примеру).

Код

procedure LoadStringFromStream(var Str:string; Stream:TStream);
var
  i:integer;
begin
  Str:='';
  if Stream.Read(i, SizeOf(i))=SizeOf(i) then
    begin
      if i>0 then
        begin
          SetLength(str, i);
          if Stream.Read(Str[1], i)<>i then
            raise EStreamError.Create('Îøèáêà ïðè ÷òåíèè ñòðîêè èç ïîòîêà');
        end;
      if i<0 then
        raise EStreamError.Create('Îøèáêà ïðè ÷òåíèè ðàçìåðà ñòðîêè èç ïîòîêà');
    end
  else
    raise EStreamError.Create('Îøèáêà ïðè ÷òåíèè ñòðîêè èç ïîòîêà');
end;

procedure SaveStringToStream(const Str:string; Stream:TStream);
var
  i:integer;
begin
  i:=Length(Str);
  Stream.Write(i, SizeOf(i));
  if i>0 then
    Stream.Write(str[1], i);
end;


Это был код только для чтения и записи строк.
Теперь - работа по сохранению записей. (пример, опять-таки).

Код

type
  TSomeRecord=record
    Data1:DWORD;
    Data2:TAlignment;
    Data3:string;
  end;

procedure LoadRecordFromStream(var SomeRec:TSomeRec; Stream:TStream);
begin
  Stream.Read(SomeRec.Data1, SizeOf(SomeRec.Data1));
  Stream.Read(SomeRec.Data2, SizeOf(SomeRec.Data2));
  LoadStringFromStream(SomeRec.Data3, Stream);
end;

procedure SaveRecordToStream(SomeRec:TSomeRec; Stream:TStream);
begin
  Stream.Write(SomeRec.Data1, SizeOf(SomeRec.Data1));
  Stream.Write(SomeRec.Data2, SizeOf(SomeRec.Data2));
  SaveStringToStream(SomeRec.Data3, Stream);
end;


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

Код

procedure LoadBaseFromStream(Stream:TStream);
var
  Count, i:integer;
begin
  Stream.Read(Count, SizeOf(Count));
  for i:=0 to Count-1 do // все-таки массивы должны начинать индексацию с нуля.
    LoadRecordFromStream(c_t_b[i], Stream);    
end;

procedure SaveBaseToStream(Stream:TStream);
var
  Count, i:integer;
begin
  Stream.Write(Count, SizeOf(Count));
  for i:=0 to Count-1 do // все-таки массивы должны начинать индексацию с нуля.
    SaveRecordToStream(c_t_b[i], Stream);    
end;


Вот и все.
Осталось только привести процедуры загрузки/записи в/из файла.
Код

procedure LoadBaseFromFile(FileName:string);
var
  FS:TFileStream;
begin
  if FileExists(FileName) then
    begin
      FS:=TFileStream.Create(FileName, fmOpenRead);
      LoadBaseFromStream(FS);
      FS.Free;
    end;
end;

procedure SaveBaseToFile(FileName:string);
var
  FS:TFileStream;
begin
  if FileExists(FileName) then
    begin
      FS:=TFileStream.Create(FileName, fmOpenWrite);
      FS.Size:=0; // очищаем файл
    end
  else
    FS:=TFileStream.Create(FileName, fmCreate);
  SaveBaseToStream(FS);
  FS.Free;
end;


Напоследок:
Я понимаю, что переделывать код - это не хорошо.
Но если задачу начинать с нуля, я бы сделал ее не записями, а объектами, каждый из которых будет иметь свои поля, возможно - собственные методы редактирования, определения срабатывания события и т.д. (однозначно - методы сохранения и записи в поток).
И - не массив для их хранения, а потомок TList или TObjectList. тоже - с добавлением нужных методов.
PM MAIL WWW   Вверх
kami
Дата 1.6.2009, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

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



Цитата(BlackDan @  1.6.2009,  13:48 Найти цитируемый пост)
как записать на одну дату несколько событий без использования БД?

1. Добавить в описатель заметки поле Date:TDateTime; (само собой - с сохранением/загрузкой этого поля)
2. После загрузки/добавления записи проводить сортировку по этому полю.// хотя можно и без этого
3. При выводе (клике на календаре) проходить в цикле по всей базе. Если поле Date (с отбросом времени, которое лучше делать при добавлении заметки) совпадает с выбранным в календаре - отображать в форме№4.
PM MAIL WWW   Вверх
BlackDan
Дата 2.6.2009, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 31.5.2009
Где: г. Новосибирск

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



Цитата

1. Добавить в описатель заметки поле Date:TDateTime; (само собой - с сохранением/загрузкой этого поля)
2. После загрузки/добавления записи проводить сортировку по этому полю.// хотя можно и без этого
3. При выводе (клике на календаре) проходить в цикле по всей базе. Если поле Date (с отбросом времени, которое лучше делать при добавлении заметки) совпадает с выбранным в календаре - отображать в форме№4.

У меня примерно так и работает =)

Так и не могу разобраться с выравниванием текста...
PM MAIL ICQ Jabber   Вверх
kami
Дата 2.6.2009, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

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



Цитата(BlackDan @  1.6.2009,  15:21 Найти цитируемый пост)
Присваивание(происходит на форме1 при двойном клике на дату): 

В принципе, с richEdit я не работал, но все же задам вопрос:

Цитата(BlackDan @  1.6.2009,  15:21 Найти цитируемый пост)
Код

form3.RichEdit1.Alignment:=c_t_b[j].Aligns; 

Это до или после загрузки в RichEdit текста?
Мне кажется (только кажется) что выравнивание, fsBold и иже с ними свойства должны присваиваться до записи самого текста.
PM MAIL WWW   Вверх
Sanek123
Дата 2.6.2009, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



BlackDan, просто хочу дополнить.
Я так понимаю, что утебя запись в текстовичке может выглядеть следующим образом:

31.05.09|Сам текст заметки|дополнительная инфа...|еще что нибудь

ты ее парсишь при загрузке в прогу по символам-разделителям типа "|" и вуаля! или еще как-нибудь.

но не все так просто, как кажется... 

Во-первых, если твой органайзер работает по принципу: "оставил сегодня заметку - смогу завтра ее найти и прочесть", то чаще всего пользователь забывает не события, а как раз таки даты этих самых событий. Поэтому поиска заметки только по дате - недостаточно, надо бы организовать просмотр всех имеющихся заметок (списком), а также по ключевым фразам или словам и уже при выборе необходимой заметки показать о ней всю информацию. 

Во-вторых, пользователь вообще может забыть о том, что вообще когда-то делал заметку в этом твоем органайзере, поэтому появляется необходимость периодически напоминать юзверю о заметках, типа "Не желаете ли посмотреть хронологию заметок?". Тем самым данная тактика плавно перетекает из заметок в задания. Например, пользователь назначает органайзеру задание, и последний в свою очередь обязан периодичеки как-то информировать польз-ля о выполнении задания, будь то вспл. подсказки, звуки, всякие мессаги и т.д., не это важно, а то, что органайзер не может ограничиться единоразовым уведомлением, так как юзера в данный момент может не оказаться за компьютером. Теперь в базу данных органайзера (или в текстовичек, как у тебя) надо добавить еще одну запись "completed" с данными логического типа: Да (задание выполнено, пользователь подтвердил уведомление), и Нет (задание не выполнено или не подтверждено). А также появятся поля не только даты записи задания, но и даты, когда это задание надо выполнить.

В-третьих, органайзер изначально означает, программу способную "думать" или как помощника пользователя в выполнении рутины. Поэтому в програму можно добавить такую тюльку как периодический запуск определенных программ (чекер эл. почты, дефрагментатор, оптимизатор и т.п.), а при большей фантазии можно сделать, например, запись истории посещения сайтов, или открытия каких нибудь док-тов, или хронология chat'ения, показ прогноза погоды, времени работы, мониторинг инет-трафика и т.д. Это все конечно необязательно, но очень желательно. Так в моем понимании органайзер должен делать за пользователя. 

Предположим, я слежу за новыми темами на каком нибудь сайте, форуме или блоге и там нет возможности подписаться на уведомления об обновлениях - так пусть органайзер и лазит в инет и проверяет не добавилось ли на сайте новых материалов за мое отсутствие! Ну это я так, к слову!

PS: Может я здесь много трепался и не по делу, просто всегда вспоминаю слова одного, еще колледжевского преподавателя: "Никогда, никогда даже не надейтесь что вашими программами будут пользоватся опытные пользователи и профи, ими будут полные ламерюги, не знающие куда бы тыкнуть чтоб работало! И пишите программы так чтоб конечный ее пользователь не смог ввести данную прогу в заблуждение и вызвать ошибку программы!". И еще в какм-то топике, один из участников данного форума, однажды мне написал, что-то вроде: "Sanek123, пишите стихи, поэмы! Программ - не пишите!", что я собственно и делаю... А пример структуры БД можно посмотреть в аттаче во втором посте. Я не заставляю юзать прогу БД, а посмотреть стутуру, стиль, и сделать ее в конечном итоге наиболее удобной для использования.

Я допускаю возражение, что это всего лишь курсовой проект (даже не курсовая работа), и зачем ее так усложнять?. Подумайте, сколько всяких органайзеров есть сейчас в сети? Теперь представьте "свой" среди этой кипы! чем он лучше всех остальных? А может даже хуже? Тогда уменя вопрос "как прогрммист программисту" : зачем писать никому не нужные программы? Или те, которые (заведомо) не смогут выдержать конкуренции среди себе подобных? Насколько я понимаю при защите необходимо доказывать также экономическое положение и востребованность программного продукта. А он востребован, если если имеет минимум возможностей?
Тем более курсовоу проект не редко прерастает в дипломный. Так может стоит позаботиться об этом зараннее?
Я ктому что пока прога не разрослась можно обойтися и без БД. А потом? Даже если тебе так не нравиться Access, используй DBF, по сути такойже текстовичек только с готовой разметкой! Разумеется "готовую разметку" придеться делать самому ручками с нуля - зато уже настоящая база данных.

Фух, устал...   smile 
--------------------
Вас разыскивают бойцы 139-го порта...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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