Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-11-2008
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 22
gulder Va por buen camino
hola como andan maeyanes, Caro gracias por sus respuestas estan muy buenas y me uno a caro en la pregunta que le hace la cual es la siguientes

Mayanes una pregunta, si se le da un tamaño grande que pase el alto que tiene cada item, el texto se corta, ¿como se puede hacer para que el alto del item se adecue al tamaño de letra?.


saludos gulder-gan y gracias
Responder Con Cita
  #2  
Antiguo 24-11-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 26
maeyanes Va por buen camino
Hola...

Para eso es el valor csOwnerDrawVariable, junto con los eventos OnMeasureItem y OnDrawItem.

Con el evento OnMeasureItem estableces el alto del item en pixeles.

Un pequeño ejemplo:

Código Delphi [-]
procedure TForm1.ComboBox1MeasureItem(Control: TWinControl; Index:
  Integer; var Height: Integer);
begin
  Height := Control.Canvas.GetTextHeight(ComboBox1.Items[Index])
end;


Saludos...
Responder Con Cita
  #3  
Antiguo 24-11-2008
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 22
gulder Va por buen camino
Thumbs up

bueno maeyanes me salio un error me dice que canvas no esta declarada o algo asi saludoes men

Última edición por gulder fecha: 24-11-2008 a las 18:13:37.
Responder Con Cita
  #4  
Antiguo 24-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 24
Caro Va por buen camino
Cita:
Empezado por maeyanes Ver Mensaje
Para eso es el valor csOwnerDrawVariable, junto con los eventos OnMeasureItem y OnDrawItem.

Con el evento OnMeasureItem estableces el alto del item en pixeles.

Un pequeño ejemplo:

Código Delphi [-]

procedure TForm1.ComboBox1MeasureItem(Control: TWinControl; Index:
Integer; var Height: Integer);
begin
Height := Control.Canvas.GetTextHeight(ComboBox1.Items[Index])
end;


Saludos...
Hola Mayanes, gracias por responder, acabo de probar lo que dices, pero no me esta funcionando, primero, Control no tiene la propiedad Canvas y Canvas no tiene el GetTextHeigth pero si el TextHeigth, hice lo siguiente, en el evento OnMeasureItem:

Código Delphi [-]
procedure TForm1.ComboBox1MeasureItem(Control: TWinControl; Index: Integer;
  var Height: Integer);
begin
 if Index<>-1 then //Verificamos para que no nos de un ActionViolation
  Height := Canvas.TextHeight(ComboBox1.Items[Index]);
end;

pero nada, el TextHeigth me devuelve siempre el mismo alto para todos los items y es ese mismo alto que le asigna a Heigth, por si acaso también puse la propiedad Style con csOwnerDrawVariable, ¿me puedes decir en que me estoy equivocando?.

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 24-11-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 26
maeyanes Va por buen camino
Hola...

Bueno, ya que lo mencionas veo que cometí algunos errores...

La forma correcta sería:

Código Delphi [-]
procedure TForm1.ComboBox1MeasureItem(Control: TWinControl; Index: Integer;
  var Height: Integer);
begin
  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
end;


Saludos...
Responder Con Cita
  #6  
Antiguo 24-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 24
Caro Va por buen camino
Hola de nuevo Mayanes, sigue sin funcionarme, tampoco funciona definiendo el tamaño en el OnMeasureItem (esto con el canvas.font) como en tu ultimo ejemplo, solo aclarar que el OnMeasureItem se ejecuta antes que el OnDrawItem, sera que puedas probarlo con el ejemplo que puse arriba en mi primer mensaje. Otra cosita, lo que te devuelve esto Canvas.TextHeight(Items[Index]); es el alto del ComboBox y al final el alto del texto lo pone con el que esta en diseño, osea no cambia nada.

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
  #7  
Antiguo 24-11-2008
Avatar de gulder
gulder gulder is offline
Miembro
 
Registrado: abr 2005
Ubicación: colombia-sucre
Posts: 384
Poder: 22
gulder Va por buen camino
Thumbs up

maeyanes que pena con voz pero tampoco me funcio lo del ejemplo men saludes y gacias por estar pendiente del problema
Responder Con Cita
  #8  
Antiguo 24-11-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 26
maeyanes Va por buen camino
Hola...

Estuve checando con un pequeño programa de ejemplo y es cierto lo que comentas...

Del lado del evento OnMeasureItem, veo que el valor que devuelve lo usa el componente para establecer su alto y si lo desactivo no se dibujan bien los items.

Del lado del evento OnDrawItem, hay que tener en cuenta el valor del parámetro State para dibujar los diferentes estados.

Aquí los eventos que usé para las pruebas:

Código Delphi [-]
procedure TForm1.cbbFontsDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with TComboBox(Control) do
  begin
    if not (odComboBoxEdit in State) then
      Canvas.Font.Size := 15;
    Canvas.Font.Name := Items[Index];
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left, Rect.Top, Items[index]);
    Canvas.Font.Name := Font.Name;
    Canvas.Font.Size := Font.Size
  end
end;

procedure TForm1.cbbFontsMeasureItem(Control: TWinControl; Index: Integer;
  var Height: Integer);
var
  AHeight: Integer;
  Bitmap: TBitmap;

begin
  if Index < 0 then
    Exit;
  with TComboBox(Control) do
  begin
    Bitmap := TBitmap.Create;
    try
      Bitmap.Canvas.Font.Name := Items[Index];
      Bitmap.Canvas.Font.Size := 15;
      AHeight := Bitmap.Canvas.TextHeight(Items[Index])
    finally
      Bitmap.Free
    end;
  end;
  Height := AHeight
end;


Saludos...
Responder Con Cita
  #9  
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
Respuesta



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 17:19:49.


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