Вопрос № 97454: Здравствуйте!
у меня такой вопрос:
Я вывожу в ListBox список полных имён файлов и по завершении программы запоминаю выбранный в ini файле, так вот пока имена короткие(<255) проблем не возникает а если больше??
Подскажите как можно выве...Вопрос № 97496: ув. эксперты. я пишу программу и хочу сделать так, чтобы пользователь мог сам выбрать оформление(шрифт формы, цвет формы), но не знаю как пишется процедура сохранения шрифта и цвета формы. в программу заходишь, выбираешь оформление(шрифт, цвет), пото...Вопрос № 97526: RaveReports 5 to RaveReports7. Есть уже написанные отчеты в 5-ой версии Rave Reports. Но есть проблемы с отображением
русских текстов. Знаю, как решить ее , но надо лезть в реестр и править - половинчатое решение. Проверил - в 7-ой версии Rave этот в...Вопрос № 97527: Здравствуйте!
У меня такая проблемка: в программе надо получить данные из ListBox, занеся строку из листбокса в строковую переменную. При вызове ShowMessage(ListBox1.Items[1]); всё проходит нормально, а при tmp:=ListBox1.Items[i]; (tmp:ansistring...Вопрос № 97531: Здравствуйте эксперты! Скажите, почему у меня этот код не запускается – постоянно выделяется Result.
..
Вопрос № 97.454
Здравствуйте!
у меня такой вопрос:
Я вывожу в ListBox список полных имён файлов и по завершении программы запоминаю выбранный в ini файле, так вот пока имена короткие(<255) проблем не возникает а если больше??
Подскажите как можно вывести такие имена в ListBox(желательно) и под каким типом сохранять такую длинную переменную в инишник или способ чтоб её как нить запомнить.
Заранее СПАСИБО!
Отправлен: 06.08.2007, 07:14
Вопрос задал: Stari (статус: 1-ый класс)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 4)
sir henry! Думаю, что Вы не совсем правы. Я сам попробовал код, который только что привёл, при длинах строк несколько больше 300 символов. Возможно, имеет значение версия Delphi, но моя Delphi 7 отработала корректно.
Ответ отправил: Delph (статус: 5-ый класс)
Ответ отправлен: 06.08.2007, 09:48 Оценка за ответ: 5
Отвечает: Mishell
Здравствуйте, Stari!
запоминайте строку (или строки) в обычный текстовый файл - в них нет ограничений
а в ListBox строки длиной более 255 символов добавляются без проблем (проверил)
Ответ отправил: Mishell (статус: 4-ый класс)
Ответ отправлен: 06.08.2007, 11:19 Оценка за ответ: 4 Комментарий оценки: текстовые файлы не совсем корректное решение(хотя делать придётся скорее всего через него),хотелось как можно больше централизовать все настройки и хранение всех данных
Отвечает: Василенко Алексей Васильевич
Здравствуйте, Stari!
возможным решением Вашей проблемы может служить AnsiString(~2^31 characters).
записать в переменную полное имя файла получиться, сохранить в ини-файле возможно тоже(на практике не доводилось). Возникнет проблема при работе с listBox'ом, т.к. он массив String'ов.. возможное решение - вывод нескольких строк или ввод псевдонимов, сокращение отображаемой части имени.
Конечное решение за Вами. т.к. не зная постановки задачи советовать что-то конкретное очень сложно.
P.S.: Возможно целесообразнее ограничить возможную длину имени файла?
--------- Готовых решений небыло, нет и не будет... вся жизнь - это лишь размышления на тему
Ответ отправил: Василенко Алексей Васильевич (статус: 5-ый класс)
Ответ отправлен: 07.08.2007, 00:18 Оценка за ответ: 5
Вопрос № 97.496
ув. эксперты. я пишу программу и хочу сделать так, чтобы пользователь мог сам выбрать оформление(шрифт формы, цвет формы), но не знаю как пишется процедура сохранения шрифта и цвета формы. в программу заходишь, выбираешь оформление(шрифт, цвет), потом заходиш 2ой раз, твоих изменений уже нет, скажите плизз как это исправить?
Заранее огромное спасибо.
всем за ответы отлично.
Отвечает: Дмитрий С.
Здравствуйте, Патрикеев Сергей!
советую сохранять выбранные параметры в реестре или .ini файле.
--------- Наши программисты самые программистые программисты!..
Ответ отправил: Дмитрий С. (статус: 3-ий класс)
Ответ отправлен: 06.08.2007, 13:50 Оценка за ответ: 5
Отвечает: Stari
Здравствуйте, Патрикеев Сергей!
можно сохранять результаты изменения шрафта в ini-файл
Ответ отправил: Stari (статус: 1-ый класс)
Ответ отправлен: 06.08.2007, 13:50 Оценка за ответ: 1
Отвечает: Shveps
Здравствуйте, Патрикеев Сергей!
Есть 2 варианта, возможно кто-то предложит ещё - это воспользоваться записью данных о шрифтах в реестр или организовать запись данных в ini файл.
В первом случае можно организовать "вручную" процедуру, которая будет записывать данные в реестр или воспользоваться RXFormStorage из пакета компонентов RX, если найдете эти компоненты. В приложении я привел несколько строчек кода для работы с реестром.
Во втром случае код приведен внизу, который как раз решает вашу проблему ;)
Приложение:
--------- Пиво ф топку !!! Водку Тоже !!!
Ответ отправил: Shveps (статус: 7-ой класс)
Ответ отправлен: 06.08.2007, 14:01 Оценка за ответ: 5
Отвечает: Mishell
Здравствуйте, Патрикеев Сергей!
сохранять оформление можно например в ini-файлы:
uses IniFiles;
...
var ini:TIniFile;
...
// сохраянем данные - например в OnClose
ini:=TIniFile.Create('c:myprojectsettings.ini'); // имя файла задавайте своё
ini.WriteString('Form1','FontName',Form1.Font.Name);
ini.WriteInteger('Form1','FontSize',Form1.Font.Size);
ini.WriteString('Form1','FontColor',ColorToString(Form1.Font.Color));
ini.WriteString('Form1','Color',ColorToString(Form1.Color));
ini.Free;
...
// восстанавливаем сохраненные данные - например в OnCreate
ini:=TIniFile.Create('c:myprojectsettings.ini');
Form1.Font.Name:=ini.ReadString('Form1','FontName','Arial');
Form1.Font.Size:=ini.ReadInteger('Form1','FontSize',8);
Form1.Font.Color:=StringToColor(ini.ReadString('Form1','FontColor','clBlack'));
Form1.Color:=StringToColor(ini.ReadString('Form1','Color','clBtnFace'));
ini.Free;
или можно все это хранить в реестре - см. хелп по классу TRegistry
Ответ отправил: Mishell (статус: 4-ый класс)
Ответ отправлен: 06.08.2007, 14:14 Оценка за ответ: 5
Отвечает: Bochvarov NikB
Здравствуйте, Патрикеев Сергей!
Смотриш свойства обектов (примерно tFont: Style, Name и т.д.) и записьиваш их в Registry.
Потом читаеш и ставиш на оборот.
Ответ отправил: Bochvarov NikB (статус: 10-ый класс)
Ответ отправлен: 06.08.2007, 14:20 Оценка за ответ: 3 Комментарий оценки: я просил саму процедуру
Вопрос № 97.526
RaveReports 5 to RaveReports7. Есть уже написанные отчеты в 5-ой версии Rave Reports. Но есть проблемы с отображением русских текстов. Знаю, как решить ее , но надо лезть в реестр и править - половинчатое решение. Проверил - в 7-ой версии Rave этот вопрос решен. ПРОБЛЕМА след-я: как новая версии не понимает старый формат файлов *.rav. Как старый формат конвертануть в новый???
Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Splender Alex!
Rave 7 точно понимает формат отчета от 6 версии. Проблем при переходе от 5 версии к 6 тоже не помню. Так что как вариант - скачать с сайта производителя демку 6 версии, открыть ею отчеты от 5, сохранить и работать с ними уже в 7.
Здравствуйте!
У меня такая проблемка: в программе надо получить данные из ListBox, занеся строку из листбокса в строковую переменную. При вызове ShowMessage(ListBox1.Items[1]); всё проходит нормально, а при tmp:=ListBox1.Items[i]; (tmp:ansistring;) программа рушится. Никак не могу понять в чем дело :(
Отвечает: Решетник Д
Здравствуйте, Фролов Павел Сергеевич!
Я так думаю, что проблема в индексе i. возможно, вы перебираете элементы от 1 до count
а нужно for i := 0 to lb.count-1 do ...
С переменными проблем не должно быть. ведь все автоматом выделяется...
--------- Жизнь коротка, чтобы писать на ассемблере
Ответ отправил: Решетник Д (статус: Студент)
Ответ отправлен: 06.08.2007, 17:40 Оценка за ответ: 4
Отвечает: Mishell
Здравствуйте, Фролов Павел Сергеевич!
для переменной i надо чтобы выполнялись условия: i>=0 и i<ListBox1.Items.Count
т.е. если Вы выполняете присвоение в цикле - то надо так:
for i:=0 to ListBox1.Items.Count-1 do
begin
tmp:=ListBox1.Items[i];
...
end;
Ответ отправил: Mishell (статус: 4-ый класс)
Ответ отправлен: 06.08.2007, 17:58
Отвечает: Виктор Пырлик
Здравствуйте, Фролов Павел Сергеевич!
Вы не расшифровали "рушится". Из приведенного вами, можно предположить, что вы выходите за границу массива (количество Items).
максимум для переменной i цикла должен быть на единицу меньше количества Items - пример в приложении.
ListBox1.Items[ListBox1.Items.Count] <- ошибка
ListBox1.Items[ListBox1.Items.Count-1] <- верно
Приложение:
--------- Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 06.08.2007, 18:56
Отвечает: Василенко Алексей Васильевич
Здравствуйте, Фролов Павел Сергеевич!
чесно говоря, Павел, я написал нижеприведенную процедуру.... и НИСЛОВА от компилятора ни услышал... про запуске получил в сообщениях все элементы листбокса.
Изложите пожалуйста фразу "программ рушиться" по подробнее...
Приложение:
--------- Готовых решений небыло, нет и не будет... вся жизнь - это лишь размышления на тему
Отвечает: Stari
Здравствуйте, Фролов Павел Сергеевич!
а если попробовать так:
tmp := ansistring(ListBox1.Items[i]);
Ответ отправил: Stari (статус: 1-ый класс)
Ответ отправлен: 07.08.2007, 07:13
Отвечает: Дмитрий С.
Здравствуйте, Фролов Павел Сергеевич!
В своём посте Вы не указываете явно что представляет из себя переменная "i". Могу предположить, что текст программы должен выглядеть следующим образом:
const n = 10; // for example
var i: integer;
{-------------}
begin
{-------------}
for i:=1 to n do
tmp := ListBox1.Items[i];
{-------------}
end;
--------- Наши программисты самые программистые программисты!..
Ответ отправил: Дмитрий С. (статус: 3-ий класс)
Ответ отправлен: 07.08.2007, 14:28
Отвечает: Busmatch
Здравствуйте, Фролов Павел Сергеевич!
код работает, возможно проблемы с tmp перекрытие локальными переменными
Приложение:
Ответ отправил: Busmatch (статус: 1-ый класс)
Ответ отправлен: 07.08.2007, 18:37
Вопрос № 97.531
Здравствуйте эксперты! Скажите, почему у меня этот код не запускается – постоянно выделяется Result.
Приложение:
Отправлен: 06.08.2007, 18:40
Вопрос задала: Алена (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Mishell
Здравствуйте, Алена!
в конце строки
For i:= Length (s) downto 1
не хватает оператора do
т.е. надо вот так:
For i:= Length (s) downto 1 do
кстати внимательней смотрите за сообщениями об ошибках - Дельфи Вам выдало ответ на Ваш вопрос сразу:
[Error] ... : 'DO' expected but identifier 'Result' found
Ответ отправил: Mishell (статус: 4-ый класс)
Ответ отправлен: 06.08.2007, 18:55 Оценка за ответ: 5
Отвечает: Виктор Пырлик
Здравствуйте, Алена!
Вы пропустили оператор do
For i:= Length (s) downto 1 do Result:= Result + s[i];
--------- Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 06.08.2007, 19:12 Оценка за ответ: 5
Отвечает: Василенко Алексей Васильевич
Здравствуйте, Алена!
допущена ошибка в описании цикла for
Приложение:
--------- Готовых решений небыло, нет и не будет... вся жизнь - это лишь размышления на тему
Ответ отправил: Василенко Алексей Васильевич (статус: 5-ый класс)
Ответ отправлен: 06.08.2007, 23:21 Оценка за ответ: 5
Отвечает: Дмитрий С.
Здравствуйте, Алена!
В приведённом Вами листинге не хватало "do" в цикле FOR. Исправленный код в приложении.
Приложение:
--------- Наши программисты самые программистые программисты!..
Ответ отправил: Дмитрий С. (статус: 3-ий класс)
Ответ отправлен: 07.08.2007, 14:22 Оценка за ответ: 5