Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2008, 18:21   #1
mdbm
 
Регистрация: 25.05.2008
Сообщений: 8
Вопрос Пишу *.dll помогите с методами

Добрый день.
Я начинающий дельфист.
Владею лишь языком программирования 1С.
Мне необходимо написать библиотеку dll со следующими методами:

ЗагрузитьКартинку(Каталог,ИмяФайла) ; // загружает картинку (карта города)

НарисоватьКружокНаКартинке(Х,У,Ради ус); //рисует на загруженной картинке кружок.

СохранитьФрагмент(Х,У,Ширина,Высота ,Каталог,ИмяФайла); //сохраняет фрагмент загруженной картинки в каталог



Принцип работы с данной библиотекой будет такой:
В среде 1С я создаю объект("моя_библиотека.dll")
И начинаю использовать его методы.

1. С помощью метода ЗагрузитьКартинку , я подгружаю картинку в память
2. Рисую на картинке кружок(при необходимости несколько)
3. Сохраняю фрагмент в каталоге.

Загружаю этот фрагмент из каталога в программу 1С


И вот. Решил написать руками на Дельфи 7
И вообще давно уже хотел изучить этот язык
Но чтобы начать...

Помогите кодом данной библиотеки, а уже дальше я буду потихоньку
дорабатывать её и постигать чудеса программирования в Дельфи.

На текущий момент я уже написал скелет библиотеки. (по туторам)
С одним методом ПолучитьХендлГлавногоОкна1С()
Все вроде работает....

Нужна реализация трёх ,указанных выше методов.

С уважением....
mdbm вне форума Ответить с цитированием
Старый 26.05.2008, 21:34   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Что то я не совсем понял насчет получения хэндла 1С окна. Дайте код посмотреть, а там уже может и посоветуем что-то.

Вроде понял что вам надо, DLL ничего не передает в 1C? Только параметры получает и с файлами работает? Тогда вот направление куда копать:

TBitmap - объект Дельфи содержащий битмап (если карта в bmp)
TJpegImage - объект Дельфи для Jpeg (если карта в Jpeg)
TCanvas - канва, холст, объект на котором происходит рисование (есть у TBitmap)
Canvas.Ellipse - метод канвы, рисует эллипс
Canvas.CopyRect - метод канвы, копирует ее часть на другую канву
LoadFromFile - метод, загрузка из файла (есть и у TBitmap и у TJpegImage)
SaveToFile - метод, сохранение в файл (есть и у TBitmap и у TJpegImage)
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 26.05.2008 в 21:49.
mutabor вне форума Ответить с цитированием
Старый 27.05.2008, 13:20   #3
mdbm
 
Регистрация: 25.05.2008
Сообщений: 8
По умолчанию

Вообщем написал код
Скомпилировал
Вопрос про этот фрагмент:

procedure TMain.LoadBitmap(AFileName: PChar);

Мне посоветовали использовать :PChar вместо :String
Я так и сделал...
В результате при попытке использовать dll в программе 1С
при запуске LoadBitmap(ЗдесьПутьККартинке_bmp)
Выскакивает сообщение Плохой тип переменной
mdbm вне форума Ответить с цитированием
Старый 27.05.2008, 13:22   #4
D-mon
Форумчанин
 
Регистрация: 22.06.2007
Сообщений: 414
По умолчанию

LoadBitmap(PChar(ЗдесьПутьККартинке _bmp))
Нет невыполнимых задач, всё дело времени...
D-mon вне форума Ответить с цитированием
Старый 27.05.2008, 13:36   #5
mdbm
 
Регистрация: 25.05.2008
Сообщений: 8
По умолчанию

Вот фрагмент процедуры

Код:
procedure TMain.LoadBitmap(AFileName: PChar);
begin
  If Not Assigned(Image) Then Image := TBitmap.Create;
  Try
    Image.LoadFromFile(AFileName);
  Except
    FreeAndNil(Image);
    Raise;
  End;
end;

Последний раз редактировалось mdbm; 27.05.2008 в 13:38.
mdbm вне форума Ответить с цитированием
Старый 27.05.2008, 14:03   #6
mdbm
 
Регистрация: 25.05.2008
Сообщений: 8
По умолчанию

Ура !!!
Получилось...

Код:
procedure TMain.BitmapLoad(var AFileName: OleVariant);
Вместо PChar я использовал OleVariant
mdbm вне форума Ответить с цитированием
Старый 27.05.2008, 15:14   #7
mdbm
 
Регистрация: 25.05.2008
Сообщений: 8
По умолчанию

Вопрос:
При обрезании карты города , полученный фрагмент получается немного сплющенным

Код:
procedure TMain.BitmapSavePart(var X, Y, W, H: Integer;
 var AFileName: OleVariant);
var
 Buf : TBitmap;
begin
 Buf := TBitmap.Create;
 Try
   Buf.PixelFormat := pf24Bit;
   Buf.Width := W;
   Buf.Height := H;
   Buf.Canvas.CopyRect(Rect(0,0,W,H),Image.Canvas,Rect(x,y,x+W,y+W));
   Buf.SaveToFile(AFileName);
 Finally
   Buf.Free;
 End;
end;
Я так понял, это связано с разрешением
Оригинал карты города имеет разрешение 95,98 точек на дюйм
А обрезанный фрагмент имеет разрешение 96 точек на дюйм

Как это отрегулировать внутри процедуры ?
mdbm вне форума Ответить с цитированием
Старый 27.05.2008, 16:02   #8
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Скорее это происходит из-за того, что у Вас области разных размеров:

Buf.Canvas.CopyRect(Rect(0,0,W,H),Image.Canvas,Rect(x,y,x+W,y+W));
alexBlack вне форума Ответить с цитированием
Старый 27.05.2008, 17:04   #9
mdbm
 
Регистрация: 25.05.2008
Сообщений: 8
По умолчанию

))) спасибо
mdbm вне форума Ответить с цитированием
Старый 27.05.2008, 20:46   #10
mdbm
 
Регистрация: 25.05.2008
Сообщений: 8
По умолчанию

Делаю окно сообщения, которое будет всплывать в месте клика мышкой.
Организовал процедуру , вызывающую появление формы на экране.
Вопросы:

1. Как сделать, чтоб форма была голой, т.е. без верхней синей полоски.

2. Как сделать, чтоб окно формы, было поверх всех окон в 1С ?
mdbm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программное переключение словаря при проверке орфографии методами MS Word tojhto Общие вопросы Delphi 2 06.09.2008 01:54
Пишу Media Player (помогите) Delphi Reani Помощь студентам 4 12.06.2008 11:51
Помогите пишу дипломку, срочно надо разобраться Irinka Помощь студентам 7 29.03.2008 11:25
Делаю сайты, пишу маленькие/большие скрипты. Пишу веб-приложения и приложения под Windows. SkyM@n Фриланс 3 29.12.2007 16:21
Автоматизация обработки изображений и их оцифровки методами делфи helpme32 Мультимедиа в Delphi 1 14.12.2007 13:03