у меня вопрос тут возник: Я хочу сделать на дельфи эдакий сборник статей. Они должны храниться в одном файле. Программа загружаетя->Пользователь выбирает пункт из списка статей и стаья появляется в memo. Как мне лучше это сделать ?
Приветствую Вас, Bizz! Я бы сделал так: Файл [1] - вроде индексного, где храниться массив из record, каждая из которых будет хранить инфу о длине(integer), начальной позиции(integer) и заголовке (string[фикс_длина]) статьи в файле [2]. Грузишь при запуске файл [1] как типизированый динамический массив и по запросу - данные из файла [2] функцей BlockRead(). Файлы можно объединить. Редактор статей, тоже самому надо будет делать. ЛИБО если будет только текст в статьях, можно их загнать в один .txt файл со своей разметкой вроде XML (нагляднее, проще редактировать, но медленнее поиск). Ответ отправлен: 03.02.2004, 22:26 Отправитель: Tano Отвечает sir henry
Приветствую Вас, Bizz! Лучше и проще все это сделатьв виде HTML :)). Впрочем, если надо на Дельфи, то можно и там. 1. Сами статьи. Храниться они должны исключительно в текстовом формате (требования МЕМО :). 2. Раз они все в одном файле, должен быть поиск, который бы однозначно определял начало новой статьи. Можно организовать поиск по названию. Т.е. в отдельном поле вводиться название требуемой статьи. В мемо считываются последовательно строки и проверяются на наличие требуемой подстроки. Проверка делается функцией Pos(). 3. Если должен быть список статей, а мы предполагаем, что статьи добавляются в конец файла в любое время, то при запуске программы должно создаваться оглавление. Опять же перебором строк и функцией Pos(). 4. Выбор статьи и переход к ней. Т.к. мемо - это фактически одномерный массив строк, то при создании оглавления нужно
просто запоминать индекс массива, с которого начинается новая статья и при выборе статьи в оглавлении переходить к этой строке.
Ответ отправлен: 04.02.2004, 15:41 Отправитель: sir henry Отвечает Boriss
Добрый день, Bizz! Вряд ли такое имеет смысл. Представь, какой файлище будет Есть два способа решения задачи: 1) в базе данных, там в зависимости от типа: BLOB или MEMO поля - содержимое файла; 2) В своем файле. Там сначала записываешь, типа как в BMP, что и по какому смещению и сколько хранится. Seek(конец этого файла). А там новый такой заголовок. и так до ....
Ответ отправлен: 04.02.2004, 19:05 Отправитель: Boriss Отвечает THE_PRO
Приветствую Вас, Bizz! Через DBF таблицы! Ответ отправлен: 03.02.2004, 15:34 Отправитель: THE_PRO Отвечает samum2000
Добрый день, Bizz! Вопрос достаточно абстрактный, поэтому и ответ будет в общих чертах. Если вы намерены делать это без использования баз данных, то тогда придется разработать свой формат файла, что является не самой простой задачей. Отображение статьи в Memo сделать достаточно просто: необходимо ассоциировать с каждой статьей и пунктом списка некий идентификатор (число). На выбор нового меню в списке вызывается обработчик события (какого - зависит от того, что вы используете в качестве списка), в нем-то и происходит чтение текста статьи из файла (или базы данных) с дальнейшим присваиванием этого текста компоненту memo. Ответ отправлен: 05.02.2004, 07:38 Отправитель: samum2000 Отвечает Pawel
Здравствуйте, Bizz! Нужно создать свой фаил-пакет, содержащий список фаилов с их смещением и размером. При запуске проги ты читаеш индесный фаил, и грузишь его.
Ответ отправлен: 06.02.2004, 19:09 Отправитель: Pawel
Вопрос № 1303
Народ, подскажите что есть Юникод, и как его юзать в дельфяной проге?
Приветствую Вас, Кирилл! Это значит, что для каждого символа отводится 2 байта, чтоб и иероглифами можно было писать. И по умолчанию в Delphi все строки в этом формате. По это причине для обработки рекомедуют пользоваться функциями, которые начинаются с Ansi... Ответ отправлен: 04.02.2004, 19:09 Отправитель: Boriss Отвечает vitya
Добрый день, Кирилл! Unicode - это кодировка, где символы кодируются по 2 байта. Это нужно, что бы все мировые символы были включены. Для использования их надо гонять WinAPI, юникодовские функции (у них на конце W). А для строк наверное использовать WORD указатели, или может есть встроенные типы, как в c++ (wchar_t) Ответ отправлен: 04.02.2004, 08:37 Отправитель: vitya Отвечает THE_PRO
Добрый день, Кирилл! Eto kodirovka simvolov perviye 255 kotoroqo sovpadayut s ANSI, a 128 s ASCII On podderjivayet vse narodniye alfaviti! Ответ отправлен: 04.02.2004, 12:27 Отправитель: THE_PRO Отвечает sir henry
Приветствую Вас, Кирилл! Юникод есть двухбайтовый символ, в отличие от OEM и ANSI символов, который состоят только из одного байта. Юзать его можно спокойно :)). Все функции по работе с Юникодом (а их туча немеряная :) начинаются с WIDE. Пожалуйста загляните в справку и смотрите все, что начинается с WIDE. Ответ отправлен: 04.02.2004, 15:46 Отправитель: sir henry Отвечает samum2000
Здравствуйте, Кирилл! Юникод - Стандарт кодировки знаков, разработанный организацией Unicode Consortium, который позволяет представить знаки практически всех письменных языков. Набор знаков в кодировке Юникод имеет несколько форм представления, включая UTF-8, UTF-16 и UTF-32. В большинстве интерфейсов Windows используется форма UTF-16, то есть каждый символ занимает 2 байта (16 бит). В Delphi тип WideChar является строкой Unicode. Ответ отправлен: 05.02.2004, 07:38 Отправитель: samum2000
Вопрос № 1304
Здравствуйте. 1. Начал с базами данных разбираться недавно, раньше считал это несерьезным делом и занимался в основном системным программированием, WinAPI и т.п. Короче, суть проблемы такова: Есть база InterBase'овская. В определенной таблице есть несколько полей, которые "NOT NULL". При добавлении записи нажатием кнопочки на TDBNavigator или методом Insert СРАЗУ (то есть, когда я еще не нажал кнопку Apply на TDBNavigator) вылазит окошко с исключением типа "Field PRODUCT_ID must have a value", хотя я еще не задавал значений для этой записи. С другими - не моими Interbase-базами все нормально - исключение вылезает не сразу после нажатия на кнопку, а вылезает только тогда, если я не заполнил поле, которое должно быть "не null" и попытаюсь добавить запись (нажать кнопку Apply на TDBNavigator). Подскажите,
что нужно изменить в базе, чтобы было все нормально (книг нет, разбираюсь сам, база создавалась при помощи проги EMS InterbaseFirebird Manager 3.7). Параметры базы: SQLDialect 3, PageSize 4096, ForcedWrites OFF,ReadOnly FALSE, кодовая страница - WIN1251. Могу, если что, прислать базу. 2. Есть в инете какие-нибудь компоненты типа TDBImage, но чтобы с JPEG работали.
Доброе время суток, Marouder! 1)Ne perexodi s odnoy zapisi na drquyu ne zadav yey znacheniye, i zadavay ix v tom poryadke v kakom oni naxodyatsya v tablitse. 2)Ne znayu! Ответ отправлен: 04.02.2004, 13:46 Отправитель: THE_PRO Отвечает sir henry
Приветствую Вас, Marouder! Раз у Вас стоит NOT NULL, значит у поля, при создании записи, должно быть какое-то значение по умолчанию. Если Вы создаете таблицу основываясь на доменах, то домен нужно создавать так: CREATE DOMAIN имя AS тип DEFAULT значение_по_умолчанию NOT NULL Либо при создании таблицы, в определении столбца, задавать свойство DEFAULT. CREATE TABLE имя_таблицы (столбец тип DEFAULT значение_по_умолчанию) ---- Можно попробовать такое добавление новой записи: INSERT INTO таблица (столбец_где_NOT_NULL) VALUE (значение) Ответ отправлен: 04.02.2004, 15:59 Отправитель: sir henry Отвечает Bob Johnson
Здравствуйте, Marouder! Вообще, намного качественнее будет, если ты не будешь вообще использовать DBGrid, DBNavigator и т.д. Тогда ты будешь сам управлять всем процессом работы с БД. Ну а конкретно по твоей ситуации - смотри, может в той базе, где это работает нормально есть какие-либо триггеры на событие insert и т.д. Также проверь ключевое поле таблицы и посмотри, как оно заполняется.
* EMan1.5: ---===*** The game we play ***===---
Ответ отправлен: 05.02.2004, 09:55 Отправитель: Bob Johnson
Вопрос № 1305
Я хочу написать поисковик файлов, но у меня возникла проблема при выводе результатов: необходимо чтобы имя файла выводилось вместе с его иконкой. Может быть есть какие нибудь функции для получения иконки из файла, и если будет не трудно, то пришлите исходник, где если функции передается имя файла, то она помещает в список результатов его имя с его иконкой. Заранее благодарен.
Приветствую Вас, Sergey! U TImage yest metod LoadFromResourceID Ответ отправлен: 04.02.2004, 13:43 Отправитель: THE_PRO Отвечает Boriss
Здравствуйте, Sergey! 1) В Application есть свойство Icon 2) В модуле ClipIcon: - AssignClipboardIcon - Процедура заполняет иконку Icon данными из буфера обмена (Clipboard) - CopyIconToClipboard - No comments 3) В ShellApi функция ExtractAssociatedIcon 4) а получать можно примерно так: var hIc, hLib: THandle; SystemDirectory: PChar; begin GetMem(SystemDirectory, MAX_PATH); GetSystemDirectory(SystemDirectory, MAX_PATH); hLib := LoadLibrary(PChar(SystemDirectory + 'shell32.dll')); hIc := LoadIcon(hLib, MAKEINTRESOURCE(20));
Ответ отправлен: 04.02.2004, 19:29 Отправитель: Boriss Отвечает Pawel
Здравствуйте, Sergey! В Deplhidemo есть пример. Нужно испльзовать LoadIco;
Ответ отправлен: 06.02.2004, 19:28 Отправитель: Pawel
Вопрос № 1306
Ага, понял что такое Юникод, а кам мне решить проблму что бы в проге написанной на делфи, в английской винде, русский текст отображался нормально без всяких поддержок кирилицы!
Здравствуйте, Kirill! Для этого, как минимум, в английской винде должны быть установлены русские шрифты и русская локаль :). Ответ отправлен: 05.02.2004, 03:44 Отправитель: sir henry Отвечает Boriss
Доброе время суток, Kirill! ???????????? Мужик! Ты понял хоть, что написал? Delphi использует для отображения функции Windows, и если тот не знает, как отобразить символ с кодом 200 "правильно по-твоему".... Дай дополнительную информацию: Хоть в какой-то проге русские буквы "правильными" видишь? Ответ отправлен: 05.02.2004, 09:19 Отправитель: Boriss Отвечает THE_PRO
Доброе время суток, Kirill! Dlya unicode strok yest spetsialniy tip WideString Ответ отправлен: 05.02.2004, 11:50 Отправитель: THE_PRO Отвечает samum2000
Приветствую Вас, Kirill! Ну, так и используй в своей проге unicode-строки (WideChar, PWideChar, и WideString) и такие же шрифты (по-моему отлично подходит Serif). Ответ отправлен: 06.02.2004, 08:58 Отправитель: samum2000 Отвечает Pawel
Приветствую Вас, Kirill! Установить или загрузить свой(РУССКИЙ) шрифт!!! Ответ отправлен: 06.02.2004, 19:31 Отправитель: Pawel
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.