Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > Varios
Register FAQ Members List Calendar Guía de estilo Today's Posts

Coloboración Paypal con ClubDelphi

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 15/03/2013
teecweb teecweb is offline
Miembro
NULL
 
Join Date: Feb 2013
Posts: 64
Poder: 14
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...
Reply With Quote
  #2  
Old 15/03/2013
Neftali [Germán.Estévez]'s Avatar
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Join Date: Jul 2004
Location: Barcelona - España
Posts: 19,449
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.
Reply With Quote
  #3  
Old 15/03/2013
Chris's Avatar
[Chris] Chris is offline
Miembro Premium
 
Join Date: Apr 2007
Location: Jinotepe, Nicaragua
Posts: 1,678
Poder: 21
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
Reply With Quote
  #4  
Old 15/03/2013
[maeyanes] maeyanes is offline
Capo de los Capos
 
Join Date: May 2003
Location: Campeche, México
Posts: 2,732
Poder: 26
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

Last edited by maeyanes : 15/03/2013 at 17:52.
Reply With Quote
  #5  
Old 15/03/2013
Neftali [Germán.Estévez]'s Avatar
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Join Date: Jul 2004
Location: Barcelona - España
Posts: 19,449
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
Quote:
Originally Posted by Chris View Post
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.
Reply With Quote
  #6  
Old 15/03/2013
teecweb teecweb is offline
Miembro
NULL
 
Join Date: Feb 2013
Posts: 64
Poder: 14
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
Reply With Quote
  #7  
Old 15/03/2013
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
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 ....
Reply With Quote
  #8  
Old 15/03/2013
teecweb teecweb is offline
Miembro
NULL
 
Join Date: Feb 2013
Posts: 64
Poder: 14
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;
Reply With Quote
  #9  
Old 15/03/2013
[maeyanes] maeyanes is offline
Capo de los Capos
 
Join Date: May 2003
Location: Campeche, México
Posts: 2,732
Poder: 26
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
Reply With Quote
  #10  
Old 15/03/2013
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
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 ....
Reply With Quote
  #11  
Old 15/03/2013
teecweb teecweb is offline
Miembro
NULL
 
Join Date: Feb 2013
Posts: 64
Poder: 14
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;
Reply With Quote
  #12  
Old 15/03/2013
[maeyanes] maeyanes is offline
Capo de los Capos
 
Join Date: May 2003
Location: Campeche, México
Posts: 2,732
Poder: 26
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
Reply With Quote
  #13  
Old 16/03/2013
teecweb teecweb is offline
Miembro
NULL
 
Join Date: Feb 2013
Posts: 64
Poder: 14
teecweb Va por buen camino
Holas..me sale error :

Código Delphi [-]
'DO' expected.
Reply With Quote
  #14  
Old 17/03/2013
teecweb teecweb is offline
Miembro
NULL
 
Join Date: Feb 2013
Posts: 64
Poder: 14
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;
Reply With Quote
  #15  
Old 19/03/2013
teecweb teecweb is offline
Miembro
NULL
 
Join Date: Feb 2013
Posts: 64
Poder: 14
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]
Reply With Quote
  #16  
Old 19/03/2013
[maeyanes] maeyanes is offline
Capo de los Capos
 
Join Date: May 2003
Location: Campeche, México
Posts: 2,732
Poder: 26
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
Reply With Quote
  #17  
Old 19/03/2013
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
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
Quote:
Originally Posted by maeyanes View Post
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 ....
Reply With Quote
  #18  
Old 19/03/2013
[maeyanes] maeyanes is offline
Capo de los Capos
 
Join Date: May 2003
Location: Campeche, México
Posts: 2,732
Poder: 26
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
Reply With Quote
  #19  
Old 19/03/2013
teecweb teecweb is offline
Miembro
NULL
 
Join Date: Feb 2013
Posts: 64
Poder: 14
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]
Reply With Quote
  #20  
Old 21/03/2013
teecweb teecweb is offline
Miembro
NULL
 
Join Date: Feb 2013
Posts: 64
Poder: 14
teecweb Va por buen camino
Talking

Por favor ....alguna respuesta..gracias
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Palabra del día: antífrasis Al González La Taberna 10 30/11/2012 18:30
Leer fichero texto palabra por palabra... Lester Varios 2 03/04/2007 15:28
Leer palabra por palabra en Word solecito Servers 0 12/03/2007 20:58
Pasar palabra bajo cursor en un programa a aplicación Delphi Q37 API de Windows 7 13/01/2007 14:36
Significados de la palabra WEB obiwuan Humor 0 06/05/2003 22:06


All times are GMT +2. The time now is 01:52.


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