![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пишу *.dll помогите с методами [D7, WinXP]
mdbm © (2008-05-26 18:18:00)Добрый день.
Я начинающий дельфист.
Владею лишь языком программирования 1С.
Мне необходимо написать библиотеку dll со следующими методами:
ЗагрузитьКартинку(Каталог,ИмяФайла); // загружает картинку (карта города)
НарисоватьКружокНаКартинке(Х,У,Радиус); //рисует на загруженной картинке кружок.
СохранитьФрагмент(Х,У,Ширина,Высота,Каталог,ИмяФайла); //сохраняет фрагмент загруженной картинки в каталог
Принцип работы с данной библиотекой будет такой:
В среде 1С я создаю объект("моя_библиотека.dll")
И начинаю использовать его методы.
1. С помощью метода ЗагрузитьКартинку , я подгружаю картинку в память
2. Рисую на картинке кружок(при необходимости несколько)
3. Сохраняю фрагмент в каталоге.
Загружаю этот фрагмент из каталога в программу 1С
И вот. Решил написать руками на Дельфи 7
И вообще давно уже хотел изучить этот язык
Но чтобы начать...
Помогите кодом данной библиотеки, а уже дальше я буду потихоньку
дорабатывать её и постигать чудеса программирования в Дельфи.
На текущий момент я уже написал скелет библиотеки. (по туторам)
С одним методом ПолучитьХендлГлавногоОкна1С()
Все вроде работает....
Нужна реализация трёх ,указанных выше методов.
С уважением....
tesseract (2008-05-28 16:13:00) [1]
> Дык чтобы новый плагин зарегить. Его же еще как ком сервер
> регить надо.
Абсолютно не надо, 1с сама зарегит. Только если как OLE используешь, или работаешь не под администратором. Тогда надо просто загрузиться разок под админом 6-).
ANB (2008-05-28 15:51:00) [2]
> А можно фрагмент кода ?
SetParent
А БрингТуФронт - метод есть у каждого винконтрола.
ANB (2008-05-28 15:49:00) [3]
> Да и зачем гуиды менять ?
Дык чтобы новый плагин зарегить. Его же еще как ком сервер регить надо.
tesseract (2008-05-28 14:48:00) [4]
> Там еще надо помнить, где какие гуиды менять.
Контстанты + inc в помощь. Да и зачем гуиды менять ? Для каждого просто свой нужен.
mdbm (2008-05-28 14:37:00) [5]
> Парентовым окном для подсказки сделай свою картинку. И БрингТуФронт
> ему.ЗЫ. Тут окно верхнего уровня то вообще зачем ?
А можно фрагмент кода ?
tesseract (2008-05-28 14:33:00) [6]
> ето отламывается и перестает связываться с 1С.
Это всё AV. В 1c-е оно, не появляеться. Поэтому всё try...except -ом усеивать приходиться.
ANB (2008-05-28 14:23:00) [7]
> Может это можно сделать каким-то иным способом ?
Парентовым окном для подсказки сделай свою картинку. И БрингТуФронт ему.
ЗЫ. Тут окно верхнего уровня то вообще зачем ?
> Всё там просто. У меня рыба давно написана.
Там еще надо помнить, где какие гуиды менять. Млин, я когда писал - запарился. Раза 4 с нуля начинал проект. Чето отламывается и перестает связываться с 1С. Мне еще связь нужна была в обе стороны.
mdbm (2008-05-28 14:13:00) [8]По сути мне надо сделать всплывающую подсказку.
Может это можно сделать каким-то иным способом ?
Умище (2008-05-28 13:18:00) [9]
> 2. Как сделать, чтоб окно формы, было поверх всех окон в
> 1С ?
Пляши от SetWindowPos(hWnd, HWND_NOTOPMOST,...
Но на свой страх и риск, так как не ты один такой можешь захотеть такое поведение окна.
Сергей М. (2008-05-27 20:54:00) [10]
> mdbm
Ты занялся откровенной ерундой.
Внешние компоненты, мягко говоря, предназначены для иных целей.
Сергей М. (2008-05-27 20:51:00) [11]
> 1. Как сделать, чтоб форма была голой
см. BorderStyle = bsNone
> 2.
Никак.
mdbm (2008-05-27 20:40:00) [12]Делаю окно сообщения, которое будет всплывать в месте клика мышкой.
Организовал процедуру , вызывающую появление формы на экране.
Вопросы:
1. Как сделать, чтоб форма была голой, т.е. без верхней синей полоски.
2. Как сделать, чтоб окно формы, было поверх всех окон в 1С ?
Умище (2008-05-27 20:11:00) [13]Вот и начни.
TForumHelp (2008-05-27 19:11:00) [14]
> И вот. Решил написать руками на Дельфи 7И вообще давно уже
> хотел изучить этот языкНо чтобы начать...
помоему лучше начать с "Hello World!". =) имхо.
tesseract (2008-05-27 17:40:00) [15]
> Потому как не просто это.
Всё там просто. У меня рыба давно написана. А вот куда он карту города выводить будет. Если в отчёт, то всё просто.
mdbm (2008-05-27 16:52:00) [16]
> прикрутить свой аддон сначала к 1С еще не пробовал ?
Уже прикрутил и уже все работает.
ВОт только надо разобраться с разрешением при обрезании
> Следующая проблема - "выжирание" оперативной памяти картой
> города...
Для этого есть процедура в коде
procedure TMain.BitmapFree;
begin
If Assigned(Image) Then FreeAndNil(Image);
end;
ЗагрузилКарту, ОбрезалФрагмент, СохранилФрагмент, ВыгрузилКарту, ИспользуюФрагмент в 1С
Помогите разобраться с разрешением....
Stas (2008-05-27 16:31:00) [17]mdbm © (26.05.08 18:18)
Следующая проблема - "выжирание" оперативной памяти картой города...
ANB (2008-05-27 16:31:00) [18]Эта. Немного не по сабжу : а прикрутить свой аддон сначала к 1С еще не пробовал ? Просто с функциями - заглушками, которые ничего не делают.
Потому как не просто это.
mdbm (2008-05-27 15:12:00) [19]хмм...не знаю...процедуры создавал конструктором
это он так решил )
для меня пока это сложный вопрос...
Вопрос:
При обрезании карты города , полученный фрагмент получается немного сплющенным
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 точек на дюйм
Как это отрегулировать внутри процедуры ?
Сергей М. (2008-05-27 14:06:00) [20]
> var
А почему var?