Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Iconos y colores en controles fallan (https://www.clubdelphi.com/foros/showthread.php?t=92656)

aguml 20-12-2017 13:02:06

Iconos y colores en controles fallan
 
No se me ocurría un título más descriptivo que este pero en realidad lo que pasa es que, por ejemplo, si añado un TLabel a un form y le intento por ejemplo poner la propiedad Mouse=crLinkSelect me da una excepcion al arrancar el proceso y eso pasa con muchos mas cursores.
Lo mismo pasa con los colores del componente, muchos tienen el mismo comportamiento.
Al dar dicha excepcion para aqui:
Forms.hpp:
Código PHP:

/* TCustomForm.Create */ inline __fastcall virtual TForm(Classes::TComponentAOwner) : TCustomForm(AOwner) { } 

La verdad es que es una limitacion bastante grande y he tenido que poner el color y el puntero mas parecido a lo que quería poner y me gustaría saber como solucionarlo para poder elegir dicho puntero y el color que quiero de los listados de las propiedades del control.

ecfisa 20-12-2017 18:15:34

Hola.

crLinkSelect no es un identificador válido para la propiedad TControl->Cursor, es decir que no se puede asignar ese valor a la propiedad TLabel->Cursor.

¿ Estamos hablando del componente TLabel de VCL o es otro de terceros ?

Saludos :)

ecfisa 20-12-2017 18:59:12

Hola de nuevo.

Me quedé pensando si la pregunta se encaminaba por otro lado... Y el valor crLinkSelect, tampoco es válido para la propiedad Cursor de Screen, por ejemplo la asignación:
Código PHP:

  Screen->Cursor crLinkSelect

provocará el error de compilación: Undefined symbol 'crLinkSelect'

Saludos :)

aguml 20-12-2017 23:50:13

Es un TLabel de la VCL estandar. He creado una etiqueta la cual funciona como un link a una página y la idea es que al poner el puntero encima se comporte como un link y para ello se usa ese cursor. La verdad es que no entiendo como viene en el desplegable del cursor en la propiedades del TLabel y no es válido. Lo probé con el form y algunos componentes más y no era válido en ninguno. ¿La única solución sería descargarme el cursor y meterlo en los recursos para usarlo desde allí?

ecfisa 21-12-2017 00:18:45

Hola.

¿ Y no te sirve ajustar la propiedad Cursor de los Labels ?

Ejemplo:
Código PHP:

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  for(
int i 0ControlCounti++)
    if (
Controls[i]->ClassNameIs("TLabel"))
      ((
TLabel*)Controls[i])->Cursor crHandPoint;  // cursor mano


¿ O también deseabas cambiar el color de la fuente cuando pase el cursor por encima ?

Saludos :)

aguml 21-12-2017 00:36:21

Así lo tengo aunque ese cursor parece de Windows 95 y el crLinkSelect se ve más moderno.

ecfisa 21-12-2017 05:03:34

1 Archivos Adjunto(s)
Hola.

Otra opción es que te hagas tu cursor, hice uno retocando la imágen de una mano. Pude mantener la transparencia pero soy muy malo dibujando así que no esperes mucho.

Igual te adjunto los fuentes de la prueba por si te resulta útil.

aguml 21-12-2017 11:10:05

He estado liado con esto y tengo ya mi archivo de recursos con dos cursores, uno para todo y otro para el link. El del link va perfecto pero el que quiero que se muestre en todo lo demas no funciona y me muestra el que tengo por defecto. He probado varias cosas pero lo que tengo ahora mismo es esto:
En el .cpp:
Código PHP:

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    
//Pongo los cursores deseados para mi aplicacion
    
CursorOriginalDefault = ::GetCursor(); // Salvas tu cursor original
    
CursorOriginalLabelURL Screen->Cursors[crLink];
    
crOriginalLabelURL LabelURL->Cursor;

    ::
SetCursor(LoadCursor(HInstanceMAKEINTRESOURCE(crDefault))); // Siendo MI_CURSOR el ID del cursor en cursores.res
    
Screen->Cursors[crDefault] = LoadCursor(HInstance"ARROW");
    
Screen->Cursors[crLink] = LoadCursor(HInstance"LINK");
    
LabelURL->Cursor = (TCursor)crLink;
    ...
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *SenderTCloseAction &Action)
{
    ::
SetCursor(CursorOriginalDefault); // Restauras tu antiguo cursor
    
Screen->Cursors[crLink] = CursorOriginalLabelURL// Restauras tu antiguo cursor
    
LabelURL->Cursor crOriginalLabelURL;


En el .h:
Código PHP:

...
private:    
// User declarations
    //Necesarios para restaurar los cursores por defecto
    
enum{crDefaultcrLink};
    
TCursor crOriginalLabelURL;
    
HCURSOR CursorOriginalDefault;
    
HCURSOR CursorOriginalLabelURL;
    ... 

Espero puedas ayudarme y de paso quitar todo lo que sobre que estoy dando palos de ciego :o

aguml 21-12-2017 12:08:16

Asi funciona el cursor para todo el form pero no me funciona el del TLabel:
Código PHP:

//Pongo los cursores deseados para mi aplicacion
    
CursorOriginalDefault = ::GetCursor(); // Salvas tu cursor original
    
CursorOriginalLabelURL Screen->Cursors[CUR_LINK];
    
crOriginalLabelURL LabelURL->Cursor;
    
Screen->Cursors[CUR_DEFAULT] = LoadCursor(HInstance"ARROW");
    
Screen->Cursor = (TCursor)CUR_DEFAULT;
    
Screen->Cursors[CUR_LINK] = LoadCursor(HInstance"LINK");
    
LabelURL->Cursor = (TCursor)CUR_LINK

Ya no se que mas probar.
Por otro lado veo que para los scrolls de los TListBox me sigue mostrando el cursor por defecto en vez del mio y en los PopupMenus igual ¿como hago para que muestre el mio?

aguml 21-12-2017 12:41:54

Pasa lo mismo con los bordes de los TListBox y los TCheckListBox.
Me quedo a la espera por si podeis ayudarme porque por la red no veo nada que me ayude. ;)


La franja horaria es GMT +2. Ahora son las 20:41:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi