Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.05.2008, 17:56
mdbm mdbm вне форума
Прохожий
 
Регистрация: 26.05.2008
Сообщения: 7
Репутация: 10
Счастье Пишу *.dll помогите с методами

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

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

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

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



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

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

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


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

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

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

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

С уважением....

Последний раз редактировалось mdbm, 26.05.2008 в 18:00.
Ответить с цитированием
  #2  
Старый 26.05.2008, 18:21
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

м-м-м...
Ну проверять надо, но должно быть что-то типа:

Код:
var
  Image : TBitmap;

// Загрузка
procedure LoadBitmap(AFileName : String); // AFileName - полное имя файла
begin
  If Not Assiged(Image) Then Image := TBitmap.Create;
  Try
    Image.LoadFromFile(AFileName);
  Excpet
    FreeAndNil(Image);
    Raise;
  End;
end;

// Освобождение. Вызывается после окончания работы с картинкой
procedure FreeBitmap;
begin
  If Assiged(Image) Then FreeAndNil(Image);
end;

// Рисуем кружок
procedure DrawCircle(X, Y, R : Integer);
begin
  If Not Assiged(Image) Then 
    Raise Exception.Create('Image doesn''t loaded.');

  // Здесь, возможно, надо еще настроить кисть и карандаш
  Image.Canvas.Ellipse(Rect(X-R,Y-R,X+R,Y+R));
end;

// Сохраняем кусок
procedure SaveBitmapPart(X,Y,W,H : Integer; AFileName : String);
var
  Buf : TBitmap;
begin
  Buf := TBitmap.Create;
  Try
    Buf.PixelFormat := pf24Bit;
    Buf.Width := W;
    Buf.Height := H;
    Buf.CopyRect(Rect(0,0,W,H),Image.Canvas,Rect(x,y,x+W,y+W));
    Buf.SaveToFile(AFileName);
  Finally
    Buf.Free;
  End;
end;

exports
  LoadBitmap,
  FreeBitmap,
  DrawCircle,
  SaveBitmapPart;
  
Ответить с цитированием
  #3  
Старый 26.05.2008, 19:03
mdbm mdbm вне форума
Прохожий
 
Регистрация: 26.05.2008
Сообщения: 7
Репутация: 10
По умолчанию

[Error] UMain.pas(61): Undeclared identifier: 'Assiged'
[Error] UMain.pas(78): Undeclared identifier: 'CopyRect'
[Fatal Error] mdbm_imager.dpr(11): Could not compile used unit 'UMain.pas'
Ответить с цитированием
  #4  
Старый 26.05.2008, 19:09
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

думать бум?
Assigned
Buf.Canvas.CopyRect(...);

Смотрим справку и работаем головой.
Обычные очепятки.
Ответить с цитированием
  #5  
Старый 26.05.2008, 19:22
mdbm mdbm вне форума
Прохожий
 
Регистрация: 26.05.2008
Сообщения: 7
Репутация: 10
По умолчанию

Спасибо большое...
Остается один вопросик.
Если я пишу руками в UMain.pas процедуру
Компилятор ругается, что
[Error] UMain.pas(16): Unsatisfied forward or external declaration: 'TMain.LoadBitmap'

смотрю в файл ***TBL.pas там нет моих методов...
Получается что где-то тут надо что-то сделать ?
Пробую описать процедуры прямо в файле TBL , но он не принимает...



Как быть ?
Извиняюсь за глупые вопросы...обязуюсь получить ответ и усвоить...
Ответить с цитированием
  #6  
Старый 26.05.2008, 19:31
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Э-э-э... мужик, ты dll пишешь или COM-компонент?
Ответить с цитированием
  #7  
Старый 26.05.2008, 19:39
Аватар для zip000
zip000 zip000 вне форума
Начинающий
 
Регистрация: 24.07.2007
Сообщения: 194
Репутация: 25
По умолчанию

mdbm после слова implementation в основном юните пишем
Код:
procedure LoadBitmap(AFileName : String); external 'MyDLL.dll';
procedure FreeBitmap; external 'MyDLL.dll';
procedure DrawCircle(X, Y, R : Integer); external 'MyDLL.dll';
procedure SaveBitmapPart(X,Y,W,H : Integer; AFileName : String); external 'MyDLL.dll';
Это статическая загрузка функций из библиотеки, т.е. все будет загружаться при старте программы. про динамическую загрузку почитайте книжку какую-нить, лень писать .

И еще. Я бы декларировал функции в библиотеке с помощью метода stdcall, т.е. в коде библиотеки пишете
Код:
procedure FreeBitmap; stdcall;
Аналогично для остальных функций. Но тогда в коде программы надо объявлять точно так же
Код:
procedure FreeBitmap; stdcall; external 'MyDLL.dll';
Это надо для совместимости с другими программами (точнее с программами, написанными на других ЯП).

И еще. В DLL лучше не юзать строки (String), а указатели на символы (PChar) для передачи строковых параметров, иначе надо еще с самой DLL'кой таскать еще 1 DLL'ку, там все в каментах написано. Почитайте.
__________________
Не профи, но и не чайник . D6 - лучше не придумали. Пока.

Последний раз редактировалось zip000, 26.05.2008 в 19:41.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:53.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025