Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-03-2013
teecweb teecweb is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 64
Poder: 12
teecweb Va por buen camino
Tachar una palabra en delphi

Holas tengo un checkboxlist ..quisiera que cada vez que selecciono un item y presiono un boton ...ese item se tachara es decir que salga una linea al medio de el item..gracias por sus respuestas...
Responder Con Cita
  #2  
Antiguo 15-03-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Seguramente lo más fácil es derivar el componente estandard para modificar el comportamiento del Paint.
Si miras el componente TCheckListBox, verás que hay el siguiente método:

Código Delphi [-]
  procedure DrawItem(Index: Integer; Rect: TRect;   State: TOwnerDrawState); override;

Que tiene muy buena pinta de servir para lo que necesitas.

Una prueba rápida... Si derivamos el componente y simplemente añadimos estas líneas veremos que el comportamiento se acerca bastante a lo que necesitas:

Código Delphi [-]
procedure tchecklistBox1.DrawItem(Index: Integer; Rect: TRect;
                                  State: TOwnerDrawState);
begin
  inherited;
  if Self.Checked[Index] then begin
    Self.Canvas.MoveTo(Rect.Left, Rect.Top + 5);
    Self.Canvas.LineTo(Rect.Right, Rect.Top + 5);
  end;
end;

Se ve algo como esto. Falta pulirlo, pero creo que por ahí puedes conseguir lo que necesitas...



Un saludo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 15-03-2013
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Aunque la forma sugerida por Neftalí es valida, tengo otra alternativa.

Primero, establece la propiedad Style del CheckListBox a lbOwnerDrawFixed. Luego en el evento OnDrawItem utilizá un código similar a este:

Código Delphi [-]
procedure TForm2.CheckListBox1DrawItem(Control: TWinControl;
                                       Index: Integer;
                                       Rect: TRect; State: TOwnerDrawState);
var
    DrawingRect: TRect;
    DrawText: String;
begin
    DrawingRect := Rect;
    DrawText := TCheckListBox(Control).Items[Index];

    with TCheckListBox(Control).Canvas do
    begin
        if Index = 0 then // Condición para pintar elementos tachados
        begin
            Font.Style := [fsStrikeOut];
        end;

        FillRect(Rect);
        Inc(DrawingRect.Left, 3); // dejar 3px de margen entre el texto y el Checkbox
        TextRect(DrawingRect, DrawText);
    end;
end;

El código anterior tachará el texto del primer elemento de la lista.

Saludos.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #4  
Antiguo 15-03-2013
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

También puedes usar la propiedad Style con el valor fsStrikeOut de la clase TFont y el evento OnDrawItem:

Código Delphi [-]
procedure TForm1.CheckListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState
var
  ItemStz: array [0..255] of Char;

begin
  with CheckListBox1.Canvas do
  begin
    Font.Assign(Self.Font);
    Brush.Color := CheckListBox1.Color;
    if CheckListBox1.Checked[Index] then
      Font.Style := [fsStrikeOut]
    else
      Font.Style := [];
    StrPCopy(ItemStz, CheckListBox1.Items[Index]);
    DrawText(Handle, ItemStz, -1, Rect, DT_WORDBREAK or DT_EXPANDTABS)
  end
end;



Tienes que poner la propiedad Style del componente en lbOwnerDrawFixed. También, como comenta Neftalí, hay que pulir algunas cosas.


Saludos...

P.D. Vaya, tuve la misma idea que Chris...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter

Última edición por maeyanes fecha: 15-03-2013 a las 17:52:19.
Responder Con Cita
  #5  
Antiguo 15-03-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Chris Ver Mensaje
Aunque la forma sugerida por Neftalí es valida, tengo otra alternativa.
Buena.
En este caso te evitas derivar el componente.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 15-03-2013
teecweb teecweb is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 64
Poder: 12
teecweb Va por buen camino
Talking

Holas..gracias por sus respuestas tamebin en innosetup se utiliza el fsStrikeOut como seria con un checkboxlist cada vez que chekea y despues presiona el boton para que aparezca el tachado..gracias por sus respuestas
Responder Con Cita
  #7  
Antiguo 15-03-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Aunque no es muy diferente a los códigos anteriores (generalmente es así ), otra variante:
Código Delphi [-]
procedure TForm1.CheckListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
  with Control as TCheckListBox do
  begin
    if Checked[Index] then
      Canvas.Font.Style:= [fsStrikeOut];
    FillRect(Canvas.Handle, Rect, Handle);
    DrawText(Canvas.Handle, PChar(Items[Index]), -1, Rect, DT_SINGLELINE);
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 15-03-2013
teecweb teecweb is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 64
Poder: 12
teecweb Va por buen camino
Holas ..gracis por su respuesta
asi agregue el codigo para el innosetup
Código Delphi [-]
//como ya recibo el inidice del checkbox chekeado que es i  y otra vez pregunto si esta chekeado...al compilarlo me sale que no reconoce canvas..gracias por tu respuesta
procedure checkboxlistDibujo(var i: integer);
begin
    if CheckListBox1.Checked[i] then
     Canvas.Font.Style:= [fsStrikeOut];
  end;
end;
Responder Con Cita
  #9  
Antiguo 15-03-2013
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Deberías indicar desde un principio que estás usando Pascal Script en InnoSetup, y esto es por que en Pascal Script no se tienen todas las características del lenguaje Delphi. Como por ejemplo, el acceso a la propiedad Canvas de las clases visuales integradas.

Explica un poco mejor que es lo que estás tratando de lograr desde tu instalador y tal vez se te pueda dar mejores soluciones.



Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #10  
Antiguo 15-03-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Agregando algo a lo que te explica maeyanes (que no es lo mismo Delphi que Pascal Script), aquí: Pascal Scripting: Support Classes Reference, encontrarás los detalles de las clases soportadas.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 15-03-2013
teecweb teecweb is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 64
Poder: 12
teecweb Va por buen camino
Disculpa por no haberme explicado mejor..el codigo esta en innosetup
tengo una lista de cheboxlist y con un boton cada vez que que chekeo y hago click en el boton se tacha el item del checkboxlist ...aki tengo un codigo donde ya recibo el indice que chekeo.. en esta funcion el inidce es el i..el problema que cuando compilo me sale ke no reconoce canvas.

//como ya recibo el inidice del checkbox chekeado que es i y otra vez pregunto si esta chekeado...al compilarlo me sale que no reconoce canvas..gracias por tu respuesta..
Código Delphi [-]
procedure checkboxlistDibujo(var i: integer);
begin
    if CheckListBox1.Checked[i] then
     Canvas.Font.Style:= [fsStrikeOut];
  end;
end;
Responder Con Cita
  #12  
Antiguo 15-03-2013
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

No estoy seguro de que esto funcione, pero podrías intentar algo así:

Código Delphi [-]
procedure StrokeOutItem(I: Integer);
begin
  if CheckListBox1.Checked[i] then
    with CheckListBox1.ItemObject[i] as TCheckBox do
      Font.Style := [fsStrikeOut]
end;


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #13  
Antiguo 16-03-2013
teecweb teecweb is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 64
Poder: 12
teecweb Va por buen camino
Holas..me sale error :

Código Delphi [-]
'DO' expected.
Responder Con Cita
  #14  
Antiguo 17-03-2013
teecweb teecweb is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 64
Poder: 12
teecweb Va por buen camino
Holas en intentado de esta manera :
pero sale que no se puede llamar a ese procedimiento..gracias por sus respuesta
Código Delphi [-]
procedure checkboxlistDibujo(var i: integer);


begin
 with CheckListBox1.ItemObject[i] do
    begin
      tcheckbox(CheckListBox1.ItemObject[i]).Font.Style := [fsStrikeOut]
      end;
   
end;
Responder Con Cita
  #15  
Antiguo 19-03-2013
teecweb teecweb is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 64
Poder: 12
teecweb Va por buen camino
Tachar un item del checkboxlist en inno setup

Holas tengo un checboxlist creado de forma dinamica y un boton ....al chekear el checkbolist y el presionar el boton me deberia aparecer tachado el check ckekeado segun los compañeros de este foro es con este codigo de abajo y esta bien si funciona si tacha..pero yo quiero solo items especificos del check..esdecir no se como recuperar el indice del checbokslist para que tache ese item seleccionado..gracias por respuestas...
Código Delphi [-]
.Font.Style := [fsStrikeOut]
Responder Con Cita
  #16  
Antiguo 19-03-2013
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Ya tienes un hilo abierto (Tachar una palabra en delphi) donde se te está respondiendo al respecto.

No creo que sea buena idea que abras otro hilo para tratar sobre el mismo tema.



Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #17  
Antiguo 19-03-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por maeyanes Ver Mensaje
Hola...

Ya tienes un hilo abierto (Tachar una palabra en delphi) donde se te está respondiendo al respecto.

No creo que sea buena idea que abras otro hilo para tratar sobre el mismo tema.



Saludos...
Hola.

Ya combiné ambos hilos, gracias por señalarnoslo.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #18  
Antiguo 19-03-2013
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Prueba de esta forma:

Código Delphi [-]
procedure StrokeOutItem(I: Integer);
begin
  if CheckListBox1.Checked[i] and (CheckListBox1.ItemObject[i] is TCheckBox) then
    TCheckBox(CheckListBox1.ItemObject[i]).Font.Style := [fsStrikeOut]
end;


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #19  
Antiguo 19-03-2013
teecweb teecweb is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 64
Poder: 12
teecweb Va por buen camino
Holas..gracias por la respuesta
lo que no reconoce este codigo ..sale este error en esta linea 'cool no call proc',..gracias por tus respuestas
Código Delphi [-]

TCheckBox(CheckListBox1.ItemObject[i]).Font.Style := [fsStrikeOut]
Responder Con Cita
  #20  
Antiguo 21-03-2013
teecweb teecweb is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 64
Poder: 12
teecweb Va por buen camino
Talking

Por favor ....alguna respuesta..gracias
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
Palabra del día: antífrasis Al González La Taberna 10 30-11-2012 18:30:24
Leer fichero texto palabra por palabra... Lester Varios 2 03-04-2007 15:28:27
Leer palabra por palabra en Word solecito Servers 0 12-03-2007 20:58:13
Pasar palabra bajo cursor en un programa a aplicación Delphi Q37 API de Windows 7 13-01-2007 14:36:06
Significados de la palabra WEB obiwuan Humor 0 06-05-2003 22:06:42


La franja horaria es GMT +2. Ahora son las 22:36:29.


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
Copyright 1996-2007 Club Delphi