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 23-02-2016
Catublipas Catublipas is offline
Miembro
NULL
 
Registrado: ene 2015
Posts: 55
Poder: 10
Catublipas Va por buen camino
Buenas, os comento

he probado las dos maneras la respuesta de ecfisa me da error en la declaracion del procedimiento Paint. Y he probado la respuesta de AgustinOrtu que no me da error en la declaracion de la clase TStringGrid pero me da el siguiente error:

Código Delphi [-]
[dcc32 Error] Empresas.pas(16): E2137 Method 'Paint' not found in base class

Uso Delphi xe7 ¿tiene algo que ver?
Responder Con Cita
  #2  
Antiguo 23-02-2016
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 Catublipas
Cita:
Empezado por Catublipas Ver Mensaje
...
Uso Delphi xe7 ¿tiene algo que ver?
Por los motivos que te expuse no puedo asegurarlo, pero es una posibilidad.

Para salir de dudas, proba este ejemplo que funciona correctamente en Delphi 7:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, Menus, XPMan;

type
  TStringGrid = class(Grids.TStringGrid) //  class(Vcl.Grids.TStringGrid) para tu caso  
  private
    FBorde: Boolean;
  protected
    procedure Paint; override;
  public
    property Borde: Boolean read FBorde write FBorde default False;
  end;

  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    PopupMenu1: TPopupMenu;
    MenuItemBorde: TMenuItem;
    XPManifest1: TXPManifest;
    procedure FormCreate(Sender: TObject);
    procedure MenuItemBordeClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

{ TStringGrid }
procedure TStringGrid.Paint;
var
  R: TRect;
begin
  inherited;
  if not FBorde then
  begin
    R := CellRect(Col, Row);
    DrawFocusRect(Canvas.Handle, R);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  c, r: Integer;
  sg : TStringGrid;
begin
  sg := StringGrid1;
  // títulos de columnas y filas
  sg.Rows[0].CommaText := ',Col1,Col2,Col3,Col4,Col5';
  for r := 1 to sg.RowCount - 1 do
    sg.Cells[0, r] := Format('Fil%d',[r]);

  // algunos valores al StringGrid
  for c := sg.FixedCols to sg.ColCount - 1 do
    for r := sg.FixedRows to sg.RowCount - 1 do
      sg.Cells[c,r] := IntToStr(c+r);

  sg.PopupMenu := PopupMenu1;
  sg.Borde     := True; // StringGrid inicia con borde
end;

// PopupMenu-ItemBorde
procedure TForm1.MenuItemBordeClick(Sender: TObject);
const
  TXT: array[Boolean] of string = ('Poner borde', 'Quitar borde');
begin
  StringGrid1.Borde     := not StringGrid1.Borde;
  MenuItemBorde.Checked := StringGrid1.Borde;
  MenuItemBorde.Caption := TXT[StringGrid1.Borde];
  StringGrid1.Refresh;
end;

end.

Muestra:


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 23-02-2016 a las 12:08:39.
Responder Con Cita
  #3  
Antiguo 23-02-2016
Catublipas Catublipas is offline
Miembro
NULL
 
Registrado: ene 2015
Posts: 55
Poder: 10
Catublipas Va por buen camino
Buenas ecfisa,
me ha funcionado al parecer me faltaba incorporar la libreria Vcl.grids, ya no me da el error pero no me quita el borde.
Es posible que sea porque el StringGrid lo he creado en tiempo de diseño, o ¿no tiene nada que ver?
Muchas gracias de veras por vuestra ayuda de nuevo!
Responder Con Cita
  #4  
Antiguo 23-02-2016
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 Catublipas Ver Mensaje
Buenas ecfisa,
me ha funcionado al parecer me faltaba incorporar la libreria Vcl.grids, ya no me da el error pero no me quita el borde.
Es posible que sea porque el StringGrid lo he creado en tiempo de diseño, o ¿no tiene nada que ver?
Muchas gracias de veras por vuestra ayuda de nuevo!
No me parece... controla que la declaración:
Código Delphi [-]
type
  TStringGrid = class(Vcl.Grids.TStringGrid)
  ...
preceda (esté mas arriba) a la definición de la variable de tipo TStringGrid que uses en el formulario.

Otra opción es que hagas una nueva unidad,
Código Delphi [-]
unit Unit2;

interface

uses Windows, Types, Grids; // Vcl.Grids, etc, etc

type
  TStringGrid = class(Grids.TStringGrid) //  class(Vcl.Grids.TStringGrid)
  private
    FBorde: Boolean;
  protected
    procedure Paint; override;
  public
    property Borde: Boolean read FBorde write FBorde default False;
  end;

implementation

{ TStringGrid }
procedure TStringGrid.Paint;
var
  R: TRect;
begin
  inherited;
  if not FBorde then
  begin
    R := CellRect(Col, Row);
    DrawFocusRect(Canvas.Handle, R);
  end;
end;
end.
y luego en el formulario en que la vayas a usar la incluyas en la última posición en el uses de la sección interface:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,  Menus, Grids, Unit2; // <- Última en ser incluída

type
   // (Ya no se necesita la declaración por la inclusión de Unit2)
   TEmpresasForm = class(TForm)
...

Nota: Para todos los casos toma en cuenta las diferencias que tiene Delphi XE7 con Delphi 7 cuando se hace referencia a las unidades y clases, vg.:
Código:
Delphi 7   : Grids.TStringGrid
Delphi XE7 : Vcl.Grids.TStringGrid
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 23-02-2016
Catublipas Catublipas is offline
Miembro
NULL
 
Registrado: ene 2015
Posts: 55
Poder: 10
Catublipas Va por buen camino
Perdón corrijo, no termina de quitar el borde jajajaja.
Os paso las imagenes a ver si se os ocurre algo.
Imágenes Adjuntas
Tipo de Archivo: jpg 1.jpg (18,5 KB, 6 visitas)
Tipo de Archivo: jpg 2.jpg (19,4 KB, 5 visitas)
Tipo de Archivo: jpg 3.jpg (17,4 KB, 5 visitas)
Responder Con Cita
  #6  
Antiguo 23-02-2016
Catublipas Catublipas is offline
Miembro
NULL
 
Registrado: ene 2015
Posts: 55
Poder: 10
Catublipas Va por buen camino
He probado creando la unidad nueva, hago referencia en la otra unidad y sigo en las mismas, no me da problemas, pero sigue sin quitar el borde.
Por cierto he probado a desactivar Default Drawing pero es un caos aunque si que quita el borde, pero se desconfigura todo.

Última edición por Catublipas fecha: 23-02-2016 a las 12:55:40.
Responder Con Cita
  #7  
Antiguo 23-02-2016
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
La verdad, estoy imposibilitado de probar el código sobre XE7 así que ando a tientas .

Lo último que se me ocurre es que pruebes calificando la función DrawFocusRect:
Código Delphi [-]
{ TStringGrid }
procedure TStringGrid.Paint;
var
  R: TRect;
begin
  inherited;
  if not FBorde then
  begin
    R := CellRect(Col, Row);
    Windows.DrawFocusRect(Canvas.Handle, R);  // ( también prueba con: Canvas.DrawFocusRect(R); )
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 23-02-2016
Catublipas Catublipas is offline
Miembro
NULL
 
Registrado: ene 2015
Posts: 55
Poder: 10
Catublipas Va por buen camino
Ecfisa funciona perfecto, he hecho lo que has puesto y he desactivado el Default Drawing y va clavado!
Muchas gracias de nuevo!

Un saludo!
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
Radiogroup sin borde? drykea Varios 3 19-08-2013 14:16:46
TPageControl sin borde Jose Roman OOP 3 11-04-2013 20:02:33
quitar auto seleccion en una celda StringGrid sakuragi OOP 0 01-06-2006 00:01:06
Borde de un Timage NuncaMas Gráficos 2 06-12-2003 10:03:03
Quitar el Borde a un TDateTimePicker Er_Manué OOP 0 13-05-2003 09:41:45


La franja horaria es GMT +2. Ahora son las 11:54:31.


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