Пишу *.dll помогите с методами

  • Автор темы mdbm
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

mdbm

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

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

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

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



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

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

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


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

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

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

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

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

mdbm

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

procedure TMain.LoadBitmap(AFileName: PChar);

Мне посоветовали использовать :pChar вместо :String
Я так и сделал...
В результате при попытке использовать dll в программе 1С
при запуске LoadBitmap(ЗдесьПутьККартинке_bmp)
Выскакивает сообщение Плохой тип переменной

Как быть ?
Где искать ошибку ?
 
M

mdbm

#5
Код:
procedure TMain.LoadBitmap(AFileName: PChar);
begin
If Not Assigned(Image) Then Image := TBitmap.Create;
Try
Image.LoadFromFile(AFileName);
Except
FreeAndNil(Image);
Raise;
End;
end;
 
E
#6
Очень замечательно, а строку вызвавшую ошибку предлагаете нам найти и понять в чем собственно ваша проблема?
 
M

mdbm

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

Код:
procedure TMain.BitmapLoad(var AFileName: OleVariant);
Вместо PChar я использовал OleVariant
 
M

mdbm

#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 точек на дюйм

Как это отрегулировать внутри процедуры ?
 
M

mdbm

#9
Все, нашел ошибку....

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

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

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

Silver Wind

#10
M
#11
Мне надо сделать всплывающую подсказку при клике мышкой.
Такую же, как если навести курсор на кнопку Пуск

Может есть иной способ реализации ?
 
S

Silver Wind

#12
Не совсем понятен вопрос. В Delphi у всех визуальных компанент есть свойство Hint используй его.
Если вопрос в том, чтобы показать подсказку по какому-то событию используй Application.ActivateHint()
 
M
#13
В программе 1С я загружаю внешнюю компоненту, которую пишу на Дельфи
И в программе 1С моя компонента выводит подсказки на форме 1С.
(Визуальные компоненты отсутствуют)
 
Статус
Закрыто для дальнейших ответов.