Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];

Вниз

Пишу *.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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.05 c
15-1210165710
pasha_golub
2008-05-07 17:08
2008.06.22
CodeGear продалось Ebarcadero, вроде как :)


15-1210745144
Vlad Oshin
2008-05-14 10:05
2008.06.22
почему у меня все утрояется при постах?


2-1211994361
StiTch
2008-05-28 21:06
2008.06.22
Исходники


15-1210274134
-koha
2008-05-08 23:15
2008.06.22
Скрыть машину в локальной сети


15-1210145256
Галинка
2008-05-07 11:27
2008.06.22
Как вернуть массив строк из dll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский