Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26151
Рейтинг: 2127
#61: 2008-01-25 12:52:39 ЛС | профиль | цитата
Galkov писал(а):
nesco, ты читать УМЕЕШЬ, блин, или нет
Ничерта я тебя не пойму, ты хочешь, чтобы я убрал вот в этом коде координаты х2 и y2 и оставил только offset -- x1 и y1. Но если так надо, то пожалуйста, я уберу, ну никаких проблем, абсолютно.


            0: begin
if ((x2 - x1) = 0) or ((y2 - y1) = 0) then begin
x1 := 0; y1 := 0; wsz := Width; hsz := Height;
end else begin
wsz := x2 - x1; hsz := y2 - y1;
end;
hRect := MakeRect(x1, y1, wsz, hsz);
end;
Galkov писал(а):
А задача стояла пристая, и типовая до предела: донести возможности COM-объекета, откопанного tsdima (не говорящего, правда - где) до пользователя.
Ну не все же сразу, докопаемся и до возможности отрисовки мультикартинок в одном окне, дай мне только это "бублик", у меня его просто нету.


карма: 22

0
Ответов: 9906
Рейтинг: 351
#62: 2008-01-25 13:07:44 ЛС | профиль | цитата
nesco писал(а):
Ничерта я тебя не пойму

Чего ты не поймешь
Вопрос очень простой: зависит, или нет
Ответ может быть, в том числе, и экспериментальный...
На этот вопрос не существует ответа "не пойму".
Если ДА - то где та исходная задача, требующая этого - для меня это есть загадка

Ровно то же самое, и про "отрицательные"
Жванецкий писал(а):
Уже не в очках дело, пусть скажут: они есть, или их - нет!


nesco писал(а):
ты хочешь, чтобы я убрал

Я хочу, чтобы у кодов были объективные причины.
Если они существуют - я хочу их понять, если их нет - я хочу чтобы этих кодов не было.
Вот чего я хочу.
А еще я хочу, чтобы такой принцип соблюдался из без моих наездов... Сам по себе...

карма: 9

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#63: 2008-01-25 13:08:36 ЛС | профиль | цитата
А где он в IE читается, такой рисунок, по-умолчанию, без специального макроса он читаться не будет. Я могу попытаться метод такой сделать, который будет выводить такие картинки в анимированном виде
карма: 22

0
Ответов: 9906
Рейтинг: 351
#64: 2008-01-25 13:13:14 ЛС | профиль | цитата
nesco писал(а):
А где он

А там же, где и в обычном StretchBlt, во второй 4-ке координат
А ты думал они зачем
Чтобы туда только размеры картинки подставлять
карма: 9

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#65: 2008-01-25 13:22:27 ЛС | профиль | цитата
nesco писал(а):
Если они существуют - я хочу их понять, если их нет - я хочу чтобы этих кодов не было.
Вот чего я хочу.
А еще я хочу, чтобы такой принцип соблюдался из без моих наездов... Сам по себе...
На то мы здесь и собрались, чтобы приходить к консенсусу. Например, я не видел надобности выводить окно отрисовки за предел основного окна, откуда и изменение размера окна вывода при приближении к границам основного окна. Ну может, не правильно поставил для себя задачу (итак мне ее никто не ставил), ты показал, что это может быть несостоятельным. Давай уберем, я не возражаю.

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


Galkov писал(а):
там же, где и в обычном StretchBlt, во второй 4-ке координат
А ты думал они зачем
Чтобы туда только размеры картинки подставлять
Да прекрасно я знаю, для чего вторая половина координат в StretchBlt. Вопрос, а где в рисунке хранится размер фона и спрайта и как их оттуда вытащить, да никак -- их там просто нет. Рисунок такого плана у меня в IE не анимируется, его надо анимировать вручную, задав начальные параметры -- размер фона, размер спрайта, количество спрайтов, скорость анимирования, координаты вывода спрайтов на фон. Этот рисунок можно анимировать обычными средствами HiAsm'a без всяких проблем, включая прозрачность спрайта.
карма: 22

0
Ответов: 9906
Рейтинг: 351
#66: 2008-01-25 14:03:18 ЛС | профиль | цитата
nesco писал(а):
я не видел надобности

Это я не вижу надобности НЕ выводить.
Из "не вижу надобности" НЕ МОЖЕТ следовать добавление кода.
Чем и отличаются эти два "не вижу надобности"
Добавление может следовать из "ВИЖУ надобность"
Причем как справа/снизу, так и слева/сверху
И так есть в других наших элементах.

Ты вообще-то сам хоть понял, что сделал
Тащим картинку влево - и упираемся (это если схема проверяет не отрицательность Point1, отгадай что будет, если - нет)
Тащим вправо - оппа! она вдруг начала уменьшаться, с чего-то...
Чего будет, когда она до 0 уменьшится - сказать, или сам догадаешься
Случаи, когда она уменьшится до "отрицательных" величин, как-то уже и анализировать не хочется...

Ну говори, ты считаешь, что большинству пользователей нужен именно такой ИИ (а ведь на него коды потрачены!)
И причем тут "возражаю", или нет.
Тоже мне, ответ: чаще всего "не возражают" те, кто об этом вообще не думал
------------ Дoбавленo:

nesco писал(а):
Вопрос, а где в рисунке хранится размер фона

В голове у автора программы, который и подготовил этот рисунок, для работы, им же написанной программы

nesco, ты зачем из всего проблему делаешь Ну нет этой проблемы
------------ Дoбавленo:

nesco писал(а):
Этот рисунок можно анимировать обычными средствами HiAsm'a без всяких проблем, включая прозрачность спрайта

Этот - ДА
А если это полупозрачность, то нет.
Или ты думаешь, что GIF это мой любимый формат
Мне вообще рисование по барабану
Вопрос в том, что эта возможность предоставлена COM-ом, и недоступна пользователю
А вот это - не по барабану, это есть качество работы.
------------ Дoбавленo:

Обновился, блин...
И наверное, я стал совсем тупой
Никак не пойму, как можно сделать Scale, не используя StretchBlt .......
карма: 9

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#67: 2008-01-25 14:04:20 ЛС | профиль | цитата
Galkov писал(а):
Ты вообще-то сам хоть понял, что сделал
Да я-то понял, что сделал, потому, что сам так задумал. Но с отрицательными координатами не проверял, а вот уменьшение масштаба, это точно муть, я уже понял, уберу обязательно, да и Draw сделаю только со смешением координат по Point1, оставив размер без изменения.
Насчет рисунка такого плана, как ты показал, то сделать можно только с заданием начальных параметров, вставив дополнительный режим, типа MotionSprite
карма: 22

0
Ответов: 9906
Рейтинг: 351
#68: 2008-01-25 14:08:43 ЛС | профиль | цитата
Может просто метод doSetSpriteFrame
карма: 9

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#69: 2008-01-25 14:12:09 ЛС | профиль | цитата
Galkov писал(а):
Никак не пойму, как можно сделать Scale, не используя StretchBlt .......

Режим Draw, в данном случае, и есть StretchBlt с параметрами вторых координат 0,0,sz.cx,sz.cy. Я специально это проверял, попробуй задай координаты, не соответствующие размеру картинки -- Draw впишит картинку в это размер.

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


Galkov писал(а):
Может просто метод doSetSpriteFrame
Ну а начальные параметры как передать, в MT-потоке, или как?
карма: 22

0
Ответов: 9906
Рейтинг: 351
#70: 2008-01-25 17:11:56 ЛС | профиль | цитата
Вот чего я на это все думаю

1) Однако надо сделать св-во DrawSource как в других элементов, но 3-х вариантное (NewBitmap, ExtBitmap,Handle). И разбить doDraw на три независимых doDraw0, doDraw1, doDraw2 - у пользователя пристегнется только один. Для варианта 0 (а может пусть и в остальных щелкает в холостую) добавить выходной event onDraw

2) Завести еще 2 верхние точки Point3 и Point4 для кадра спрайта. Если с них читается 0 (например площадь спрайта нулевая), то это полный Image.
А уж как подавать данные, MT или еще как - предписывать это пользователю не следует. Он должен делать так, как ему кажется удобней, а не так как ты думаешь, что ему будет удобнее. Здесь есть разница не большая.

3) Режимы масштабирования следует выделить в отдельный метод _prop_SlaleMode:procedure(var R:TRect) of object, которая либо преобразует rectangle твоим любимым офигительным способом, либо вообще оставит без изменений. Пользователь должен получить один метод, а не весь зверинец.
Набор режимов из элемента Image - вполне адекватен (ну может быть Mozaic послать нафиг, хотя и для этого Tile есть, вроде)
Тип св-ва -- 14-й

4) Обработку очереди все-таки в элементе делать НЕ надо. SG:=false влепить в самые первые строки doLoad.
GetStateInfo и _hi_onEvent(onLoad) перенести в MyCallback (имя, правда - детское какое-то)
Если doDraw подключать к onLoad, то все работает. Есть тонкость, что onLoad сработает ТОЛЬКО после завершения всей алгоритмической ветки с doLoad, но это лучше в справке прописать как-то...
Нижние точки защитить этим же флагом

5) Вот только не рассказывай мне опять, что такая "схема методов" не будет работать
Это же - работает (любым макаром):

Add(MainForm,7649955,98,119)
{
Left=10
Top=10
Position=1
Point(onPaint)
link(onCreate,12423105:doData,[])
}
Add(InlineCode,13555273,217,154)
{
WorkPoints=#6:doLoad|6:doDraw|
EventPoints=#6:onLoad|
DataPoints=#8:FileName|6:Bitmap|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|56:uses Windows,Messages,Share,Debug,ActiveX,KOLComObj,KOL;|0:|4:type|32: IImgCtx = interface(IUnknown)|48: ['{3050f3d7-98b5-11cf-bb82-00aa00bdce0b}']|40: // Initialization/Download methods|68: function Load(pszUrl:PWChar; dwFlags:DWORD): HResult; stdcall;|93: function SelectChanges(ulChgOn:DWORD; ulChgOff:DWORD; fSignal:DWORD): HResult; stdcall;|83: function SetCallback(pCallback:pointer; pUserData:pointer): HResult; stdcall;|44: function Disconnect: HResult; stdcall;|0:|22: // Query methods|95: function GetUpdateRects(prc:PRect; var prcImg:TRect; var pcrc:integer): HResult; stdcall;|104: function GetStateInfo(var pulState:DWORD; var pSize:TSize; fClearChanges:DWORD): HResult; stdcall;|64: function GetPalette(var phpal:HPalette): HResult; stdcall;|0:|26: // Rendering methods|69: function Draw(_hdc:HDC; var prcBounds:TRect): HResult; stdcall;|107: function Tile(_hdc:HDC; var pptBackOrg:TPoint; var prcClip:TRect; var psize:TSize): HResult; stdcall;|120: function StretchBlt(_hdc:HDC; dstX,dstY,dstXE,dstYE,srcX,srcY,srcXE,srcYE:integer; dwROP:DWORD): HResult; stdcall;|5: end;|0:|28: THiAsmClass = class(TDebug)|10: private|21: FImgCtx:IImgCtx;|17: hOK:THandle;|16: sg:boolean;|14: sz:TSize;|9: public|38: FileName,Bitmap,onLoad:THI_Event;|47: procedure doLoad(var Data:TData;idx:word);|47: procedure doDraw(var Data:TData;idx:word);|5: end;|0:|14:implementation|0:|5:const|31: IMGCHG_SIZE = $0001;|31: IMGCHG_VIEW = $0002;|31: IMGCHG_COMPLETE = $0004;|31: IMGCHG_ANIMATE = $0008;|31: IMGCHG_MASK = $000F;|0:|35: IMGLOAD_NOTLOADED = $00100000;|35: IMGLOAD_LOADING = $00200000;|35: IMGLOAD_STOPPED = $00400000;|35: IMGLOAD_ERROR = $00800000;|35: IMGLOAD_COMPLETE = $01000000;|35: IMGLOAD_MASK = $01F00000;|0:|35: IMGBITS_NONE = $02000000;|35: IMGBITS_PARTIAL = $04000000;|35: IMGBITS_TOTAL = $08000000;|35: IMGBITS_MASK = $0E000000;|0:|35: IMGANIM_ANIMATED = $10000000;|35: IMGANIM_MASK = $10000000;|0:|35: IMGTRANS_OPAQUE = $20000000;|35: IMGTRANS_MASK = $20000000;|0:|35: DWN_COLORMODE = $0000003F;|35: DWN_DOWNLOADONLY = $00000040;|35: DWN_FORCEDITHER = $00000080;|35: DWN_RAWIMAGE = $00000100;|0:|66: CLSID_IImgCtx:TGUID = '{3050f3d6-98b5-11cf-bb82-00aa00bdce0b}';|66: IID_IImgCtx:TGUID = '{3050f3d7-98b5-11cf-bb82-00aa00bdce0b}';|0:|0:|22:{ StringToWideString }|73:function StringToWideString(const s: String; codePage: Word): WideString;|17:var l: integer;|5:begin|16: Result := '';|23: if s = '' then exit;|80: l := MultiByteToWideChar(codePage, MB_PRECOMPOSED, PChar(@s[1]), -1, nil, 0);|28: SetLength(Result, l - 1);|23: if l <= 1 then exit;|93: MultiByteToWideChar(CodePage, MB_PRECOMPOSED, PChar(@s[1]), -1, PWideChar(@Result[1]), l);|4:end;|0:|63:procedure MyCallback(pCtx:pointer; pUserData:pointer); stdcall;|15:var stat:dword;|5:begin|39: with THiAsmClass(pUserData) do begin|14: sg := true;|37: FImgCtx.GetStateInfo(stat, sz, 0);|23: _hi_onEvent(onLoad);|6: end;|4:end;|0:|29:procedure THiAsmClass.doDraw;|54:var dt:TData; DC:hdc; R:TRect; Wnd:dword; bmp:PBitmap;|5:begin|23: if not sg then exit;|31: dt := ReadData(Data,Bitmap);|31: if _isBitmap(dt) then begin |26: bmp := ToBitmap(dt);|46: R := MakeRect(0,0,bmp.Width,bmp.Height);|40: FImgCtx.Draw(bmp.Canvas.Handle,R);|94: //FImgCtx.StretchBlt(bmp.Canvas.Handle,0,0,bmp.Width,bmp.Height,0,0,sz.cx,sz.cy,SRCCOPY)|18: end else begin |28: Wnd := ToInteger(dt); |28: if Wnd = 0 then exit; |29: DC := GetWindowDC(Wnd);|27: GetWindowRect(Wnd,R);|87: FImgCtx.StretchBlt(DC,0,0,R.right-R.Left,R.bottom-R.Top,0,0,sz.cx,sz.cy,SRCCOPY);|24: ReleaseDC(Wnd,DC);|10: end; |3: |4:end;|0:|29:procedure THiAsmClass.doLoad;|37:var s,s1:string; len:dword; fn:pchar;|5:begin|15: sg := false;|35: s1 := ReadString(Data,FileName);|43: len := GetFullPathName(@s1[1],0,nil,fn);|22: setlength(s,len-1);|43: GetFullPathName(@s1[1], len, @s[1], fn);|34: if not FileExists(s) then exit;|56: FImgCtx := CreateComObject(CLSID_IImgCtx) as IImgCtx;|52: FImgCtx.Load(PWChar(StringToWideString(s,3)), 0);|56: FImgCtx.SetCallback(@MyCallback, pointer(Self)); |46: FImgCtx.SelectChanges(IMGCHG_COMPLETE,0,1);|4:end;|0:|14:initialization|20: CoInitialize(nil);|12:finalization|17: CoUninitialize;|4:end.|
link(Bitmap,12516056:Bitmap,[])
}
Add(DoData,12423105,154,154)
{
Data=String(Int\logo.jpg)
link(onEventData,13555273:doLoad,[])
}
Add(PaintBox,10276675,224,98)
{
Width=392
Height=266
Align=5
}
Add(PaintBox,12516056,224,98)
{
Width=392
Height=266
Align=5
link(onBeforeDraw,13555273:doDraw,[(268,104)(268,142)(205,142)(205,167)])
}
карма: 9

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#71: 2008-01-25 18:43:45 ЛС | профиль | цитата
Galkov, ну ты ту и понаписал. Как на экзамене, сделать все так, как написано в задании Постараюсь разобраться, чего к чему.

Galkov писал(а):
Завести еще 2 верхние точки Point3 и Point4
Мало этих, надо пристенуть еще одну, RefRate, скорость обновления, пока не ясно, как делать этот метод, но делать его надо.

Galkov писал(а):
твоим любимым офигительным способом
Ну это -- жалкое поползновение сделать окно в окне.

Значит-то буду разбираться.
карма: 22

0
Ответов: 9906
Рейтинг: 351
#72: 2008-01-25 21:03:36 ЛС | профиль | цитата
Ну я как бы предполагал, что тебе понятно, отчего 14-й тип, или "размножение метода" пристегивают ТОЛЬКО ОДИН из кодов...
------------ Дoбавленo:

nesco писал(а):
надо пристенуть еще одну, RefRate, скорость обновления

Забота о тех, кто не хочет ничего делать, что ли
карма: 9

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#73: 2008-01-26 01:15:51 ЛС | профиль | цитата
Galkov писал(а):
Ну я как бы предполагал, что тебе понятно, отчего 14-й тип, или "размножение метода" пристегивают ТОЛЬКО ОДИН из кодов...

Ну крайнее удивление. К чему ты это? Я знаю как работает метод procedure() of object, в этом проблем нету. Вот это единственное, которое я понял до конца. Вот только с Tile-методом еще разбираться надо, но это -- мелочи.

По 4-ому пункту не совсем понятно, сделать как в самом первом варианте, так чтоли? Отдать выполнение callback'y и повиснуть на ожидании завершения всех действий?

Со 2-ым пунктум еще думать надо, как лучше оранизовать, а вот с 5-ым -- я специально хотел прицепить RefRate, для полной отработки Motion в компоненте до конца ленты спрайтов, после чего выставить событие об окончании ленты, а дальше на усмотрение пользователя -- продолжать крутить, или не продолжать.
С 1-ым полная ж.. -- я не понял ничего, из того, что написано. Зачем три типа Handl'ов? Что означает Draw0 и т.д, и зачем вообще бить Draw, когда в 3-ем и так их делим по типу масштабирования?


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


Galkov писал(а):
Это же - работает (любым макаром):
Ну я не знаю, как он у тебя работает, но у меня работать категорически отказывается. Специально запустил твой пример и начал с ним разбираться, думал файл не читается, а оказывается не работает с прямым присвоением bmp := ToBitmap(dt);, работает только with ToBitmap(dt)^ do

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


Galkov писал(а):
Если doDraw подключать к onLoad, то все работает. Есть тонкость, что onLoad сработает ТОЛЬКО после завершения всей алгоритмической ветки с doLoad, но это лучше в справке прописать как-то...
Нижние точки защитить этим же флагом
Мне кажется, что не прокатит с загрузкой последовательности картинок. Может, все же, так не делать, а подождать окончания загрузки. Кроме того, твой код не работает с Image, а только с PaintBox, а почему только PaintBox, а вот с ожиданием окончания загрузки в doLoad и тот, и другой работают

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


И еще, что я там зря поставил FImgCtx.Disconnect; -- прикол был, что при чтении с флэшки, не отсоединялся файл, и hotplug писал, что устройство в работе.
карма: 22

0
Ответов: 9906
Рейтинг: 351
#74: 2008-01-26 11:56:31 ЛС | профиль | цитата
nesco писал(а):
Ну я не знаю, как он у тебя работает, но у меня работать категорически отказывается

Значит, кончай заниматься фигней, и ищи у себя ошибки, баги, несоответствия
Это я не знаю, как оно у тебя не работает.

Какое нафиг создание элементов, если у тебя 2+2 - получается 5
Это вот, НИЧЕМ не отличается от 2+2=5
nesco писал(а):
оказывается не работает с прямым присвоением bmp := ToBitmap(dt);, работает только with ToBitmap(dt)^ do
Просил же - не пудри пожалуйста мозги....
Не выкладываю я схемы без проверки.

nesco писал(а):
Кроме того, твой код не работает с Image, а только с PaintBox

Опять: НЕ ПУДРИ МОЗГИ
И мой код, и любой другой -- работают не с элементом, а с данными на конкретной точке.
Например с TBitmap. Если он нулевого размера - ничего не нарисуется.

nesco писал(а):
Мне кажется, что не прокатит с загрузкой последовательности картинок

Если есть вопросы по схеме, излагать надо схему, а не "кажется"
nesco, меня серьезно утомляют попытки отгадывать чужие мысли
Как и 100-й раз сообщать об этом
Что, блин, мне еще надо сказать, чтобы доехало: не дело автора элемента решать схемные вопросы.
Просто потому, что как только автор элемента начал это делать, значит он считает пользователя тупее себя
А именно: "Пользователь никогда не сделает правильную постановку задачи, которую не предусмотрел Я, Великий Автор Элемента".
Это американский стиль, но не русский. С ними я спорить не буду, может у них слова "пользователь" и "тупой" -- синонимы, это их проблемы
А у нас, я и себя прежде всего Пользователем считаю.
И когда меня держат за тупого, воспринимаю как оскорбление. Имей ввиду, кстати говоря...

Есть СХЕМНЫЕ задачи где требуется ожидание, есть - где это излишество, вызывающее неприятные вопросы.
Этого достаточно, чтобы перенести разрешение этой альтернативы НА СХЕМУ.
И должны быть средства ожидания сигнала. Они есть: два элемента: Repeat + Application.doProcessMessages

Вот тебе пример задачи: Запускается новый поток (Thread) для выполнения какой-то важной задачи (очень большая схема, подключенная к Thred.onExec). И стоит следующая на очереди, и должна ждать сигнала окончания работы этого потока.
Этот сигнал - Thread.onSyncExec
Который НЕ ПРОИЗОЙДЕТ, пока не будет обработана очередь сообщений.
Все ТО ЖЕ САМОЕ, в общем.

Мое утверждение: наличие такой пакетной задачи -- не есть основание для "вставления" обработчика сообщений в элемент.
Хотя бы потому-что Пользователи, решившие использовать элементы не в пакетном режиме, ни в чем перед автором элемента не провинились
Это ОДИНАКОВО касается -- как элемента Thread, так и элемента ImageLoader


nesco писал(а):
С 1-ым полная ж.. -- я не понял ничего, из того, что написано

Учи матчась
В том же, не раз уже тобой, незлым тихим словом упомянутом, элементе Image св-во ViewStyle - 14-го типа
В элементе Img_Copy - метод doCopy является "размноженным"
Смотри коды элементов, результаты кодогенерации, наконец...
карма: 9

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#75: 2008-01-26 16:16:48 ЛС | профиль | цитата
Galkov писал(а):
Это я не знаю, как оно у тебя не работает
Молча, не работает и все, а значит может еще у кого-то работать не будет, не надо под себя копать, это не правильно, и упрощение -- не всегда лучше. И на кой черт это нужно, когда with ToBitmap(dt)^ do прекрасно работает.

Galkov писал(а):
меня серьезно утомляют попытки отгадывать чужие мысли
Точно так же, как иногда меня твои.

Предложение убрать ожидание завершения, я понял.

Тобой не внимательно прочитан вот этот вопрос
nesco писал(а):
Кроме того, твой код не работает с Image, а только с PaintBox

на что дан конкретный ответ

nesco писал(а):
а вот с ожиданием окончания загрузки в doLoad и тот, и другой работают

и причем здесь тогда вот это

Galkov писал(а):
И мой код, и любой другой -- работают не с элементом, а с данными на конкретной точке.
Например с TBitmap. Если он нулевого размера - ничего не нарисуется

Я прекрасно понимаю, с чем он работает. Вопрос стоял в том, что у PaintBox есть onPaint, а у Image его нет -- все, и больше ничего.

Galkov писал(а):
Мое утверждение: наличие такой пакетной задачи -- не есть основание для "вставления" обработчика сообщений в элемент

Ну да, а ввести дополнительное свойство в компонент для пакетной обработки никто не дает, проще, наверное, приципить к схеме кучу элементов для ожидания завершения обработки.



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


И я хочу, и хотел всегда, создавать для пользователей компоненты, который не усложняют ему задачу по пониманию "как оно работает", а максимально просто работает, и все, больше ничего.
Galkov, а ты никогда не задавался вопросом -- почему мои компоненты пользуются популярность. А я тебе отвечу -- потому, что при вложенном в них функционале, они максимально упрощают ему процесс конструирования, а не наоборот, усложняют и заставляют собирать схемы не из одного компонента, а из целой кучи, в котрой сами потом и путаются.
Я следую вот этому принципу, и буду следовать ему всегда

Dilma писал(а):
Очевидно, что с помощью HiAsm довольно легко и быстро пишутся(точнее рисуются) небольшие разовые программы и утилиты, не требующие особого упора на интерфейс и сложные математические алгоритмы. Кроме того Конструктор программ поможет каждому, кто не знает ни одного языка программирования, воплотить почти любую(в меру разумную) свою идею в жизнь без посторонней помощи с минимальными затратами времени и ресурсов.

карма: 22

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