Avatar billede pzw Nybegynder
28. oktober 2008 - 07:57 Der er 4 kommentarer

StringGrid kopiere date fra/til andre programmer

Hej

Jeg har lavet et program som benytter et antal StringGrids.
Når det færdige program benyttes skal brugeren have mulighed for at kunne kopiere tekst i enkelte celler med Ctrl+C/Ctrl+V som i Excel.
Tilsvarende kopiere et større antal markerede celler med Ctrl+C/Ctrl+V.
Hjælp søges

/Peter
Avatar billede hrc Mester
28. oktober 2008 - 09:42 #1
Den simple måde er nok at kopiere det til klippebordet som formateret streng (uden hensyntagen til faste kolonner og rækker; den kopierer alt):

uses
  ClipBrd;

procedure TfrmMain.btnDoItClick(Sender: TObject);
var
  st: string;
  x, y: integer;
begin
  st := '';
  for y := 0 to sgStringGrid.RowCount - 1 do
    for x := 0 to sgStringGrid.ColCount - 1 do
      if x < sgStringGrid.ColCount - 1 then
        st := st + sgStringGrid.Cells[x,y] + #9
      else if y < sgStringGrid.RowCount - 1 then
        st := st + sgStringGrid.Cells[x,y] + #13#10
      else
        st := st + sgStringGrid.Cells[x,y];
  Clipboard.AsText := st;
end;
Avatar billede pzw Nybegynder
28. oktober 2008 - 13:40 #2
Hej

Det jeg skal lave er sådan at brugeren af programmet kan markere et antal celler i en StrinGrid og kopiere disse celler til et andet sted i StringGrid'en eller f.eks. til Excel.
Kan være en opsætning i StringGrid jeg ikke kan få til at fungere?
/Peter
Avatar billede hrc Mester
28. oktober 2008 - 14:07 #3
Hvis du vil have valgte sektion med, kan det gøres sådan:

procedure TfrmMain.btnDoItClick(Sender: TObject);
var
  st: string;
  x, y: integer;
  XMin, XMax, YMin, YMax: integer;
begin
  st := '';
  XMin := sgStringGrid.Selection.Left;
  XMax := sgStringGrid.Selection.Right;
  YMin := sgStringGrid.Selection.Top;
  YMax := sgStringGrid.Selection.Bottom;

  for y := YMin to YMax do
    for x := XMin to XMax do
      if x < XMax then
        st := st + sgStringGrid.Cells[x,y] + #9
      else if y < YMax then
        st := st + sgStringGrid.Cells[x,y] + #13#10
      else
        st := st + sgStringGrid.Cells[x,y];
  Clipboard.AsText := st;
end;

Metoden med at bygge strengen op (st := st + 'et eller andet') er den langsommeste, men i praksis vil det være en fin løsning.

Hvordan du klistrer det ind i et andet/andet sted i stringgrid skal jeg lige tænke over.
Avatar billede pzw Nybegynder
06. november 2008 - 17:28 #4
Hej

Lige på midlertidig hold, men vender tilbage i løbet af få uger.

/Peter
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester