| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Jue 24 Abr, 2025 12:06 am Asunto: listview: como poner "los botones" |
|
|
Hola
Llevo muchos años sin programar nada. He tenido la necesidad de hacerme una pequeña aplicación para uso personal, pero me he encontrado con un problema en el que llevo varios días y no puedo con él.
Necesito un listview con "botones" en las columnas (necesito la de arriba. Como no sé subir imágenes, paso enlace de la imagen en mi drive)
https://drive.google.com/file/d/19XGa8Zhu9huB8lm3pZhuvy2UihgYj1lb/view?usp=sharing
Haciendo pruebas, veo que creando un form (file->new->Form - C++Builder), y pasando el listview a vsReport aparecen ya los "botones". Pero si creo un VCL Forms Application y añades el listview con vsReport, los botones no salen. Ni haciendo copia/pega del objeto. Uso Rad Studio 2007 sobre win10.
Lo que necesito es una aplicación, ya que tengo que adjuntar varios forms con funciones ya hechas, y no consigo hacer que aparezcan los dichosos botones. Será la edad. Y seguro que es una tontería.
Saludos y gracias. |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Jue 24 Abr, 2025 10:15 pm Asunto: |
|
|
Tienes que elegir el estilo vsReport y luego ir a "Colums" y añadir alguna columna asignándole un Caption.
Te subo un vídeo de ejemplo:
Saludos. |
|
| Volver arriba |
|
 |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Vie 25 Abr, 2025 7:22 am Asunto: |
|
|
Gracias Escafandra.
Yo lo que quiero es que me aparezcan tipo "botones"
https://drive.google.com/file/d/1aFSxYWkTR2fo4jdkHDKg5G0TtJFijzNr/view?usp=sharing
Ahora me salen como los tuyos, en blanco. Yo quiero que aparezcan los "botones". Si creas un form nuevo, si lo hace. En creando una aplicación VCL salen como los tuyos
Gracias y Saludos
PD: sigo sin saber como subir imágenes: en vista preliminar, con img pongo enlace a mi drive y no sale nada, con url al menos sale el enlace
[img]https://drive.google.com/file/d/1aFSxYWkTR2fo4jdkHDKg5G0TtJFijzNr/view?usp=sharing[/img] |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Vie 25 Abr, 2025 5:42 pm Asunto: |
|
|
Hola, si te refieres a quitar la estética "moderna", ya que aunque no luzcan como botones ya lo son y aceptan pulsaciones. Prueba con lo siguiente en el constructor del Form que contenga el ListView:
| Código: | // Quitamos el tema "moderno" a la cabecera del ListView
HWND h = ListView_GetHeader(ListView1->Handle);
SetWindowTheme(h, L"", L"");
// Opcionalmente se lo quitamos también al resto del ListView
//SetWindowTheme(ListView1->Handle, L"", L"");
// Desactivamos opcionalmente el doble click en la cabecera
//SetClassLongPtr(h, GCL_STYLE, GetClassLongPtr(h, GCL_STYLE) & ~CS_DBLCLKS); |
|
|
| Volver arriba |
|
 |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Sab 26 Abr, 2025 8:17 am Asunto: |
|
|
Gracias _Leo.
Lo he probado y no compila. Me salta error | Código: | [C++ Error] E2268 Call to undefined function 'SetWindowTheme' |
Mirando por inet, he visto que faltaba el #include "uxtheme.h". Entonces salta el error | Código: | [Linker Error] Unresolved external 'SetWindowTheme' referenced from D:\APLI.OBJ |
He seguido buscando y no he encontrado la solución. Te recuerdo que uso Rad Studio 2007 sobre windows 10. Seguiré buscando.
Gracias y saludos |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Sab 26 Abr, 2025 1:59 pm Asunto: |
|
|
A veces es difícil recordar a partir de que versión se cambió algo. Lo he probado en la versión 2007 y añadiendo la siguiente cabecera y librería me funciona:
| Código: | #include <uxtheme.h>
#pragma comment (lib, "UxTheme.lib") |
|
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Sab 26 Abr, 2025 3:18 pm Asunto: |
|
|
Puedes Eliminar el XPManifest del proyecto o importar SetWindowTheme de forma dinámica de esta forma:
| Código: | typedef HRESULT (__stdcall *PSetWindowTheme) (HWND, LPCWSTR, LPCWSTR);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
PSetWindowTheme _SetWindowTheme;
_SetWindowTheme = (PSetWindowTheme)GetProcAddress(GetModuleHandle("UxTheme.dll"), "SetWindowTheme");
HWND h = ListView_GetHeader(ListView1->Handle);
_SetWindowTheme(h, L"", L"");
}
//---------------------------------------------------------------------------
|
Te muestro el resultado importando la función SetWindowTheme en BCB5 con XP Manifest.
Saludos.
Ultima edición por escafandra el Jue 01 May, 2025 10:14 pm, editado 1 vez |
|
| Volver arriba |
|
 |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Sab 26 Abr, 2025 6:21 pm Asunto: |
|
|
bufff, qué fieras sois.
No sé cómo agradeceros la molestia.
Millones de gracias. Saludos |
|
| Volver arriba |
|
 |
|