![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |
|
#8
|
|||
|
|||
|
Хе...Ну вроде dll получается при компиляции...
Это по сути внешняя компонента для 1С Так то вроде все процедуры без ошибок компилирует... Вот тока загвостка в Unsatisfied forward or external declaration А ну вроде СОМ... Все вроде, нашел ошибку ))) Ща потестю .... Последний раз редактировалось mdbm, 26.05.2008 в 19:45. |
|
#9
|
|||
|
|||
|
Блин не получается....
dll скомпилировалась, но новые процедуры не вошли в нее... Вошли лишь те, что описаны в TBL.pas Я их создавал с помощью View > Type Library А те, что мне порекомендавал lmikle я просто разместил в коде руками...в UMain.pas И их нет в TBL.pas |
|
#10
|
|||
|
|||
|
Вот собственно код....
Компилируется , но не полностью Цитата:
|
|
#11
|
|||
|
|||
|
Как прописать процедуры и где, чтоб они вошли в компилируемый dll-файл ?
|