Вверх ↑
Этот топик читают: Гость
Ответов: 899
Рейтинг: 43
#1: 2008-03-03 00:06:07 ЛС | профиль | цитата
Можно ли на HiAsm соорудить прогу для генерации миллиметровки с дальнейшим выводом на печать

Подскажите основные моменты, пока столкнулся с проблемой "Миллиметры" - все в пикселях, думаю что простой перевод в миллиметры может дать погрешность

Вобщем смутно представляю как реализовать подобную прогу, жду ваших идей
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 5227
Рейтинг: 587
#2: 2008-03-03 06:44:49 ЛС | профиль | цитата
unalex - всё что я вижу вверху а после этого смотрю внизу на твою подпись и в голове моей это не укладывается. По моему это одно противоречие другому , лично я всё же сделал бы наверно пару попыток прежде чем тут соображений ждать. Ну вот тебе соображение которое просто вот сейчас брякнуло: Есть у nesco компонент Линейка, явно там есть код который конвертирует пикселы в сантиметры, вот там эту математику и посмотри

p.s а погрешность и принтер даст, даже самый идеальный, всё относительно, ведь ты же не написал какая погрешность тебя устроит
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 8928
Рейтинг: 823
#3: 2008-03-03 09:38:28 ЛС | профиль | цитата
unalex, в 90-х годах у нас в магазине не было миллиметровки, и я печатал её пользуясь листом Excel ещё игольчатым принтером, сейчас на струйном должно получиться неплохо
карма: 19

0
Ответов: 899
Рейтинг: 43
#4: 2008-03-03 15:00:20 ЛС | профиль | цитата
andrestudio, мои затруднения возникли после чтения ряда статей в интернете, например таких
...Но если попытаться напечатать ровно один пиксель, то разные программы будут выдавать разные результаты на печати. В среднем, один напечатанный на бумаге пиксель равен примерно 0,3—0,4 мм....


andrestudio писал(а):
unalex - всё что я вижу вверху а после этого смотрю внизу на твою подпись и в голове моей это не укладывается. По моему это одно противоречие другому



и заметь, я не прошу написать для меня готовую программу, я просто прошу немного проинформировать меня по этой теме
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 5227
Рейтинг: 587
#5: 2008-03-03 16:41:05 ЛС | профиль | цитата
unalex - раскажу тебе историю. Лет 6 назад делал я самодельный осцилограф. Так вот стекло с разметкой в виде креста и сеткой я делал лазерно утюжным методом с помощью хорошо известной тебе программы Sprint - Layout 2.0(тогда только эта версия была). Трубка 6ЛО3И экран довольно маленький и точно помню что на кресте шаг мелких делений был 1 мм. Качество стекла получилось отменное от промышленного было не отличить если бы я его не задарил то обезательно тебе предаставил фото, (придётся поверить на слово) . Так вот кто тебе мешает проделать тот же эксперимент в Sprint - Layout и распечатать на лазерном принтере, и не каких программ не надо, через буфер обмена у тебя уже через 20 минут будет сетка какая тебе нужна, и печатай на здоровье.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 2125
Рейтинг: 159
#6: 2008-03-03 17:14:59 ЛС | профиль | цитата
unalex писал(а):
жду ваших идей

На мой взгляд, отсутствие возможности рисовать непосредственно на Device Context (в дельфях его обычно обёртывают в некий класс, называемый Canvas) - это недостаток HiAsm. Сейчас компоненты Img_Line,Img_Rectangle и им подобные могут рисовать либо на битмапе, либо на окне. В случае с принтером было бы неплохо рисовать прямо на контексте принтера. В прилагаемом архиве я модифицировал Printer и Img_Rectangle, и имеющийся там пример рисует на чистом листе прямоугольник размером ровно 10 х 5 мм. Координаты задаются в сотых долях миллиметра.

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

0
файлы: 1printerctx.rar [3KB] [205]
Разработчик
Ответов: 26163
Рейтинг: 2127
#7: 2008-03-03 17:47:45 ЛС | профиль | цитата
А можно и на штатной рассыпухе, но с IC



Add(PaintBox,13548679,399,42)
{
Left=10
Top=5
Width=370
Height=225
Color=15793151
Point(Handle)
Point(Width)
Point(Height)
}
Add(MainForm,14101180,105,434)
{
Left=20
Top=105
Height=306
}
Add(InlineCode,11324079,322,357)
{
WorkPoints=#10:doGetPoint|
EventPoints=#12:onGetPoint_x|12:onGetPoint_y|
DataPoints=#7:_Handle|2:_x|2:_y|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|41: LOGPIXELSX_, LOGPIXELSY_ : integer;|9: public|25: _Handle: Thi_Event;|20: _x: Thi_Event;|20: _y: Thi_Event;|30: onGetPoint_x: Thi_Event;|30: onGetPoint_y: Thi_Event;|56: procedure doGetPoint(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|33:procedure THiAsmClass.doGetPoint;|15:var pt: TPoint;|11: DC:HDC;|13: wnd:Hwnd;|5:begin|34: wnd := ToIntegerEvent(_Handle);|20: DC := GetDC(wnd);|47: LOGPIXELSX_ := GetDeviceCaps(DC,LOGPIXELSX);|47: LOGPIXELSY_ := GetDeviceCaps(DC,LOGPIXELSY);|58: pt.x := round(ToIntegerEvent(_x) * LOGPIXELSX_ / 25.4);|58: pt.y := round(ToIntegerEvent(_y) * LOGPIXELSY_ / 25.4);|35: _hi_onEvent(onGetPoint_x, pt.x);|38: _hi_onEvent(onGetPoint_y, pt.y); |21: ReleaseDC(wnd,DC);|4:end;|0:|4:end.|
link(_Handle,15498755:Var2,[])
link(_x,12375699:Position,[])
link(onGetPoint_x,9608564:doValue,[(387,363)(387,230)])
}
Add(RichEdit,948654,301,112)
{
Left=10
Top=5
Width=370
Height=225
Point(Handle)
Point(Width)
Point(Height)
Point(RichEdit)
Point(doAddBitmap)
}
Add(Button,9489220,105,483)
{
Left=90
Top=240
Caption="Grid"
link(onClick,3062829:doEvent1,[])
}
Add(For,12375699,329,294)
{
Start=1
End=200
link(onEvent,11324079:doGetPoint,[(373,300)(373,332)(310,332)(310,363)])
}
Add(For,13340817,315,490)
{
Start=1
End=200
link(onEvent,9710102:doGetPoint,[(359,496)(359,528)(289,528)(289,566)])
}
Add(DoData,14928705,469,224)
{
link(onEventData,3955990:doDraw,[(513,230)(513,296)(401,296)(401,363)])
}
Add(Img_Line,10234935,385,560)
{
link(Bitmap,7234352:Var2,[])
link(Point1,3605723:Point,[])
link(Point2,742360:Point,[(405,552)(447,552)])
}
Add(GetDataEx,15498755,315,266)
{
link(Data,2689219:Var2,[(328,187)(405,187)])
}
Add(GetDataEx,7234352,378,266)
{
Angle=3
link(Data,15498755:Var3,[])
}
Add(InlineCode,9710102,301,560)
{
WorkPoints=#10:doGetPoint|
EventPoints=#12:onGetPoint_x|12:onGetPoint_y|
DataPoints=#7:_Handle|2:_x|2:_y|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|41: LOGPIXELSX_, LOGPIXELSY_ : integer;|9: public|25: _Handle: Thi_Event;|20: _x: Thi_Event;|20: _y: Thi_Event;|30: onGetPoint_x: Thi_Event;|30: onGetPoint_y: Thi_Event;|56: procedure doGetPoint(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|33:procedure THiAsmClass.doGetPoint;|15:var pt: TPoint;|11: DC:HDC;|13: wnd:Hwnd;|5:begin|34: wnd := ToIntegerEvent(_Handle);|20: DC := GetDC(wnd);|47: LOGPIXELSX_ := GetDeviceCaps(DC,LOGPIXELSX);|47: LOGPIXELSY_ := GetDeviceCaps(DC,LOGPIXELSY);|58: pt.x := round(ToIntegerEvent(_x) * LOGPIXELSX_ / 25.4);|58: pt.y := round(ToIntegerEvent(_y) * LOGPIXELSY_ / 25.4);|35: _hi_onEvent(onGetPoint_x, pt.x);|38: _hi_onEvent(onGetPoint_y, pt.y); |21: ReleaseDC(wnd,DC);|4:end;|0:|4:end.|
link(onGetPoint_y,6301072:doValue,[(366,573)(366,433)])
link(_Handle,15498755:Var1,[(307,275)])
link(_y,13340817:Position,[])
}
Add(PointXY,3605723,392,511)
{
link(Y,9547771:Var2,[])
}
Add(PointXY,742360,441,511)
{
link(X,13548679:Width,[(447,327)(419,327)])
link(Y,9547771:Var3,[(454,485)])
}
Add(Memory,6301072,399,427)
{
link(onData,9039159:doData,[])
}
Add(GetDataEx,9547771,392,476)
{
link(Data,6301072:Value,[])
}
Add(DoData,9039159,441,427)
{
link(onEventData,10234935:doDraw,[(485,433)(485,499)(373,499)(373,566)])
}
Add(Img_Line,3955990,413,357)
{
link(Bitmap,7234352:Var3,[(419,275)])
link(Point1,6787317:Point,[])
link(Point2,2013924:Point,[(433,349)(475,349)])
}
Add(PointXY,6787317,420,308)
{
link(X,782005:Var2,[])
}
Add(PointXY,2013924,469,308)
{
link(X,782005:Var3,[(475,282)])
link(Y,13548679:Height,[(482,226)(426,226)])
}
Add(Memory,9608564,420,224)
{
link(onData,14928705:doData,[])
}
Add(GetDataEx,782005,413,273)
{
link(Data,9608564:Value,[])
}
Add(Hub,3062829,154,483)
{
OutCount=3
link(onEvent1,12375699:doFor,[(292,489)(292,300)])
link(onEvent2,13340817:doFor,[])
link(onEvent3,2147258:doData,[(212,503)(212,153)])
}
Add(Printer,9877954,336,210)
{
Point(doSettings)
link(RichEdit,948654:RichEdit,[])
}
Add(Button,15091040,238,217)
{
Left=175
Top=240
Caption="Settings"
link(onClick,9877954:doSettings,[])
}
Add(Button,8178750,203,210)
{
Left=235
Top=240
Caption="Print"
link(onClick,9877954:doPrint,[])
}
Add(DoData,2147258,238,147)
{
link(onEventData,948654:doAddBitmap,[])
link(Data,2689219:Var1,[(244,100)])
}
Add(GetDataEx,2689219,392,91)
{
link(Data,13548679:Bitmap,[])
}


А можно и вообще без IC



Add(MainForm,14101180,196,544)
{
Left=20
Top=105
Height=306
}
Add(PaintBox,13548679,490,152)
{
Left=10
Top=5
Width=370
Height=225
Color=15793151
Point(Handle)
Point(Width)
Point(Height)
}
Add(MathParse,4546273,413,467)
{
MathStr="round(%1 * %2/ 25.4)"
link(onResult,9608564:doValue,[(478,473)(478,340)])
link(X1,15726283:Var2,[])
link(X2,12375699:Position,[])
}
Add(RichEdit,948654,392,222)
{
Left=10
Top=5
Width=370
Height=225
Point(Handle)
Point(Width)
Point(Height)
Point(RichEdit)
Point(doAddBitmap)
}
Add(Button,9489220,196,593)
{
Left=130
Top=240
Caption="Grid"
link(onClick,3062829:doEvent1,[])
}
Add(For,12375699,420,404)
{
Start=1
End=200
link(onEvent,4546273:doCalc,[(464,410)(464,442)(401,442)(401,473)])
}
Add(For,13340817,392,600)
{
Start=1
End=200
link(onEvent,5815724:doCalc,[(436,606)(436,641)(373,641)(373,676)])
}
Add(DoData,14928705,560,334)
{
link(onEventData,3955990:doDraw,[(604,340)(604,406)(492,406)(492,473)])
}
Add(Img_Line,10234935,476,670)
{
link(Bitmap,1592630:Var2,[])
link(Point1,3605723:Point,[])
link(Point2,742360:Point,[(496,662)(538,662)])
}
Add(MathParse,5815724,385,670)
{
MathStr="round(%1 * %2/ 25.4)"
link(onResult,6301072:doValue,[(464,676)(464,543)])
link(X1,15726283:Var1,[(391,399)])
link(X2,13340817:Position,[])
}
Add(Label,16620089,196,502)
{
Left=95
Top=243
Width=22
Height=17
Caption="DPI"
}
Add(GetDataEx,1592630,469,201)
{
Angle=1
link(Data,2689219:Var1,[])
}
Add(PointXY,3605723,483,621)
{
link(Y,9547771:Var2,[])
}
Add(PointXY,742360,532,621)
{
link(X,13548679:Width,[(538,437)(510,437)])
link(Y,9547771:Var3,[(545,595)])
}
Add(Memory,6301072,490,537)
{
link(onData,9039159:doData,[])
}
Add(GetDataEx,9547771,483,586)
{
link(Data,6301072:Value,[])
}
Add(DoData,9039159,532,537)
{
link(onEventData,10234935:doDraw,[(576,543)(576,609)(464,609)(464,676)])
}
Add(Img_Line,3955990,504,467)
{
link(Bitmap,2689219:Var2,[(510,341)(496,341)])
link(Point1,6787317:Point,[])
link(Point2,2013924:Point,[(524,459)(566,459)])
}
Add(PointXY,6787317,511,418)
{
link(X,782005:Var2,[])
}
Add(PointXY,2013924,560,418)
{
link(X,782005:Var3,[(566,392)])
link(Y,13548679:Height,[(573,336)(517,336)])
}
Add(Memory,9608564,511,334)
{
link(onData,14928705:doData,[])
}
Add(GetDataEx,782005,504,383)
{
link(Data,9608564:Value,[])
}
Add(Hub,3062829,245,593)
{
OutCount=3
link(onEvent1,12375699:doFor,[(383,599)(383,410)])
link(onEvent2,13340817:doFor,[])
link(onEvent3,2147258:doData,[(303,613)(303,263)])
}
Add(Printer,9877954,427,320)
{
Point(doSettings)
link(RichEdit,948654:RichEdit,[])
}
Add(Button,15091040,329,327)
{
Left=215
Top=240
Caption="Settings"
link(onClick,9877954:doSettings,[])
}
Add(Button,8178750,294,320)
{
Left=275
Top=240
Caption="Print"
link(onClick,9877954:doPrint,[])
}
Add(DoData,2147258,329,257)
{
link(onEventData,948654:doAddBitmap,[])
link(Data,1592630:Var1,[(335,210)])
}
Add(GetDataEx,2689219,483,201)
{
link(Data,13548679:Bitmap,[])
}
Add(Edit,1669692,413,348)
{
Left=60
Top=240
Width=30
Text="96"
}
Add(GetDataEx,15726283,406,390)
{
link(Data,1669692:Text,[])
}
Add(Label,2695721,245,502)
{
Left=15
Top=243
Width=38
Height=17
Caption="Screen"
}

карма: 22

0
Ответов: 3655
Рейтинг: 69
#8: 2008-03-03 18:03:30 ЛС | профиль | цитата
unalex, Могу дать готовую прогу
с иходником на дельфях.
Печатает на лист А4 миллимитровку.
карма: 0

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#9: 2008-03-03 18:07:35 ЛС | профиль | цитата
Вячеслав, что вы все докопались с готовыми пргами, так люди ничему не научатся... Советники, блини
карма: 22

0
Ответов: 3655
Рейтинг: 69
#10: 2008-03-03 18:12:18 ЛС | профиль | цитата
nesco писал(а):
что вы все докопались с готовыми пргами, так люди ничему не научатся... Советники, блини

Так ты тоже дал готовую прогу ,а не объяснял как надо сделать.
карма: 0

0
Ответов: 2125
Рейтинг: 159
#11: 2008-03-03 18:12:19 ЛС | профиль | цитата
nesco писал(а):
А можно и вообще без IC

И что теперь, всегда через RichEdit печатать?
Это же не наш метод!
карма: 1

0
Ответов: 3655
Рейтинг: 69
#12: 2008-03-03 18:14:22 ЛС | профиль | цитата
tsdima писал(а):
И что теперь, всегда через RichEdit печатать?
Это же не наш метод!

Согласен по китайски это как то
карма: 0

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#13: 2008-03-03 19:21:09 ЛС | профиль | цитата
Вячеслав писал(а):
Так ты тоже дал готовую прогу ,а не объяснял как надо сделать
Я дал не прогу, а схему -- это разные вещи. Задавали как-то вопросы, про то, как через Rich картинки печатать. А в схеме еще алгоритм дан, как DPI в миллиметры переводить.
Вячеслав писал(а):
Согласен по китайски это как то
Да, по-китайски, через прямой контекст -- лучше, но согласись, ты и того не нарисовал

------------ Дoбавленo:

tsdima писал(а):
И что теперь, всегда через RichEdit печатать?
Да нет, это -- пример, как можно сделать вообше. Контекстный вариант намного лучше. Надо бы прокачать штатные компоненты графики.

А сделал я эту схемку из того соображения, что вместо того, что бы подумать, все, почему-то, кинулись предлагать сторонние проги, меня это окончательно убило
карма: 22

0
Ответов: 9906
Рейтинг: 351
#14: 2008-03-03 19:58:13 ЛС | профиль | цитата
tsdima писал(а):
И что теперь, всегда через RichEdit печатать?

Где ты был, когда чел (чтобы напечатать) грузил в невидимый Rich картинку на 5 Mpx ...
Шибко жаловался: долго, говорит
карма: 9

0
Ответов: 2125
Рейтинг: 159
#15: 2008-03-03 23:05:35 ЛС | профиль | цитата
Galkov писал(а):
Где ты был, когда чел

Видимо, как всегда, устал читать и недочитал
карма: 1

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)