![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Добрый день.
Я начинающий дельфист. Владею лишь языком программирования 1С. Мне необходимо написать библиотеку dll со следующими методами: ЗагрузитьКартинку(Каталог,ИмяФайла); // загружает картинку (карта города) НарисоватьКружокНаКартинке(Х,У,Радиус); //рисует на загруженной картинке кружок. СохранитьФрагмент(Х,У,Ширина,Высота,Каталог,ИмяФайла); //сохраняет фрагмент загруженной картинки в каталог Принцип работы с данной библиотекой будет такой: В среде 1С я создаю объект("моя_библиотека.dll") И начинаю использовать его методы. 1. С помощью метода ЗагрузитьКартинку , я подгружаю картинку в память 2. Рисую на картинке кружок(при необходимости несколько) 3. Сохраняю фрагмент в каталоге. Загружаю этот фрагмент из каталога в программу 1С И вот. Решил написать руками на Дельфи 7 И вообще давно уже хотел изучить этот язык Но чтобы начать... Помогите кодом данной библиотеки, а уже дальше я буду потихоньку дорабатывать её и постигать чудеса программирования в Дельфи. На текущий момент я уже написал скелет библиотеки. (по туторам) С одним методом ПолучитьХендлГлавногоОкна1С() Все вроде работает.... Нужна реализация трёх ,указанных выше методов. С уважением.... ![]() Последний раз редактировалось mdbm, 26.05.2008 в 18:00. |
#2
|
|||
|
|||
![]() м-м-м...
Ну проверять надо, но должно быть что-то типа: Код:
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
|
|||
|
|||
![]() [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
|
|||
|
|||
![]() думать бум?
Assigned Buf.Canvas.CopyRect(...); Смотрим справку и работаем головой. Обычные очепятки. |
#5
|
|||
|
|||
![]() Спасибо большое...
Остается один вопросик. Если я пишу руками в UMain.pas процедуру Компилятор ругается, что [Error] UMain.pas(16): Unsatisfied forward or external declaration: 'TMain.LoadBitmap' смотрю в файл ***TBL.pas там нет моих методов... Получается что где-то тут надо что-то сделать ? Пробую описать процедуры прямо в файле TBL , но он не принимает... Как быть ? Извиняюсь за глупые вопросы...обязуюсь получить ответ и усвоить... |
#6
|
|||
|
|||
![]() Э-э-э... мужик, ты dll пишешь или COM-компонент?
|
#7
|
||||
|
||||
![]() 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'ку, там все в каментах написано. Почитайте. Не профи, но и не чайник ![]() ![]() Последний раз редактировалось zip000, 26.05.2008 в 19:41. |