Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 497
от 09.06.2006, 03:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 345, Экспертов: 63
В номере:Вопросов: 10, Ответов: 16


Вопрос № 45060: Здравствуйте. Подскажите пожалуйста компонент статью описание для работы с файлами *.cdr(Corel Draw)(открывать, смотреть и немного редактировать:_)). На компе Corel Draw не установлен (то есть OLE не подходит). ...
Вопрос № 45069: Всем привет! Пишу одну прогу на Delphi 5. Появились вопросы. 1. На главной форме есть кнопка "загрузить файлы из папки". Пробовал через OpenDialog, но он открывает лишь отдельные файлы. А мне нужен список всех файлов из выбранной па...
Вопрос № 45072: Добрый день. Помогите пожалуйста решить проблему. При нажитию кнопки мне нужно сделать проверку если файл в папке (Libase.txt) имеет размер 4 952 байт выполнается одно действие иначе - другое. С Уважением, Максим ...
Вопрос № 45077: Здравствуйте. Помогите, пожалуйста, с таким вопросом. Delphi 7. Нужен компонент SpinEdit что на закладке Common Controls. Но закладки этой после установки Делфи нет. В Компонент-настроить панель- Common Controls никак не перетаскивается на панель...
Вопрос № 45084: Добрый день, уважаемые! Вопрос такой: есть переменные SortL и SortR типа byte, в которых хранится тип сортировки: 0- по имени 1- по типу и тд. Значения этих переменных записываются и считываются из ini-файла. Если же определить новый тип<...
Вопрос № 45087: Добрый вечер, уважаемые эксперты! Вопрос такой: как у ListView совсем убрать вот эту рамочку с предложением переименования? Ну то есть щелкаешь по Itemу - и этот Item в рамочке хочет, чтобы ему другое имя дали. А мне вообще ее не нужно! Как избав...
Вопрос № 45099: Здрасьте! Не знаете как можна подгрузить анимированый курсор в прогу, ну и использовать?...
Вопрос № 45106: Уважаемые эксперты. Подскажите пожалуйста, как програмно изменить размер массива, если это возможно. Или какой-нибудь другой способ для решения задачи: имеется массив, в котором хранятся координаты 3D-объектов, при добавлении объекта его размер нужно...
Вопрос № 45107: 3. Уважаемые эксперты. Подскажите мне пожалуйста, как кодируется информация в .bmp, .jpg и .tga-файлов. Мне нужно програмно открывать файлы этих типов, не используя стандартные процедуры объекта Image (а используя процедуры (AssignFile, Reset, ReWrit...
Вопрос № 45108: Уважаемые эксперты подскажите мне пожалуйста, как "отлавливать" в Delphi одновременное нажатие сразу нескольких клавиш? А то код типа MyForm.OnKeyDown; begin A := Key; PutMessage('Нажата клавиша'+IntToStr(A)); end;<...

Вопрос № 45.060
Здравствуйте.
Подскажите пожалуйста компонент статью описание для работы с файлами *.cdr(Corel Draw)(открывать, смотреть и немного редактировать:_)). На компе Corel Draw не установлен (то есть OLE не подходит).
Отправлен: 03.06.2006, 13:08
Вопрос задал: DeMON (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Loki®
Здравствуйте, DeMON!

К сожалению, скорее всего - Вам не повезёт - ИМХО, cdr - закрытый формат...
Ответ отправил: Loki® (статус: 2-ой класс)
Ответ отправлен: 05.06.2006, 06:21
Оценка за ответ: 5
Комментарий оценки:
спасибо за участие.


Вопрос № 45.069
Всем привет!
Пишу одну прогу на Delphi 5. Появились вопросы.
1. На главной форме есть кнопка "загрузить файлы из папки". Пробовал через OpenDialog, но он открывает лишь отдельные файлы. А мне нужен список всех файлов из выбранной папки. Тогда я создал еще одну форму "Загрузить файлы из папки", на которую кинул DriveComboBox, DirectoryListBox, FileListBox, ну и кнопки "Ok" и "Отмена". Теперь, выбрав нужную папку и щелкнув по "Ok", все имена файлов из FileListBox копируются в другой ListBox, расположенный на главной форме. Все бы хорошо, но если я закрою эту форму методом close (щелчком по ОК или Отмене, не важно), а потом произведу некоторые манипуляции с файлами и папками (добавлю новые, переименую или удалю), то, щелкнув по "загрузить файлы из папки" снова, я в открывшимся окне "Загрузить файлы из папки" в DirectoryListBox, FileListBox увижу то же, что и было до закрытия этого окна. Т.е. в DirectoryListBox, FileListBox тот же список папок и файлов, что и был. Я попр обовал в процедуру FormActivate добавить код (пр.1), при этом метод Refresh менял на Repaint, но результат все тот же. Может поможете.
2. На главную форме проги хочу кинуть компонент, который бы выделенный мной файл проигрывал, если это видео или звуковой файл, отображал рисунок, если это файл jpg или gif или bmp... Короче что-то типа окошечка "Preview" в ASDSee. Может подскажите такую компоненту для Делфи 5, и где ее можно скачать.
Пока.

Приложение:

Отправлен: 03.06.2006, 14:29
Вопрос задал: Бурда Саша (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Kazakh
Здравствуйте, Бурда Саша!
Отвечу тока на первый вопрос. Делайте примерно так:
if not SelectDirectory('Выберите исходную папку','',FromDir) then exit;
в результате в переменной FromDir типа String будет либо имя выбранной папки, либо пусто. SelectDirectory находится в QDialogs (Uses QDialogs)

Или vожно использовать обычный OpenDialog, только в Options надо поставить
свойство AllowMultiSelect = true.
Тогда можно будет выбирать много файлов. Список этих файлов будет в OpenDialog1.Files (тип Strings), а количество соотвектсвенно OpenDialog1.Files.Count
---------
Если собеседник затрудняется ответить, значит, вопрос поставлен правильно.
Ответ отправил: Kazakh (статус: 9-ый класс)
Ответ отправлен: 03.06.2006, 14:49
Оценка за ответ: 5
Комментарий оценки:
Спасибо!!!!!!!! На счет SelectDirectory -это то, что доктор прописал.

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Бурда Саша!
Во-первых, есть TOpenDialog.Options: set of TOpenOptions
В инспекторе объектов напротив ofAllowMultiSelect можно поставить True;

Во-вторых, есть TShellTreeView и в нем можно выбрать нужную вам папку.
А потом в ней уже перебирать файлы с использованием FindFirst/FindNext - смотрите help, там есть пример.

Универсального Preview не видел, но его можно собрать из готовых компонентов:
TImage, TJPEGImage, TGIFImage (может быть, не так называется - нестандартный компонент). Для видео/аудио есть TMediaPlayer (точно есть в D7, по-моему, есть и в D5)

Либо можно использовать TWebBrowser: генерировать на ходу HTML страницу состоящую из единственного объекта, который и будет ловиться по WM_DROPFILE.
Для этого придется разобраться, как вставлять звук и видео в HTML

Наверное, оптимальным будет сделать для картинок всех типов броузер, а для видео/аудио MediaPlayer. И в зависимости от типа файла активизировать нужный компонент.

А вообще, не понимаю, зачем это, если в Win(XP & 2K3) это реализованно в графической оболочке.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: 8-ой класс)
Ответ отправлен: 03.06.2006, 15:47
Оценка за ответ: 5
Комментарий оценки:
На счет Preview, честно говоря, надеялся на более простой вариант. Все что Вы написали по этому поводу, в принципе, я и сам знал. Но все равно СПАСИБО!

Отвечает: Савенко Вадим Иванович
Здравствуйте, Бурда Саша!
По поводу открытия файлов и папок : вот код, там правда ListView c 5 колонками,
стиль vsReport. d и f -это константы: d = 1, f = 0 т е d - директория,f - файл
На форму нужно бросить еще ImageList.
Вызов такой
FileListCreate(ListView1, 'C:', ImageList1);
А еще посмотрите вопрос 44647, правда не знаю, есть ли это в D5

Приложение:

Ответ отправил: Савенко Вадим Иванович (статус: 1-ый класс)
Ответ отправлен: 03.06.2006, 16:28
Оценка за ответ: 4
Комментарий оценки:
Ну, Вадим Иванович... По-моему, Вы здесь перемудрили. Все равно СПАСИБО!


Вопрос № 45.072
Добрый день.
Помогите пожалуйста решить проблему.
При нажитию кнопки мне нужно сделать проверку если файл в папке (Libase.txt) имеет размер 4 952 байт выполнается одно действие иначе - другое.

С Уважением, Максим
Отправлен: 03.06.2006, 15:19
Вопрос задал: Maximus (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Kazakh
Здравствуйте, Maximus.
Вот код взятый из справки по Delphi для функции FileSize.
Этот код работает если файл не занят - не открыт другим процессом.
Если надо мерять размер занятого файла, то можно сначала скопировать (function CopyFile), а потом мерять.

procedure TForm1.Button1Click(Sender: TObject);
var
f: file of Byte;
size: Longint;
begin
if OpenDialog1.Execute then // можно и без OpenDialog1
begin // для этого
AssignFile(f, OpenDialog1.FileName); // вместо OpenDialog1.FileName
// пишите сразу путь 'C:\Lib\base.txt'
Reset(f);
try
size := FileSize(f);
ShowMessage('File size in bytes: ' + IntToStr(size));
if size = 4952
then Действие 1
else Действие 2;
finally
CloseFile(f);
end;
end;
end;
---------
Если собеседник затрудняется ответить, значит, вопрос поставлен правильно.
Ответ отправил: Kazakh (статус: 9-ый класс)
Ответ отправлен: 03.06.2006, 15:40
Оценка за ответ: 5
Комментарий оценки:
Именно то что нужно


Вопрос № 45.077
Здравствуйте.
Помогите, пожалуйста, с таким вопросом. Delphi 7. Нужен компонент SpinEdit что на закладке Common Controls. Но закладки этой после установки Делфи нет. В Компонент-настроить панель- Common Controls никак не перетаскивается на панель компонентов, Spinedit в другую закладку перетаскивается но там не появляется.

Как сделать доступным компонент Spinedit?
Спасибо.
Отправлен: 03.06.2006, 16:30
Вопрос задал: Viktor (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Злоумышленник
Здравствуйте, Viktor!
Ищите SpinEdit на вкладке Samples
Ответ отправил: Злоумышленник (статус: 8-ой класс)
Ответ отправлен: 03.06.2006, 16:42


Вопрос № 45.084
Добрый день, уважаемые! Вопрос такой: есть переменные SortL и SortR типа byte, в которых хранится тип сортировки:
0- по имени
1- по типу
и тд. Значения этих переменных записываются и считываются из ini-файла. Если же определить новый тип
type Sort = (sName, sType);
var SortL, SortR: TSort;
то как записать и считать? Ни WriteInteger, ни WriteString , не подходят.
Посоветуйте как выйти из положения или проще так и оставить Byte?
Я для удобства хотел, чтобы потом не путаться в нулях и единицах
Отправлен: 03.06.2006, 17:13
Вопрос задал: Савенко Вадим Иванович (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Kazakh
Здравствуйте, Савенко Вадим Иванович!
Не надо лишнего (свой тип и т.д.) - используйте стандарные классы. Для вашей проблемы этого вполне достаточно.
Мое вИдение решения вашего вопроса в использовании класса TStringList.

Итак,
1.
var
Form1: TForm1;
SortList:TStringList; // объявляем глобальную переменную

2.
procedure TForm1.FormCreate(Sender: TObject);
begin
SortList:=TStringList.Create; // Создаем список
if FileExists('sort.ini') then // если есть ini файл
SortList.LoadFromFile('sort.ini'); // то грузим в список
end;

3.
procedure TForm1.Button2Click(Sender: TObject);
begin
SortList.Add('По имени'); // при необходимости добавляем новый тип сортировки
SortList.Add('По типу'); // при необходимости добавляем новый тип сортировки
end;

4.
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(SortList.IndexOf('По типу'))); // так можно к нему обращаться
// или так
ShowMessage(SortList.Strings[0]); // не забываем что список начинается с 0
end;

5.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if SortList.Count>0 then // если список не пустой
SortList.SaveToFile('sort.ini'); // сохраним его в ini файл
SortList.Free; // освободим переменную
end;

6.
procedure TForm1.Button3Click(Sender: TObject);
begin
// не верите что список существует?
ShowMessage(SortList.DelimitedText); // проверим
end;

А вообще у этого класса есть еще много полезных свойств и методов.
Например, св-во Duplicate позволяет контролировать повторяющиеся записи
а метод Sort отсортировать по содержимому.
Так же у этого класса имеется св-во Objects в которое можно добавлять не только текст, но и типы, объекты и всё что взбредет в голову.
---------
Если собеседник затрудняется ответить, значит, вопрос поставлен правильно.
Ответ отправил: Kazakh (статус: 9-ый класс)
Ответ отправлен: 03.06.2006, 17:45

Отвечает: Злоумышленник
Здравствуйте, Савенко Вадим Иванович!
Попробуйте следующее.

Запись в ini-файл:
ini.WriteInteger('sort','SortL',Ord(SortL);
ini.WriteInteger('sort','SortR',Ord(SortR);

Чтение из ini-файла:
SortL := Sort(ini.ReadInteger('sort','SortL',Ord(sName)));
SortR := Sort(ini.ReadInteger('sort','SortR',Ord(sName)));

Вы написали: "type Sort = (sName, sType);" - объявляете тип, ВСЕ ПРОГРАММИСТЫ перед названием типов ставят T, в Вашем случае TSort. Делайте как все. Желаю Вам успеха!
Ответ отправил: Злоумышленник (статус: 8-ой класс)
Ответ отправлен: 03.06.2006, 21:36
Оценка за ответ: 5
Комментарий оценки:
Ну конечно TSort, я неправильно написал

Отвечает: Loki®
Здравствуйте, Савенко Вадим Иванович!

// type Sort = (sName, sType);
// var SortL, SortR: TSort;

Здесь даже комментировать не надо - на имена переменных посмотрите...
Ответ отправил: Loki® (статус: 2-ой класс)
Ответ отправлен: 05.06.2006, 05:50
Оценка за ответ: 3
Комментарий оценки:
Да зачем на них смотреть? Я не знал, как их в ini-файл записать. А нужны мне были вот эти строчки:
ini.WriteInteger('sort','SortL',Ord(SortL);
ini.WriteInteger('sort','SortR',Ord(SortR);
Я же не знал что они относятся к целым порядковым типам


Вопрос № 45.087
Добрый вечер, уважаемые эксперты! Вопрос такой: как у ListView совсем убрать вот эту рамочку с предложением переименования?
Ну то есть щелкаешь по Itemу - и этот Item в рамочке хочет, чтобы ему другое имя дали. А мне вообще ее не нужно! Как избавиться от нее???
Отправлен: 03.06.2006, 18:38
Вопрос задал: Савенко Вадим Иванович (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Coupler
Здравствуйте, Савенко Вадим Иванович!
Если вообще не нужно - свойство readonly=true. Но программно ты менять все сможешь.
Ответ отправил: Coupler (статус: Студент)
Ответ отправлен: 03.06.2006, 19:13
Оценка за ответ: 5
Комментарий оценки:
Спасибо! Я как-то не сообразил. Думал, что не так все просто :)


Вопрос № 45.099
Здрасьте!

Не знаете как можна подгрузить анимированый курсор в прогу, ну и использовать?
Отправлен: 03.06.2006, 19:47
Вопрос задал: RealMAN (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Савенко Вадим Иванович
Здравствуйте, RealMAN!
1. Создаете курсор и включаете его в ресурс приложения под именем MyCursor1
2. потом создаете глобальную константу
implementation
const crMyCursor = 1
Значение может быть в диапазоне от -32768 до 32767, но нужно, чтобы оно не совпадало со значениями стандартных курсоров (0 ... -21)
3. В OnCreate формы пишете
ScreenCursors[crMyCursor]:= LoadCursor(HInstance, 'MyCursor1');
4. В нужный момент устанавливаете курсор в качестве глобального
Screen.Cursor:= crMyCursor;
Возврат к стандартному курсору
Screen.Cursor:= crDefault;

Можно курсор сделать локальным
Panel1.Cursor:= crMyCursor;
Ответ отправил: Савенко Вадим Иванович (статус: 1-ый класс)
Ответ отправлен: 03.06.2006, 20:14


Вопрос № 45.106
Уважаемые эксперты. Подскажите пожалуйста, как програмно изменить размер массива, если это возможно. Или какой-нибудь другой способ для решения задачи: имеется массив, в котором хранятся координаты 3D-объектов, при добавлении объекта его размер нужно изменить(делать массив сразу большого размера - требуется много памяти). Може быть есть какое-нибудь средство для таких целей в OpenGL или DirectX.
Отправлен: 03.06.2006, 20:34
Вопрос задал: Николай (статус: Заблокирован)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Николай!
Используйте динамические массивы. Вот пример:
Var A: Array Of Integer;
...
SetLength(A, 2); //Теперь в массиве 2 элемента
A[0]:=100;
A[1]:=200;
...
SetLength(A,10); //А теперь их уже 4

Объявляются массивы как и обычные, только не указывается диапазон элементов ( [1..5] например). Номера элементов в динамических массивах начинаются с нуля.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 03.06.2006, 21:05


Вопрос № 45.107
3. Уважаемые эксперты. Подскажите мне пожалуйста, как кодируется информация в .bmp, .jpg и .tga-файлов. Мне нужно програмно открывать файлы этих типов, не используя стандартные процедуры объекта Image (а используя процедуры (AssignFile, Reset, ReWrite и т.п.).
Отправлен: 03.06.2006, 20:35
Вопрос задал: Николай (статус: Заблокирован)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, Николай!
Формат BMP - это классика. Описанием этого формата забит всеь интернет. Прочитать описание и пример загрузки файла можно, например, здесь:
http://wormer.gorodok.net/game/gamedev/2.htm
По JPG, вместе с Delphi поставляется модули для обработуи JPEG-файлов, загляните туда. Там же есть и примеры применения.
Если Вас интересует подробный механизм кодирования-раскодирования, то посмотрите здесь:
http://www2.usu.ru/mathem/kadm/dwm/archiv/Texts/JPEG/JPEG.html
Описание формата TGA можно почитать, например, здесь:
http://www.5ka.ru/67/37126/1.html
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 04.06.2006, 05:28


Вопрос № 45.108
Уважаемые эксперты подскажите мне пожалуйста, как "отлавливать" в Delphi одновременное нажатие сразу нескольких клавиш? А то код типа

MyForm.OnKeyDown;
begin
A := Key;
PutMessage('Нажата клавиша'+IntToStr(A));
end;

Позволяет "отловить" только одну клавишу.
Отправлен: 03.06.2006, 20:37
Вопрос задал: Николай (статус: Заблокирован)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Злоумышленник
Здравствуйте, Николай!
if (getasynckeystate(vk_Control)<>0) and (getasynckeystate(vk_Menu)<>0) then
{нажаты Ctrl и Alt одновременно}

Приложение:

Ответ отправил: Злоумышленник (статус: 8-ой класс)
Ответ отправлен: 03.06.2006, 21:36

Отвечает: Melamed
Здравствуйте, Николай!
Используй API функцию GetKeyState(VK_COD). Если функция возвратит отрицательное значение (установлен старший бит) то клавиша нажата, если же функция возвратить положительное значени ;е или ноль, то клавиша не нажата

Например

Приложение:

Ответ отправил: Melamed (статус: 1-ый класс)
Ответ отправлен: 03.06.2006, 21:52

Отвечает: Маренич Владимир
Здравствуйте, Николай!
Есть еще событие OnKeyUp :)
Можно создать динамический массив кодов нажатых кнопок, в который в OnKeyDown добавлять элемент, а в OnKeyUp искать соотв. элемент и удалять его. В любом месте программы можно будет узнать состояние клавиатуры... Если нужен будет пример кода, то пишите - состряпаю :)
Ответ отправил: Маренич Владимир (статус: Студент)
Ответ отправлен: 06.06.2006, 16:03
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное