Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Me parece que estáis mezclando el canvas del form con el del combo y por eso no os sale igual.

Edito: ahh, ya veo, el error estaba en que en MesureItem le daba un tamaño de fuente de 12 y después al pintar de 15, por eso se mezclaban unos encima de otros.

Por otro lado, cuidadín con el uso de :
Código Delphi [-]
  with TComboBox(Control) do
  begin
    Canvas.Font.Name := Items[Index]; // Obtenemos el nombre de la fuente del mismo ComboBox
    Canvas.Font.Size := 10; // Establecemos el tamaño
    Height := Canvas.TextHeight(Items[Index]) // Ahora si obtenemos la altura correcta
  end

Porque ahí "Height" se refiere al Tcombobox, precisamente por el uso del with Tcombbox(control), cuando en realidad nosotros queremos el nombre del parámetro del evento... ofú lo que me ha salido...

Aquí algo más simple, tiene algún fallito de pintado, pero no me he puesto a ver el brush, el pen que se usa ni el estado del elemento.

yo le he llamado al combo "cbb" a secas.
Código Delphi [-]
procedure TForm1.cbbDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
    cbb.Canvas.Font.Name := cbb.Items[Index];
    cbb.Canvas.Font.Size:= 15;
    cbb.Canvas.TextOut(Rect.Left, Rect.Top, cbb.Items[index]);
end;

procedure TForm1.cbbMeasureItem(Control: TWinControl; Index: Integer;
  var Height: Integer);

begin
  if Index < 0 then Exit;
  cbb.Canvas.Font.Name:= cbb.items[index];
  cbb.Canvas.Font.Size:= 15;
  Height := cbb.Canvas.TextHeight(cbb.items[index]);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    cbb.Items.Assign(Screen.Fonts);
end;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 24-11-2008 a las 22:58:19.
Responder Con Cita
  #2  
Antiguo 26-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 25
Caro Va por buen camino
Hola de nuevo, perdon no había visto sus respuestas, muchas gracias por responder Mayanes y Lepe, si funciona, el error que estaba cometiendo era que mis items del ListBox estan cargados desde diseño y de esa forma no se asignan bien los tamaños, si se carga en ejecución los items funciona perfecto. Aplicando al ejemplito de mi primer mensaje y haciendo algunas modificaciones según lo que he visto en sus codigos quedaría así:

Código Delphi [-]
procedure TForm1.ListBox1MeasureItem(Control: TWinControl; Index: Integer;
  var Height: Integer);
begin
 if ListBox1.items.Count>0 then
  begin
   if (Index=1) or (Index=4) then
    ListBox1.Canvas.Font.Size := 10
   else
    ListBox1.Canvas.Font.Size := 20;
 
   Height := ListBox1.Canvas.TextHeight(ListBox1.items[index]);
  end;
end;
 
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
 if ListBox1.items.Count>0 then
  begin
   if (Index=1) or (Index=4) then
    begin
     ListBox1.Canvas.Font.Name := 'verdana';
     ListBox1.Canvas.Font.Size := 10;
    end
   else
    begin
     ListBox1.Canvas.Font.Name := 'vivian';
     ListBox1.Canvas.Font.Size := 20;
    end;
   ListBox1.Canvas.FillRect(Rect);
   ListBox1.Canvas.TextOut(Rect.Left, Rect.Top, ListBox1.Items[index]);
  end;
end;

Como dije, si se cargan los items en ejecución funciona bien, pero si ya estan cargados los items en dideño, no funciona se sigue cortando el texto, aunque se ejecute dichos eventos. Ahora si hago esto

Código Delphi [-]
 //Enviamos el mensaje de repintar al ListBox
 ListBox1.Perform(WM_Paint, ListBox1.Canvas.Handle, 0);

Si se ve correctamente, pero cuando se selecciona un item sigue con el tamaño del principio y se sobrepone todo.

Pueden hacer la prueba por favor y como sería para solucionar que se de la altura correcta aunque ya este en diseño.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 26-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Pues la cosa está bien dificil.

El listbox tiene la propiedad ItemHeight y debe estar establecida al máximo alto posible.

Otra parte del fallo de repintado es mío que según veo lo has corregido:
Código Delphi [-]
ListBox1.Canvas.TextRect(Rect, Rect.Left, Rect.Top, ListBox1.Items[index]);

Pero claro, debes conocer de antemano cuan grande será los elementos y cual será el mayor

A ver si te sirve, si no, la cosa iría por dibujar tú encima siempre... y no sé que tal se verá .
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 27-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 25
Caro Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje
Pues la cosa está bien dificil.

El listbox tiene la propiedad ItemHeight y debe estar establecida al máximo alto posible.

..........

Pero claro, debes conocer de antemano cuan grande será los elementos y cual será el mayor

A ver si te sirve, si no, la cosa iría por dibujar tú encima siempre... y no sé que tal se verá .
Hola Lepe, muchas gracias de nuevo por responder, pero si esta dificil, hice mas pruebas pero nada y repintando no se ve bien, creo que lo mejor es que cargue los items en ejecución y listo, así me olvido de repintar y todo eso.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 27-11-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
El problema se debe -al parecer- a que la medida de los ítems se toma una sóla vez y no cada vez que se dibujan, de forma que, si se cargan en diseño, se toma la medida tal como se tiene al momento de cargar el formulario, que vendría siendo el tamaño de la fuente asignada al ListBox.

Una solución, no muy elegante, por cierto, es forzar el recreado del control; por ejemplo, en el OnCreate del formulario:

Código Delphi [-]
type
  THack = class(TListBox);

procedure TForm1.FormCreate(Sender: TObject);
begin
  THack(ListBox1).RecreateWnd;
end;

// Saludos
Responder Con Cita
  #6  
Antiguo 28-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 25
Caro Va por buen camino
Cita:
Empezado por roman Ver Mensaje
El problema se debe -al parecer- a que la medida de los ítems se toma una sóla vez y no cada vez que se dibujan, de forma que, si se cargan en diseño, se toma la medida tal como se tiene al momento de cargar el formulario, que vendría siendo el tamaño de la fuente asignada al ListBox.

Una solución, no muy elegante, por cierto, es forzar el recreado del control; por ejemplo, en el OnCreate del formulario:
Hola Roman, aunque no sea muy elegante pero si funciona, muchas gracias.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cómo colocar el resultado de una consulta en un ComboBox??? gusanita Varios 8 16-05-2008 00:58:50
colocar tablas bd en un combobox vivamotos C++ Builder 3 07-09-2006 14:35:17
Imprir en una matricial con tamaños diferentes de letra asegurpe Impresión 3 17-04-2004 15:29:50
Tipo Letra en Excel bbjb Servers 0 04-07-2003 13:33:06


La franja horaria es GMT +2. Ahora son las 11:01:36.


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