StdFont Class in AMS

Aquí puedes preguntar o compartir tus dudas y conocimientos acerca del programa
Haber si alguien me puede orientar en como manipular esta clase en Ams. Si la creo con Luacom el problema es que sólo puedo leer los valores de Size, Name, etc..pero a la hora de quere cambiar las propiedades (pj. Font.Name = "Arial") me tira error de "número inválido de argumentos". No solo eso, sino que también al querer asignar el objeto font como propiedad de otro objeto (active x que soporta en sus propiedad Font un StdFont object) pj. Objeto.Font = Font, también me tira error de "No se encuentra el miembro" ¬¬' .

Igual apenas comenzaré a probar con Memory plugin a ver si cambia, pero lo dudo mucho hahaha.
yo tampoco he podido nunca si te sirve de alivio... ni con luacom ni con memory....

:sorry: :sorry: :sorry:
Recuerda que muchas veces haces referencia a una estructura o a otro subcontrol por favor pegadme el typelib y le echo un vistazo, la cuention es que muchas veces debes crear un objeto con luacom simpolemente para definir las propiedades de esa fuente y mandar el resultado.

Solo podrias definir como "arial" si fuera un BSTR, pero supongo que pondra algo asi como ^FONT haciendo referencia al objeto font que estara en ese mismo typelib, o sino a alguna estructura que habria que rellenar
Ya te pego yo el tipeLib, se de que archivo en concreto habla , es este:
//Teebo Software Solutions BalloonTip 2.0 Demo
//Version: 1.1
tssBalloonTip2Demo;
GUID = {EF335C30-D831-446C-B94E-E1DC74A5968C};


Dispatch _BalloonTip;
GUID = {C64C7B90-07C5-48ED-84AD-14679A1C5D6E};
  function QueryInterface(riid: ^GUID; out ppvObj: ^^VOID); stdcall;
  function AddRef: UI4; stdcall;
  function Release: UI4; stdcall;
  function GetTypeInfoCount(out pctinfo: ^UINT); stdcall;
  function GetTypeInfo(itinfo: UINT; lcid: UI4; out pptinfo: ^^VOID); stdcall;
  function GetIDsOfNames(riid: ^GUID; rgszNames: ^^I1; cNames: UINT; lcid: UI4; out rgdispid: ^I4); stdcall;
  function Invoke(dispidMember: I4; riid: ^GUID; lcid: UI4; wFlags: UI2; pdispparams: ^DISPPARAMS; out pvarResult: ^Variant; out pexcepinfo: ^EXCEPINFO; out puArgErr: ^UINT); stdcall;
  property-get BackColor: OLE_COLOR; stdcall;
  property-put BackColor(: OLE_COLOR); stdcall;
  property-get ForeColor: OLE_COLOR; stdcall;
  property-put ForeColor(: OLE_COLOR); stdcall;
  property-get HoverTime: I4; stdcall;
  property-put HoverTime(: I4); stdcall;
  property-get PopupTime: I4; stdcall;
  property-put PopupTime(: I4); stdcall;
  property-get Centered: Bool; stdcall;
  property-put Centered(: Bool); stdcall;
  property-get Style: eToolTipStyle; stdcall;
  property-put Style(: eToolTipStyle); stdcall;
  property-get Icon: eToolTipIcon; stdcall;
  property-put Icon(: eToolTipIcon); stdcall;
  property-get RightToLeft: Bool; stdcall;
  property-put RightToLeft(: Bool); stdcall;
  property-get Text: BSTR; stdcall;
  property-put Text(: BSTR); stdcall;
  property-get Title: BSTR; stdcall;
  property-put Title(: BSTR); stdcall;
  property-get UseCustomFont: Bool; stdcall;
  property-put UseCustomFont(: Bool); stdcall;
  property-get Font: ^Font; stdcall;
  property-putref Font(out : ^^Font); stdcall;
  property-get ShowShadow: Bool; stdcall;
  property-put ShowShadow(: Bool); stdcall;
  property-get Transparency: I4; stdcall;
  property-put Transparency(: I4); stdcall;
  function MakeToolTipByHwnd(lHWnd: I4; sText: BSTR; out sTitleText: BSTR; out eStyle: eToolTipStyle; out eIcon: eToolTipIcon; out bCentered: Bool; out cForeColor: I4; out cBackColor: I4; out lHoverTime: I4; out lPopupTime: I4; out bR2L: Bool); stdcall;
  function MakeToolTip(out ownerControl: ^IDispatch; sText: BSTR; out sTitleText: BSTR; out eStyle: eToolTipStyle; out eIcon: eToolTipIcon; out bCentered: Bool; out cForeColor: I4; out cBackColor: I4; out lHoverTime: I4; out lPopupTime: I4; out bR2L: Bool); stdcall;
  function ShowBalloonTip(out xPos: ^I4; out yPos: ^I4; out bIsScreenCoords: ^Bool); stdcall;
  function HideBalloonTip; stdcall;

CoClass BalloonTip;
GUID = {1E6134AF-31D9-4E04-A479-42FB1661DC8C};

Alias BalloonTip___v0;
GUID = {2D31048B-F53B-488D-B617-CE763EA27C94};
  _BalloonTip

Enum eToolTipIcon;
GUID = {A0CF0F35-EA2B-42A0-B635-D8B9FE5146F5};
  //eIconNone
  eIconNone = 0;
  //eIconInfo
  eIconInfo = 1;
  //eIconWarning
  eIconWarning = 2;
  //eIconError
  eIconError = 3;

Enum eToolTipStyle;
GUID = {84CD6102-7046-44BB-9E9A-9DC44293B02F};
  //eStyleStandard
  eStyleStandard = 0;
  //eStyleBalloon
  eStyleBalloon = 64;
Creo recordar que esa mierda era una tabla y se definia asi

control1.Font.Name = "Times New Roman"
control1.Font.Size = 10
tabien existia control1.Font.Bold=true/false

asi se va definiendo secuencialmente el tema
Sip, así es...es tipo tabla. Pero puedo crear con luacom el stdfont y leer sus propiedades más no cambiarlas. y tampoco puedo asignar el stdfont object a la propiedad font del tssballoontooltip ( :demo: LOL, si como no jeje).
intenta esto

fuente={}
fuente.Name = "Times New Roman"
fuente.Size = 10

control.FONT=fuente
Nop, arroja "Type mismatch".
si puedes leer el formato, para escribirlo es igual

dejadme un ejemplillo y cuando tenga tiempo lo arreglo
Pabloko escribió:si puedes leer el formato, para escribirlo es igual

dejadme un ejemplillo y cuando tenga tiempo lo arreglo
Ejemplillo marchando...

Código: Seleccionar todo

http://www.multiupload.com/7ZZZGATSLQ
Bajando, mañana lo subo funcionando
He estado haciendo pruebas con la clase stdfont, y claro esta no existe en lua, he mirado un poco mas profundamente y veo algo un poco mas complicado, bien esto es lo primero que he probado.

He creado un activex usando visual basic 6, el typelib arroja esto

function SetFont(Font: BSTR; Bold: Bool): ^Font; stdcall;

Dim X As New stdfont

Public Function SetFont(ByVal Font As String, ByVal Bold As Boolean) As stdfont

X.Bold = Bold
X.Name = Font
'X.Italic = Italic
'X.Size = Size
'X.Underline = Underline

Set SetFont = X
End Function

Asi que simplemente creando el objeto project1.class1 que he construido deberia con esta funcion obtener el retorno en formato FONT y poder pasarlo a la propiedad, pero nada, no ha querido rular, la cuestion es que esto es extraño debido a que stdfont es un objeto tambien y debe poder pasarse como tal, entonces he decidido probar a usar el metodo comun en estos casos, stdf =luacom.CreateObject("StdFont") el objeto se crea pero a la hora de actuar nada de nada, mirando un poco y viendo el error creo que es un problema relativo a la conversion que hace luacom, por lo que voy a probar una cosa que subire mañana:

Voy a crear un control activex con vb6 con una funcion, esta funcion recibe el parametro ^object que se vincula hacia el objeto, luego, la lista de elementos del stdfont, asi todo el proceso de escibir el stdfont en el objeto lo hace el motor de vb6 simplemente recibiendo el puntero hacia el objeto

Hasta el momento no he usado objetos variables en activex pero bueno, no hay nada mejor para probar...
ok , Haber que tal, el stdfont este siempre se ha resistido ,;)
Bueno acabo de hacer la prueba y nada, y es muy raro porque es imposible que esto falle de la forma que lo hace, ya que ahora luacom no tiene que hacer casi nada, para que veais el typelib:

function SetFont(k: IDispatch; out Font: ^BSTR; Bold: Bool): Variant; stdcall;

Si os fijais el primer argumento es del tipo idispatch, el objeto luacom es este puntero idispatch asi que pasando el valor Object este debe de pasarse al control, aunque todavia no se porque no lo hace...

El codigo vb6 es:

Dim X As New StdFont
Dim k As Object

Public Function SetFont(ByVal k As Object, Font As String, ByVal Bold As Boolean)
X.Bold = Bold
X.Name = Font
k.Font = X
End Function


Mas sencillo imposible, lo que hago es crear el objeto: stdf =luacom.CreateObject("Font.std") --mi objeto
Y luego pasarle la trama: stdf:SetFont(Object,"Verdana",true) pero por lo visto no esta soportado aunque yo me he leido el codigo de luacom y se que si lo esta asi que vamos a tener que echarle un vistazo mas profundo haber que coño le pasa...

ps: os dejo el control por si quereis probar
http://s000.tinyupload.com/index.php?fi ... 57&gk=hyip
Bueno, después de sumergirme un poco en el tema sucede que esto:

1.- El StdFont creado con VB no se puede modificar con parámetros como fontObject.Name = "Arial" (siempre me dice que he colocado un número inválido de argumentos).

2.- La propiedad Font del tssBalloonTip por default no existe, así que por ello es propery-putrf (revisar el typelib). Es decir, la forma de declarase para luacom es: Object:setFont(fontObject).

3.- Si cambio las propiedades del fontObject mediante fontObject:setName("Arial") aparentemente si surte efecto (ya que al volver a leer las propiedades arroja los nuevos valores). Pero a la hora de mostrarse el Tooltip no aparece con dichas propiedades :cabreado:

Todo esto a conclusión de que en luacom hay 2 formas de definir propiedades.

a) Si el miembro existe entonces podemos usar algo como objecto.propiedad = valor
b) Si el miembro no existe entonces debemos usar algo como objecto:setpropiedad(valor)

Incluso trate de crear mi propia clase Font de la siguiente forma (pero a la hora de asignarla al objecto del tooltip arroja que el tipo no concuerda):
fFont = {};
fFont.__index = fFont;
function fFont.Create()
	local Font = {};
	setmetatable(Font, fFont);
	Font.Name = "Arial";
	Font.Size = 20;
	return Font;
end
function fFont:SetFont(name, size)
	self.Name = name;
	self.size = size;
end
Font = fFont.Create();
Font:SetFont("Arial", 14);
Bueno, le he dado un par de vueltas hace un rato, y he llegado a una conclusion:

El fallo es un problema de LuaCOM. Como se puede seguir, IDispatch::Invoke [1] con DISPATCH_PROPERTYPUT en tLuaCOM::call esta fallando con el error DISP_E_BADPARAMCOUNT. La razon es que DISPPARAMS [2] No esta siendo correctamente iniciado ya que ITypeComp::Bind en tLuaCOM::getFUNCDESC no esta devolviendo DESCKIND_FUNCDESC pero devuelve DESCKIND_VARDESC, que actualmente no esta soportado por luacom. no queda claro porque muchos tipos de "propiedades" que aparentemente son metodos (FUNCDESC's), mientras otros, como en StdFont aparecen como variables (VARDESC's), pero probablemente debamos modificar luacom para arreglar esto si queremos que funcione.
:hypno: :hypno: :hypno: :hypno: :hypno: :hypno:
Pues es una lastima porque stdFont se da en la mayoria de activex que trabajan o realizan cambios de fuente de texto ;)