Ultimamente mi sono accorto che molti fanno domande sulle icone + gm.
Per ovviare al problemino delle icone ho fatto una dll che potrete usare per convertire immagini bmp in icone.
Avrei potuto fare un programmino ma ho pensato ad una dll cosi che l'utente possa creare icone anche durante il suo
gioco, fatene buon uso
funzione:
Prima di tutto richiamare lo script
API_Init(), successivamente:
ImageToIcon("bmp fname", "output fname"
)
(Nell'archivio è presente anche un esempio .gmk e una immagine .bmp da usare come prova)
edit: Ero quasi sicuro che accettasse solo bitmap, ma avendo dimensionato una variabile come system.drawing.bitmap
probabilmente vb converte anche una immagine non bitmap che gli viene assegnata.
Fatto sta che ho provato anche nuovi formati e funziona (gif,jpg,png) ma probabilmente fa altrettanto anche con altri formati che non ho provato.
Per chi non avesse gm7 ecco gli script da mettere:
Funzioni Layer(per caricare una dll dotnet in gm)
Spoiler
layer_init
Codice: Seleziona tutto
var dll;
dll = 'gmdll.dll';
global.layerinit = external_define(dll,'Init',dll_cdecl,ty_real,1,ty_real);
global.layerdll = external_define(dll,'DLLVer',dll_cdecl,ty_string,0);
global.layerasetr = external_define(dll,'SetArgumentReal',dll_cdecl,ty_real,1,ty_real);
global.layerasets = external_define(dll,'SetArgumentString',dll_cdecl,ty_real,1,ty_string);
global.layeraclear = external_define(dll,'ClearArguments',dll_cdecl,ty_real,0);
global.layerfuncr = external_define(dll,'FuncReal',dll_cdecl,ty_real,2,ty_real,ty_string);
global.layerfuncs = external_define(dll,'FuncString',dll_cdecl,ty_string,2,ty_real,ty_string);
global.layerldll = external_define(dll,'LoadDll',dll_cdecl,ty_real,1,ty_string);
global.layerlast = external_define(dll,'LastError',dll_cdecl,ty_string,0);
global.layercreate = external_define(dll,'CreateInstance',dll_cdecl,ty_real,2,ty_real,ty_string);
if (external_call(global.layerdll) != "1.0 BETA")
{
show_error("LAYER VERSION MISMATCH!",true);
}
if (!external_call(global.layerinit,1))
{
show_error("LAYER INIT FAILED!",true);
}
layer_loaddll
Codice: Seleziona tutto
// argument0: filename
// returns: dll_handle
return external_call(global.layerldll,argument0);
layer_function
Codice: Seleziona tutto
//argument0: instance_handle
//argument1: function_name
//argument2: returntype (ty_real / ty_string)
//argument3: argumentcount (max 8!)
//argument4-11: arguments
var i, r;
external_call(global.layeraclear);
for (i = 0; i < argument3; i+=1)
{
if (is_string(argument[i+4]))
{
external_call(global.layerasets,argument[i+4]);
}
else
{
external_call(global.layerasetr,argument[i+4]);
}
}
if (argument2 == ty_string)
{
r = external_call(global.layerfuncs,argument0,argument1);
}
else
{
r = external_call(global.layerfuncr,argument0,argument1);
}
external_call(global.layeraclear);
return r;
layer_createinstance
Codice: Seleziona tutto
//argument0: dll_handle
//argument1: class name
//argument2: argumentcount (max 8!)
//argument3-10: arguments
//returns: instance_handle
var i, r;
external_call(global.layeraclear);
for (i = 0; i < argument2; i+=1)
{
if (is_string(argument[i+3]))
{
external_call(global.layerasets,argument[i+3]);
}
else
{
external_call(global.layerasetr,argument[i+3]);
}
}
r = external_call(global.layercreate,argument0,argument1);
external_call(global.layeraclear);
return r;
Script della mia dll
Spoiler
API_Init
Codice: Seleziona tutto
layer_init();
dll = layer_loaddll("Slascio bmp-ico.dll");
global.Class1 = layer_createinstance(dll,"ClassLibrary1.Class1",0)
ImageToIcon
Codice: Seleziona tutto
layer_function(global.Class1,"Convert_BitmapToIcon",ty_real,2,argument0,argument1)
eppure mi sembra tutto giusto...