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

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


Информационный Канал Subscribe.Ru

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

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

Выпуск № 241
от 17.09.2005, 22:37

Администратор:Калашников О.А.
В рассылке:Подписчиков: 240, Экспертов: 49
В номере:Вопросов: 7, Ответов: 19


Вопрос № 26189: Уважаемые эксперты! Задаю вопрос впервые. Вопрос такой. Как можно в Delphi 7 сохранять изображения в формате .tga? Может есть компоненты? Спасибо....
Вопрос № 26208: 1. В делфи "PAnsiChar and PWideChar represent pointers to AnsiChar and WideChar values, respectively. The generic PChar represents a pointer to a Char (that is to an AnsiChar)" а тогда как работать с WideChar? 2. Как правильно работать...
Вопрос № 26217: Как создать прогу,чтобы файлы на компе отображались в простом Listiew-eре и чтобы при нажатии на файл он открывался и к каждому типу файлов сделать значок как в Total Commander? Большое спасибо!...
Вопрос № 26223: К_вопросу_№26167... Я забыл сказать что TComponent - это преобразованный мной тот же TImage (то что не нужно убрал, необходимое себе добавил и назвал TComponent), а нужно мне следующее - я хочу читать кое какие свойства этого компонента<...
Вопрос № 26225: Здравствуйте уважаемые эксперты. Вчера задавал вопрос по поводу юзания Delphi8. Ответили, что Delphi8 - самая глючная из всех версий. Я с этим согласился и сегодня поставил Delphi2005. Теперь хочу еще Delphi7 поставить. Конфликты меж...
Вопрос № 26226: Добрый день (вечер)! Снова вопрос о DDE. Использую стандартные компоненты (Delphi 6) TDDeClientConv и TDDeClientItem, но создаю их динамически в DLL таким образом: Conv := TDdeClientConv.Create(nil); Conv.DataMode := ddeAutomatic;<...
Вопрос № 26231: K question # 26161 procedure TForm1.SBNFieldClick(Sender: TObject); var i:integer; begin form9.Showmodal; {------ --------- ------ ------- --------- ---------} form9.Close; end; мне нужно,чтобы ...

Вопрос № 26.189
Уважаемые эксперты! Задаю вопрос впервые. Вопрос такой. Как можно в Delphi 7 сохранять изображения в формате .tga? Может есть компоненты? Спасибо.
Отправлен: 12.09.2005, 08:55
Вопрос задал: Кобцев Д.А. (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, Кобцев Д.А.!
В самом Дельфи нет, но можно скачать компоненты:
http://www.torry.net/tools/graph/imagetools/pkIc.zip - позволяет сохранять иконки в формате TGA (кроме других форматов)
http://www.torry.net/apps/editors/graphicseditors/PictureView1.1.zip - компонента графический редактор, тоже может работать с TGA
Компоненты, в общем, есть, надо только пошарится по инету и найти подходящий для Ваших целей.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 12.09.2005, 09:12
Оценка за ответ: 4
Комментарий оценки:
Вообще-то это готовые программы и без исходников, но все-равно спасибо.

Отвечает: Denisss
Здравствуйте, Кобцев Д.А.!
Вот еще, в дополнение:
http://www.torry.net/vcl/graphics/otherformats/targa.zip

Кроме того, прикрепляю очень интересные исходники:
позволяют открывать TGA файл в TBitmap и сохранять из TBitmap.
(Они имеют одинаковое название, но это разные файлы)

Удачи!

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.

Ответ отправил: Denisss (статус: Практикант)
Отправлен: 12.09.2005, 18:45
Оценка за ответ: 5
Комментарий оценки:
Еще я нашел Envision Image Library - Version 2.5.
Отличная вещь, рекомендую.


Вопрос № 26.208
1. В делфи "PAnsiChar and PWideChar represent pointers to AnsiChar and WideChar values, respectively. The generic PChar represents a pointer to a Char (that is to an AnsiChar)" а тогда как работать с WideChar?
2. Как правильно работать с буферами? (пример)

Приложение:

Отправлен: 12.09.2005, 13:07
Вопрос задал: Negruzzi Cristian (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: sir henry
Здравствуйте, Negruzzi Cristian!
Вы неправильено применяете CreateFile(). Указав флаг FILE_FLAG_OVERLAPPED, Вам необходимо ввести переменную типа TOverlapped для возможности манипулировать файлом. Вы, интересно, хелп в принципе не читаете? :)
Вы записываете в файл типизированные данные и видимо пытаетесь прочитать его как текстовый файл (судя по расширению txt). А ВУаш читальщик поддерживает Wide?
Было бы проще (для Вас) определить тип файла таким же, как и записываемые туда данные:
var
hFile: file of ntp;
t: ntp;
Begin
AssignFile(hFile, 'test.txt');
Rewritw(hFile);
Write(hFile, t);
CloseFile(hFile);
End;
Согласитесь, так будет более осмысленно. Правда файл при этом потеряет возможность читаться в текстовом редакторе.
2. Что такое "буфер"? Это файловый буфер? Буфер обмена Windows? :)
Если последнее, то для работы с ним определен специальный класс TClipboard.
В хелпе есть примеры.
Уточните, какой буфер Вы имели в виду.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 12.09.2005, 13:55

Отвечает: Petya-kurochkin
Здравствуйте, Negruzzi Cristian!
Если, честно то тут лучше работать либо с TFileStream или функциями Паскаля, если чего из этих двух не знаете, то пишите!
---------
Всех порву! Всех побью! Но если можно убегу!
Ответ отправил: Petya-kurochkin (статус: 1-ый класс)
Отправлен: 12.09.2005, 18:00

Отвечает: Denisss
Здравствуйте, Negruzzi Cristian!
Честно говоря, мне не понятно: пользоваться Delphi и не пользоваться готовыми наработками профессиональных программистов (я о модулях, поставляемых вместе с Delphi).
Для записи/чтения нетипизированных файлов лучше всего использовать класс TFileStream (лучше всего будет, если Вы почитаете в справке Delphi о нем).
В приложении - простой пример записи в файл.

А по поводу буфера, так какой именно буфер Вы имеете в виду?

Приложение:

Ответ отправил: Denisss (статус: Практикант)
Отправлен: 12.09.2005, 19:40

Отвечает: Werewolf
Здравствуйте, Negruzzi Cristian!
Вот функция, которая переводит PWideChar в строку
function PWideToString(pw: PWideChar): string;
var
p: PChar;
iLen: integer;
begin
iLen := lstrlenw(pw) + 1;
GetMem(p, iLen);

WideCharToMultiByte(CP_ACP, 0, pw, iLen, p, iLen * 2, nil, nil);

Result := p;
FreeMem(p, iLen);
end;
и обратно
function StringToPWide(sStr: string; var iNewSize: integer): PWideChar;
var
pw: PWideChar;
iSize: integer;
begin
iSize := Length(sStr) + 1;
iNewSize := iSize * 2;

pw := AllocMem(iNewSize);

MultiByteToWideChar(CP_ACP, 0, PChar(sStr), iSize, pw, iNewSize);

Result := pw;
end;
Ответ отправил: Werewolf (статус: 9-ый класс)
Отправлен: 13.09.2005, 00:57


Вопрос № 26.217
Как создать прогу,чтобы файлы на компе отображались в простом Listiew-eре и чтобы при нажатии на файл он открывался и к каждому типу файлов сделать значок как в Total Commander?
Большое спасибо!
Отправлен: 12.09.2005, 16:55
Вопрос задал: Sassoft (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, Sassoft!
Зачем городить огород, если уже есть готовый подобный компонент на закладке WIN3.1?
Если же охота париться вручную, то нужно:
1. Кинуть на форму TImageList для хранения картинок для файлов;
2. Просканировать выбраный каталог (FindFirst+FindNext) и забросить найденые файлы, например, в TSringList;
3. В цикле добавлять файлы в TListView и картинки к ним:
var
li: TListItem;
i: integer;
Begin
For i=0 To StringList.Count-1 do
Begin
li:=ListView.Items.Add;
li.ImageIndex:=номер_картинки;
li.Caption:=StringList.Strings[i]; {Это имена файлов}
End;
End;
4. В событие OnDblClick необходимо занести запуск файла:
ShellExecute(o, 'open', PChar(ListView.ItemsFocused.Caption), NIL, NIL, SW_SHOW);
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 12.09.2005, 19:18

Отвечает: Татьяна
Здравствуйте, Sassoft!
Ну если обычный list, то для начала нужно выполнить
1. Поиск всех файлов в необходимом каталоге (см. приложение)
2. Обрабатывать событие onClick и выполнить открытие файла, что-то вроде
ShellExecute(Application.Handle,'open',list.items[list1.itemindex],nil,nil,SW_SHOW)
Желаю удачи

Приложение:

---------
Нет ничего невозможного!!!

Ответ отправила: Татьяна (статус: 2-ой класс)
Отправлен: 12.09.2005, 19:51

Отвечает: Bob Johnson
Здравствуйте, Sassoft!
Но самое "виндовое" решение - это сделать свой компонент на основе IShellBrowser (тот самый, что используется самим explorer'ом) :)
Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 12.09.2005, 23:50


Вопрос № 26.223
К_вопросу_№26167...
Я забыл сказать что TComponent - это преобразованный мной тот же TImage
(то что не нужно убрал, необходимое себе добавил и назвал TComponent),
а нужно мне следующее - я хочу читать кое какие свойства этого компонента
(они у каждого будут разные но тип тот же!!! ), а читать мне их надо в тот момент когда я
кликаю этот компонент и передвигать мне её нужно... (Я так думаю что если бы у нее было бы
имя как и у компонента создоваемого в DesineTime, я бы смог все это сделать)...
Как мне по имени обратится к этому компоненту и как обрабатывать события от этого компонента?...
Помогите пожалуйста...
Отправлен: 12.09.2005, 19:27
Вопрос задал: Dadaev Zaur (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Denisss
Здравствуйте, Dadaev Zaur!
Ничего себе!!!
Иерархия Вашего компонента, в таком случае такая:
TPersistent--TComponent--TControl--TGraphicControl--TImage--TComponent
Т.е. получается, что Ваш компонент является своим же пра-пра-дедушкой???
Рекомендую Вам изменить название класса Вашего компонента во избежание ошибок в программе.
Возьмите, например, TMyImage или что-то в этом роде...
Ответ отправил: Denisss (статус: Практикант)
Отправлен: 12.09.2005, 19:48

Отвечает: sir henry
Здравствуйте, Dadaev Zaur!
Вы когда кликнули по компоненту мышкой, у него наступило событие OnClick. Если Вы этому свойству присвоили свою процедуру, то в этой процедуре и будет описано, как и куда Вы читаете свойства этого самого компонента при событии OnClick.
Точно так-же нужно поступать и с остальными событиями.
Двигать компонент можно задавая значения Top и Left, и сохраняя его размеры.
Вам так-же никто не мешает присвоить компоненту имя.
Name: TComponentName => это тип string.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 12.09.2005, 19:50

Отвечает: Werewolf
Здравствуйте, Dadaev Zaur!
Обратиться к компоненту из его методов можно используя Self
Ответ отправил: Werewolf (статус: 9-ый класс)
Отправлен: 13.09.2005, 00:48


Вопрос № 26.225
Здравствуйте уважаемые эксперты.
Вчера задавал вопрос по поводу юзания Delphi8.
Ответили, что Delphi8 - самая глючная из всех версий.
Я с этим согласился и сегодня поставил Delphi2005.
Теперь хочу еще Delphi7 поставить. Конфликты между версиями не придвидятся ?
Отправлен: 12.09.2005, 19:56
Вопрос задал: Teapot (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Petya-kurochkin
Здравствуйте, Teapot!
Я вообще, сам то точно не знаю, но на всяк случай поставь на другой раздел жесткого диска.
Хотя если, честно то на врятли, если что между отладчиками.

---------
Всех порву! Всех побью! Но если можно убегу!
Ответ отправил: Petya-kurochkin (статус: 1-ый класс)
Отправлен: 12.09.2005, 20:00

Отвечает: And1
Здравствуйте, Teapot!
Не мучайтесь! Вы же не собираетесь использовать платформу .NET (хотя в 7 под неё тоже можно писать)? Самая НОРМАЛЬНАЯ это 7! А конфликты БУДУТ :)!!! Сам пробовал. Потом будут глючить отладчики (встроенные), и формат файлов у 7 и 2005 РАЗНЫЕ. Т.е. после установки 2005 все ране написанные проекты будут "конвертнуты" в её формат (а оно надо ;) ). Да и компонентов под семёрку больше плюс, ИМХО, норамльный интерфейс, в отличии от 2005. Так что самое то - это Delphi 7. Думаю, все эксперты со мной согласятся.
Ответ отправил: And1 (статус: 3-ий класс)
Отправлен: 12.09.2005, 20:36

Отвечает: Werewolf
Здравствуйте, Teapot!
Мне 2005 понравилась больше. Уж больно удобно в ней. До мелочей всё настраивается. Чувствуется влияние Microsoft(tm).
Интерфейс можно довести до вида 7ки. Правда в моей версии (D2005Architect+Borland_C#Builder) были глюки с проверкой корректности кода (иногда подчеркивал все красным, при этом продолжал компилить =).
Думаю переходить на 2005 стоит - мои любимый компоненты уже имеют установочные пакеты для D2005. Найти их не сложно.
К 8ке было отвращение сначала, но 2005 все сгладила.
Пользуйтесь.
Ответ отправил: Werewolf (статус: 9-ый класс)
Отправлен: 13.09.2005, 00:45

Отвечает: sir henry
Здравствуйте, Teapot!
Она не глючная, она написана только под NET. :) Это разные вещи.
Надо было сначала поставить Дельфи 7, а потом Дельфи 2005.
В принципе сильных конфликтов возникнуть не должно. Версию BDE они используют одну и туже. Если вы не компилите проги из командной строки, то системная переменная PATH, куда заносится путь к компилятору, Вас тоже не должна интересовать. Поставите Дельфи в разные каталоги и можно пользоваться.
Хотя, по моему мнению, если Вы не програмируете под NET, то лучше оставить одну семерку, т.к. под нее уже написана куча компонентов, в отличие от 2005.
2005 ценна только тем, что Вы, в одной и той-же оболочке, можете кропать программы и на C# и на Паскале, причем на Паскале как под NET, так и под Win32.
Я думаю, что многие компоненты из семерки подойдут и к 2005 (в плане программирования под Win32), однако для NET они потребуют серьезной переделки.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 13.09.2005, 05:41

Отвечает: Delphin
Здравствуйте, Teapot!
Delphi 7 не откроет файлы Delphi 2005 с моделями. А так компилнется если конечно вы там не выбирете содание .Net проекта.
Ставь последним тот Delphi которым будут открываться все файлы. Иначе прийдется запускать дельфи и там выбирать открыть....
В Delphi 2005 можно программировать под .Net( Delphi 8 ) и под обычный Visual Pascal ( Delphi 1-7 )
---------
Обращаться в ICQ: 77778851 или E-Mail: delphinster@gmail.com
Ответ отправил: Delphin (статус: 10-ый класс)
Отправлен: 13.09.2005, 17:02


Вопрос № 26.226
Добрый день (вечер)!
Снова вопрос о DDE.
Использую стандартные компоненты (Delphi 6) TDDeClientConv и TDDeClientItem, но создаю их динамически в DLL таким образом:
Conv := TDdeClientConv.Create(nil);
Conv.DataMode := ddeAutomatic;
if not Conv.SetLink('Server', 'Topic') then
begin
//ошибка
end;
Item := TDdeClientItem.create(nil);
with Item do
begin
DdeConv := Conv;
DdeItem := 'Item';
OnChange := Sent;
Tag := 24;//например
end;

Ошибка выскакивает, когда я пишу Item.free или item.destroy или freeandnil(item), даже, если я это напишу сразу после создания. Может подскажете, в чём причина?
P. S. Не знаю, чем полезен модуль ShareMem, но на всякий случай вписал его в uses - не помогло.
Отправлен: 12.09.2005, 20:34
Вопрос задал: mvp (статус: 4-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Petya-kurochkin
Здравствуйте, mvp!
Вы сказали, что создаёте DLL вот таким образом и написали код, но DLL так не создаёться или Вы до этого её объявили. Можно посмотреть как вы создаёте DLL?
---------
Всех порву! Всех побью! Но если можно убегу!
Ответ отправил: Petya-kurochkin (статус: 1-ый класс)
Отправлен: 12.09.2005, 20:55
Оценка за ответ: 3


Вопрос № 26.231
K question # 26161
procedure TForm1.SBNFieldClick(Sender: TObject);
var i:integer;
begin
form9.Showmodal;
{------
---------
------
-------
---------
---------}
form9.Close;
end;
мне нужно,чтобы form9 оcтaвaлacь вce вpeмя повepx form1, чтобы нельзя было пepeйти k form1, поka form9 oнa не будеt заkpыta Этой procedure;
Отправлен: 12.09.2005, 21:18
Вопрос задал: Граур Василий Олегович (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, Граур Василий Олегович!
ShowModal, все правильно. Только надо, чтобы эта форма была предварительно создана, но не выведена на экран.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 13.09.2005, 06:04


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

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

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

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

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


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


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное