Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Seleccionar y Copiar una fila de un StringGrid (https://www.clubdelphi.com/foros/showthread.php?t=76285)

CarlosAlberto 21-10-2011 14:19:00

Seleccionar y Copiar una fila de un StringGrid
 
Estimados amigos del club: ¿cómo puedo hacer para seleccionar toda una columna de un StringGrid y copiar su contenido en otra columna del mismo?
Muchas gracias por su repuesta.
Saludos.
Carlos Alberto

Neftali [Germán.Estévez] 21-10-2011 15:44:42

En esta entrada de mi blog, se habla de cómo tratar con el portapapeles en Windows. A parte de que te pueda interesar la lectura, el ejemplo que se adjunta es justo de cómo realizar Copy/Paste de filas de un StringGrid.
Revisa el código dele ejemplo, porque creo que es justo o que necesitas.

Caro 21-10-2011 17:17:08

Hola CarlosAlberto, seleccionar directamente creo que no se puede, para seleccionar la columna y se note, lo que se me ocurre es que pintes dicha columna, haciendo click sobre el titulo de la columna, pero como el StringGrid no tiene un evento OnTitle, podriamos utilizar el evento OnMouseDown y el procedimiento MouseToCell:

Utilizamos la variable Global Columna, para guardar la columna cuando se ha hecho Click sobre el titulo y la que va a ser pintada

Código Delphi [-]
//Variables globales
Columna : Integer;
ColSelect, RowSelect : Integer;

//en el evento OnMouseDrawCell

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  texto:String;
begin
 if (Columna>0) and (ACol=Columna) and (ARow>0) then
 begin
  With StringGrid1 do
   begin
    Canvas.Font.Color := clBlue;
    Canvas.Brush.Color := clRed;
    Canvas.FillRect(Rect);
    Texto := Cells[ACol,ARow];
    Canvas.TextRect( Rect, Rect.Left+2, Rect.Top+2, Texto);
   end;
 end;
end;

//En el evento OnMouseDown, detectamos si se ha hecho click sobre el titulo
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  StringGrid1.MouseToCell(X,Y,ColSelect,RowSelect);
 if RowSelect=0 then
 begin
  Columna := ColSelect;
  StringGrid1.Refresh;
 end;
end;

//y en el evento OnCreate de tu formulario inicializas tu variable global
Columna := 0;

Revisa la pagina que te ha indicado Neftali, hay muchas cosas que te pueden ayudar ;).

Saluditos

Caro 21-10-2011 17:30:22

Ahora, para copiar una columna en otra, un ejemplo (seleccionamos la columna que queremos copiar, luego seleccionas la columna donde se va a copiar y presionas en el boton copiar), esta parte es depende de ti, como desees que se haga, solo es una idea.

Código Delphi [-]
//añadimos una variable global mas
ColSelectAnt : Integer;

//En el evento OnMouseDown
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 ColSelectAnt := ColSelect; // guardamos la columna anterior
 StringGrid1.MouseToCell(X,Y,ColSelect,RowSelect);
  .......................................
  .......................................
end;

//El codigo de tu boton que hace la copia sería:
begin
 for i:=0 to StringGrid1.RowCount-1 do
  StringGrid1.Cells[ColSelect,i] := StringGrid1.Cells[ColSelectAnt,i];
end;

//Inicializas en el OnCreate tu nueva variable
ColSelectAnt := -1;

Saluditos

monfa 23-01-2012 18:29:30

me pueden ayudar
 
como hacer que una celda sea soloamente editable y saber si esta llena o no

ecfisa 23-01-2012 18:55:10

Hola monfa y bienvenido a los foros de Club Delphi :)

Te invito a que leas nuestra Guía de estilo.

Por favor, crea un nuevo hilo con tu consulta, dale un título que se relacione con el contenido de ella y explíca detalladamente que es lo que estás buscando (Es decir, nombre del componente sobre el que tenés la duda, resultado que esperas, etc, etc... )


Un saludo y muchas gracias por tu colaboración.

CarlosAlberto 04-02-2012 19:06:00

Estimada Caro: gracias por la respuesta sobre copiar una columna de un Stringgrid
Saludos.
Carlos Alberto


La franja horaria es GMT +2. Ahora son las 18:49:32.

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