Страница 1 из 1

Вызов функций внешней dll из випа

Добавлено: 20 июл 2010, 00:47
sensoft
Проверял в Express - работает и с атлантис 5.4.14 и без (свободный
fpc196).
http://sites.google.com/site/svobodnyef ... es/cube.7z
в архиве - вип исходник, его сборка user.res (атлантис 5.4.23) и dll (fpc196).

Re: Вызов функций внешней dll из випа

Добавлено: 20 июл 2010, 11:38
galover
Ну ты крут! Поставил плюсик. Понравилось! Не знал что так можно. Только вот описание скудное, к тому же собрано на старом Атлантисе (пришлось перекомпилировать). Для тем кому качать и компилить влом, приведу код (удивительно короткий), надеюсь автор не будет против

Код: Выделить всё

const
cmC000=3000;cmC001=3001;cmC002=3002;cmC003=3003;cmC004=3004;cmC005=3005;cmC006=3006;cmC007=3007;cmC008=3008;cmC009=3009;cmC010=3010;cmC011=3011;cmC012=3012;cmC013=3013;cmC014=3014;cmC015=3015;cmC016=3016;cmC017=3017;cmC018=3018;cmC019=3019;
cmC020=3020;cmC021=3021;cmC022=3022;cmC023=3023;cmC024=3024;cmC025=3025;cmC026=3026;cmC027=3027;cmC028=3028;cmC029=3029;cmC030=3030;cmC031=3031;cmC032=3032;cmC033=3033;cmC034=3034;cmC035=3035;cmC036=3036;cmC037=3037;cmC038=3038;cmC039=3039;
cmC040=3040;cmC041=3041;cmC042=3042;cmC043=3043;cmC044=3044;cmC045=3045;cmC046=3046;cmC047=3047;cmC048=3048;cmC049=3049;cmC050=3050;cmC051=3051;cmC052=3052;cmC053=3053;cmC054=3054;cmC055=3055;cmC056=3056;cmC057=3057;cmC058=3058;cmC059=3059;
cmC060=3060;cmC061=3061;cmC062=3062;cmC063=3063;cmC064=3064;cmC065=3065;cmC066=3066;cmC067=3067;cmC068=3068;cmC069=3069;cmC070=3070;cmC071=3071;cmC072=3072;cmC073=3073;cmC074=3074;cmC075=3075;cmC076=3076;cmC077=3077;cmC078=3078;cmC079=3079;
cmC080=3080;cmC081=3081;cmC082=3082;cmC083=3083;cmC084=3084;cmC085=3085;cmC086=3086;cmC087=3087;cmC088=3088;cmC089=3089;cmC090=3090;cmC091=3091;cmC092=3092;cmC093=3093;cmC094=3094;cmC095=3095;cmC096=3096;cmC097=3097;cmC098=3098;cmC099=3099;
cmC100=3100;cmC101=3101;cmC102=3102;cmC103=3103;cmC104=3104;cmC105=3105;cmC106=3106;cmC107=3107;cmC108=3108;cmC109=3109;cmC110=3110;cmC111=3111;cmC112=3112;cmC113=3113;cmC114=3114;cmC115=3115;cmC116=3116;cmC117=3117;cmC118=3118;cmC119=3119;
cmC120=3120;cmC121=3121;cmC122=3122;cmC123=3123;cmC124=3124;cmC125=3125;cmC126=3126;cmC127=3127;cmC128=3128;cmC129=3129;cmC130=3130;cmC131=3131;cmC132=3132;cmC133=3133;cmC134=3134;cmC135=3135;cmC136=3136;cmC137=3137;cmC138=3138;cmC139=3139;
cmC140=3140;cmC141=3141;cmC142=3142;cmC143=3143;cmC144=3144;cmC145=3145;cmC146=3146;cmC147=3147;cmC148=3148;cmC149=3149;cmC150=3150;cmC151=3151;cmC152=3152;cmC153=3153;cmC154=3154;cmC155=3155;cmC156=3156;cmC157=3157;cmC158=3158;cmC159=3159;
cmC160=3160;cmC161=3161;cmC162=3162;cmC163=3163;cmC164=3164;cmC165=3165;cmC166=3166;cmC167=3167;cmC168=3168;cmC169=3169;cmC170=3170;cmC171=3171;cmC172=3172;cmC173=3173;cmC174=3174;cmC175=3175;cmC176=3176;cmC177=3177;cmC178=3178;cmC179=3179;
cmC180=3180;cmC181=3181;cmC182=3182;cmC183=3183;cmC184=3184;cmC185=3185;cmC186=3186;cmC187=3187;cmC188=3188;cmC189=3189;cmC190=3190;cmC191=3191;cmC192=3192;cmC193=3193;cmC194=3194;cmC195=3195;cmC196=3196;cmC197=3197;cmC198=3198;cmC199=3199;
cmC200=3200;cmC201=3201;cmC202=3202;cmC203=3203;cmC204=3204;cmC205=3205;cmC206=3206;cmC207=3207;cmC208=3208;cmC209=3209;cmC210=3210;cmC211=3211;cmC212=3212;cmC213=3213;cmC214=3214;cmC215=3215;cmC216=3216;cmC217=3217;cmC218=3218;cmC219=3219;
cmC220=3220;cmC221=3221;cmC222=3222;cmC223=3223;cmC224=3224;cmC225=3225;cmC226=3226;cmC227=3227;cmC228=3228;cmC229=3229;cmC230=3230;cmC231=3231;cmC232=3232;cmC233=3233;cmC234=3234;cmC235=3235;cmC236=3236;cmC237=3237;cmC238=3238;cmC239=3239;
cmC240=3240;cmC241=3241;cmC242=3242;cmC243=3243;cmC244=3244;cmC245=3245;cmC246=3246;cmC247=3247;cmC248=3248;cmC249=3249;cmC250=3250;cmC251=3251;cmC252=3252;cmC253=3253;cmC254=3254;cmC255=3255;cmC256=3256;cmC257=3257;cmC258=3258;cmC259=3259;
cmC260=3260;cmC261=3261;cmC262=3262;cmC263=3263;cmC264=3264;cmC265=3265;cmC266=3266;cmC267=3267;cmC268=3268;cmC269=3269;cmC270=3270;cmC271=3271;cmC272=3272;cmC273=3273;cmC274=3274;cmC275=3275;cmC276=3276;cmC277=3277;cmC278=3278;cmC279=3279;
cmC280=3280;cmC281=3281;cmC282=3282;cmC283=3283;cmC284=3284;cmC285=3285;cmC286=3286;cmC287=3287;cmC288=3288;cmC289=3289;cmC290=3290;cmC291=3291;cmC292=3292;cmC293=3293;cmC294=3294;cmC295=3295;cmC296=3296;cmC297=3297;cmC298=3298;cmC299=3299;
cmQQQQ=3300;cmGame=3301;
cmBEST=3400;cmG001=3401;cmG002=3402;cmG003=3403;cmG004=3404;
end;

var
  o:byte;
  score1,score2:word;

function  TuneCube:byte;   external 'cube.dll';
procedure FindCube(o:byte);external 'cube.dll';
procedure NewCube(o:byte); external 'cube.dll';
procedure DrawCube(o:byte);external 'cube.dll';
procedure BackCube(o:byte);external 'cube.dll';
procedure DelCube(o:byte); external 'cube.dll';
procedure DoneCube(o:byte);external 'cube.dll';
procedure SetCube(o:byte,n:byte); external 'cube.dll';
procedure BestCube(o:byte);external 'cube.dll';

Interface Cube 'CUBES' ('Построй свой полигон :)',,scInterface) EscClose, Cyan;
Show at (0,0,104,32);

TabbedSheet SysTabCube;
Screen  scrCube1 ' Игра ';
Buttons
cmC000;cmC001;cmC002;cmC003;cmC004;cmC005;cmC006;cmC007;cmC008;cmC009;cmC010;cmC011;cmC012;cmC013;cmC014;cmC015;cmC016;cmC017;cmC018;cmC019;
cmC020;cmC021;cmC022;cmC023;cmC024;cmC025;cmC026;cmC027;cmC028;cmC029;cmC030;cmC031;cmC032;cmC033;cmC034;cmC035;cmC036;cmC037;cmC038;cmC039;
cmC040;cmC041;cmC042;cmC043;cmC044;cmC045;cmC046;cmC047;cmC048;cmC049;cmC050;cmC051;cmC052;cmC053;cmC054;cmC055;cmC056;cmC057;cmC058;cmC059;
cmC060;cmC061;cmC062;cmC063;cmC064;cmC065;cmC066;cmC067;cmC068;cmC069;cmC070;cmC071;cmC072;cmC073;cmC074;cmC075;cmC076;cmC077;cmC078;cmC079;
cmC080;cmC081;cmC082;cmC083;cmC084;cmC085;cmC086;cmC087;cmC088;cmC089;cmC090;cmC091;cmC092;cmC093;cmC094;cmC095;cmC096;cmC097;cmC098;cmC099;
cmC100;cmC101;cmC102;cmC103;cmC104;cmC105;cmC106;cmC107;cmC108;cmC109;cmC110;cmC111;cmC112;cmC113;cmC114;cmC115;cmC116;cmC117;cmC118;cmC119;
cmC120;cmC121;cmC122;cmC123;cmC124;cmC125;cmC126;cmC127;cmC128;cmC129;cmC130;cmC131;cmC132;cmC133;cmC134;cmC135;cmC136;cmC137;cmC138;cmC139;
cmC140;cmC141;cmC142;cmC143;cmC144;cmC145;cmC146;cmC147;cmC148;cmC149;cmC150;cmC151;cmC152;cmC153;cmC154;cmC155;cmC156;cmC157;cmC158;cmC159;
cmC160;cmC161;cmC162;cmC163;cmC164;cmC165;cmC166;cmC167;cmC168;cmC169;cmC170;cmC171;cmC172;cmC173;cmC174;cmC175;cmC176;cmC177;cmC178;cmC179;
cmC180;cmC181;cmC182;cmC183;cmC184;cmC185;cmC186;cmC187;cmC188;cmC189;cmC190;cmC191;cmC192;cmC193;cmC194;cmC195;cmC196;cmC197;cmC198;cmC199;
cmC200;cmC201;cmC202;cmC203;cmC204;cmC205;cmC206;cmC207;cmC208;cmC209;cmC210;cmC211;cmC212;cmC213;cmC214;cmC215;cmC216;cmC217;cmC218;cmC219;
cmC220;cmC221;cmC222;cmC223;cmC224;cmC225;cmC226;cmC227;cmC228;cmC229;cmC230;cmC231;cmC232;cmC233;cmC234;cmC235;cmC236;cmC237;cmC238;cmC239;
cmC240;cmC241;cmC242;cmC243;cmC244;cmC245;cmC246;cmC247;cmC248;cmC249;cmC250;cmC251;cmC252;cmC253;cmC254;cmC255;cmC256;cmC257;cmC258;cmC259;
cmC260;cmC261;cmC262;cmC263;cmC264;cmC265;cmC266;cmC267;cmC268;cmC269;cmC270;cmC271;cmC272;cmC273;cmC274;cmC275;cmC276;cmC277;cmC278;cmC279;
cmC280;cmC281;cmC282;cmC283;cmC284;cmC285;cmC286;cmC287;cmC288;cmC289;cmC290;cmC291;cmC292;cmC293;cmC294;cmC295;cmC296;cmC297;cmC298;cmC299;
<<
 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

 <.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.><.·.>

>>
end;
Screen  scrCube2 ' и... ';
Fields
  score1 : Protect;
  score2 : Protect;
Buttons
cmGame;
cmG001;cmG002;cmG003;cmG004;
<<
 Игра "галактический полигон" даёт шанс собрать неподетски большой результат, если в случайном нагромождении разглядеть
 тонкий ход фишки:). Первыми как всегда любители комбинировать детали в поисках целого.
 Коротко о правилах: полигоном назовём набор квадратов одного цвета со смежными сторонами и чем он крупнее, тем больше
 за него дают, примерно число квадратов в квадрате. Понятно, что строить и собирать полигоны можно пока есть квадраты.
 Поэтому максимум достигается на одном гигантском полигоне:).

 <.   Игра   .>                    Двойной клик или F7 новая раскраска
                                   Правый клик или F8 возврат раскраски предыдущего хода
                                   Левый клик или F3 очередной ход изменения раскраски удалением полигона

                                   Строка заголовка даёт текущий счёт, количества квадратов = синих, красных, зелёных,
                                   жёлтых и фиолетовых, = и количество квадратов / цену текущего полигона.


                  Выбор раскраски с лучшим результатом (премии за последние 3, 2, 1, 0 квадраты)
   1. счёт .@@@@@@                       2. счёт .@@@@@@
 <.·.>                                 <.·.>






 <.·.>                                 <.·.>

>>
end;
end;
HandleEvent
cmInit:   begin o:=TuneCube; if (o=0) PutCommand(cmClose) else PutCommand(cmQQQQ); end;
cmChangeTabbedSheetFormat: if (Target=scrCube1) PutCommand(cmGame) else PutCommand(cmBEST);
cmInsert: begin NewCube(o);  abort; exit; end;
cmDelete: begin BackCube(o); abort; exit; end;
cmPick:   begin DelCube(o);  abort; exit; end;
cmClose:  begin if (o<>0) DoneCube(o); end;
cmQQQQ:   begin NewCube(o);  end;
cmGame:   begin SetFormat(scrCube1); FindCube(o); DrawCube(o); end;
cmC000:   DelCube(o);cmC001:   DelCube(o);cmC002:   DelCube(o);cmC003:   DelCube(o);cmC004:   DelCube(o);cmC005:   DelCube(o);
//...
cmG001:   begin SetCube(o,1); SetFormat(scrCube1); FindCube(o); DrawCube(o); end;
cmG002:   begin SetCube(o,2); SetFormat(scrCube1); FindCube(o); DrawCube(o); end;
cmG003:   begin SetCube(o,1); SetFormat(scrCube1); FindCube(o); DrawCube(o); end;
cmG004:   begin SetCube(o,2); SetFormat(scrCube1); FindCube(o); DrawCube(o); end;
cmBEST:   begin BestCube(o); end;
end;
End.
Результат - игруха (бухи оценят )):
Изображение
Изображение
Ну тут скорее топик о другом, вызов функции dll сам по себе ничем не примечателен. Приведи если не жаль код cube.dll, расскажи как отрисовку сделал, как картинки вставил. Отрисовка ведь из библиотеки идет напрямую в Галактику, т.е. это не ActiveX контрол пользовательский. Как меняется заголовок окна интерфейса. Вот это самое интересное.

Re: Вызов функций внешней dll из випа

Добавлено: 20 июл 2010, 12:11
ilshat
Даешь LINES на випе!!!!

Re: Вызов функций внешней dll из випа

Добавлено: 20 июл 2010, 13:31
sensoft
http://sites.google.com/site/svobodnyef ... 0100517.7z
про толк в извращениях я в курсе:)

Re: Вызов функций внешней dll из випа

Добавлено: 21 июл 2010, 16:50
LaaLaa
Респект. Автор реально крут.

Re: Вызов функций внешней dll из випа

Добавлено: 21 июл 2010, 17:17
m0p3e
А был еще тетрис на випе от GalaxyFoe. :)

Re: Вызов функций внешней dll из випа

Добавлено: 21 июл 2010, 20:33
KATZ
sensoft
Впечатляет! Может, пора браться за задачи посерьезнее: редфокс анвипнуть или сервер АК отучить от АК? :smile:

Re: Вызов функций внешней dll из випа

Добавлено: 22 июл 2010, 10:47
galover
KATZ
+1. А еще vip отучить от лицензии, иногда нужно дома поработать

Re: Вызов функций внешней dll из випа

Добавлено: 22 июл 2010, 14:49
sensoft
KATZ
интеграция с внешним оборудованием - хорошая тема, но для АК уже есть решение:)

Re: Вызов функций внешней dll из випа

Добавлено: 22 июл 2010, 22:04
KATZ
sensoft писал(а):для АК уже есть решение
И не одно. Но в паблик они не вышли. Впрочем, данный форум - не самое подходящее место обсуждать такие вопросы. Я же не всерьез предлагал этим заняться, а только называл как пример реально сложной задачи, успешное решение которой - высший программистский пилотаж.

Re: Вызов функций внешней dll из випа

Добавлено: 15 окт 2010, 19:29
LaaLaa
Пример настолько понравился, что сделал для него ролик на YouTube
http://www.youtube.com/watch?v=0sLrlq6ti0g