Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.22;
Скачать: CL | DM;

Вниз

Пишу *.dll помогите с методами   Найти похожие ветки 

 
mdbm ©   (2008-05-26 18:18) [0]

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

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

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

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

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

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

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

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

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

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

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

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


 
Сергей М. ©   (2008-05-26 19:02) [1]


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


С этого момента максимально подробно ...


 
mdbm ©   (2008-05-26 19:07) [2]

)))

function TMain.h1C: Integer;
var wnd:hwnd;
begin
_pExtWndsSupport._AddRef;
_pExtWndsSupport.GetAppMainFrame(wnd);
RESULT:=wnd;
end;


 
Сергей М. ©   (2008-05-26 19:10) [3]

Эт что за шматок неизвестно чего ?

Где тут хоть какой-либо намек на "ПолучитьХендлГлавногоОкна" ?


 
mdbm ©   (2008-05-26 19:15) [4]

ну может не так описал. ))
сорь...


 
Сергей М. ©   (2008-05-26 19:20) [5]


> может не так описал


Да еще и не там.

Какое отношение твоя "проблема" имеет к "Media" - вобще не понятно.


 
Сергей М. ©   (2008-05-26 19:23) [6]


> библиотеку dll со следующими методами


У библиотеки dll нет никаких методов.
У нее могут быть только экспортируемые регулярные процедуры и функции.

Методы есть у объекта.

Где, как и какой объект ты создаешь - вообще темный лес.

А что, страшное слово "1C Add-On" ты выговорить не в состоянии ?
Или в 1-й раз его слышишь ?


 
mdbm ©   (2008-05-26 19:24) [7]

Конференция "Media"
работа со звуком, графикой и т.д.


 
mdbm ©   (2008-05-26 19:25) [8]

Понял...спасибо за поправку...


 
Сергей М. ©   (2008-05-26 19:28) [9]


> работа со звуком, графикой и т.д.


До звука и графики тебе еще как до китая на карачках.

Ты еще даже принципы взаимодействия двух программных модулей не освоил, а уже за звук и графику взялся.


 
mdbm ©   (2008-05-26 19:33) [10]

Будем двигаться мелкими шагами...


 
Сергей М. ©   (2008-05-26 19:35) [11]

Я так и не понял, ты Add-On сочиняешь или что ?)


 
mdbm ©   (2008-05-26 19:54) [12]

Да.


 
Сергей М. ©   (2008-05-27 09:32) [13]

http://sources.codenet.ru/file/941/%C2%ED%E5%F8%ED%E8%E5+%EA%EE%EC%EF%EE%ED%E5%ED%F2%FB.rar


 
mdbm ©   (2008-05-27 12:57) [14]

Круто....
Привеликое спасибо....Сергей
Буду исследовать.....


 
mdbm ©   (2008-05-27 13:21) [15]

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

procedure TMain.LoadBitmap(AFileName: PChar);

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

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


 
Сергей М. ©   (2008-05-27 13:58) [16]


> Мне посоветовали использовать PChar


PWideChar следует использовать


 
mdbm ©   (2008-05-27 14:02) [17]

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

procedure TMain.BitmapLoad(var AFileName: OleVariant);

PWideChar не пробовал пока...
Но все равно спасибо Сергей....


 
Сергей М. ©   (2008-05-27 14:06) [18]


> var


А почему var ?


 
mdbm ©   (2008-05-27 15:12) [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 точек на дюйм

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


 
ANB   (2008-05-27 16:31) [20]

Эта. Немного не по сабжу : а прикрутить свой аддон сначала к 1С еще не пробовал ? Просто с функциями - заглушками, которые ничего не делают.
Потому как не просто это.


 
Stas ©   (2008-05-27 16:31) [21]

mdbm ©   (26.05.08 18:18)  

Следующая проблема - "выжирание" оперативной памяти картой города...


 
mdbm ©   (2008-05-27 16:52) [22]


> прикрутить свой аддон сначала к 1С еще не пробовал ?


Уже прикрутил и уже все работает.
ВОт только надо разобраться с разрешением при обрезании


> Следующая проблема - "выжирание" оперативной памяти картой
> города...


Для этого есть процедура в коде

procedure TMain.BitmapFree;
begin
 If Assigned(Image) Then FreeAndNil(Image);
end;


ЗагрузилКарту, ОбрезалФрагмент, СохранилФрагмент, ВыгрузилКарту, ИспользуюФрагмент в 1С

Помогите разобраться с разрешением....


 
tesseract ©   (2008-05-27 17:40) [23]


> Потому как не просто это.


Всё там просто. У меня рыба давно написана. А вот куда он карту города выводить будет. Если в отчёт, то всё просто.


 
TForumHelp ©   (2008-05-27 19:11) [24]


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

помоему лучше начать с "Hello World!". =) имхо.


 
Умище   (2008-05-27 20:11) [25]

Вот и начни.


 
mdbm ©   (2008-05-27 20:40) [26]

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

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

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


 
Сергей М. ©   (2008-05-27 20:51) [27]


> 1. Как сделать, чтоб форма была голой


см. BorderStyle = bsNone


> 2.


Никак.


 
Сергей М. ©   (2008-05-27 20:54) [28]


> mdbm


Ты занялся откровенной ерундой.
Внешние компоненты, мягко говоря, предназначены для иных целей.


 
Умище   (2008-05-28 13:18) [29]


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


Пляши от SetWindowPos(hWnd, HWND_NOTOPMOST,...
Но на свой страх и риск, так как не ты один такой можешь захотеть такое поведение окна.


 
mdbm ©   (2008-05-28 14:13) [30]

По сути мне надо сделать всплывающую подсказку.
Может это можно сделать каким-то иным способом ?


 
ANB   (2008-05-28 14:23) [31]


> Может это можно сделать каким-то иным способом ?

Парентовым окном для подсказки сделай свою картинку. И БрингТуФронт ему.
ЗЫ. Тут окно верхнего уровня то вообще зачем ?


> Всё там просто. У меня рыба давно написана.

Там еще надо помнить, где какие гуиды менять. Млин, я когда писал - запарился. Раза 4 с нуля начинал проект. Чето отламывается и перестает связываться с 1С. Мне еще связь нужна была в обе стороны.


 
tesseract ©   (2008-05-28 14:33) [32]


> ето отламывается и перестает связываться с 1С.


Это всё AV. В 1c-е оно, не появляеться. Поэтому всё try...except -ом усеивать приходиться.


 
mdbm ©   (2008-05-28 14:37) [33]


> Парентовым окном для подсказки сделай свою картинку. И БрингТуФронт
> ему.ЗЫ. Тут окно верхнего уровня то вообще зачем ?


А можно фрагмент кода ?


 
tesseract ©   (2008-05-28 14:48) [34]


> Там еще надо помнить, где какие гуиды менять.


Контстанты + inc в помощь. Да и зачем гуиды менять ? Для каждого просто свой нужен.


 
ANB   (2008-05-28 15:49) [35]


> Да и зачем гуиды менять ?

Дык чтобы новый плагин зарегить. Его же еще как ком сервер регить надо.


 
ANB   (2008-05-28 15:51) [36]


> А можно фрагмент кода ?

SetParent

А БрингТуФронт - метод есть у каждого винконтрола.


 
tesseract ©   (2008-05-28 16:13) [37]


> Дык чтобы новый плагин зарегить. Его же еще как ком сервер
> регить надо.


Абсолютно не надо, 1с сама зарегит. Только если как OLE используешь, или работаешь не под администратором. Тогда надо просто загрузиться разок под админом 6-).



Страницы: 1 вся ветка

Текущий архив: 2008.06.22;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.016 c
2-1211793123
123-ий
2008-05-26 13:12
2008.06.22
Parameter not found


1-1194937505
DancerMan
2007-11-13 10:05
2008.06.22
Обмен значениями элементов ListView


6-1189211020
ArtemVac
2007-09-08 04:23
2008.06.22
Доска для рисования по локальной сети


2-1211838168
dellow
2008-05-27 01:42
2008.06.22
Проблема с типом данных.


2-1211807673
JastI
2008-05-26 17:14
2008.06.22
MS-DOS кириллица