::: µ¨ÆÄÀÌ Tip&Trick :::

µ¨ÆÄÀÌ Tip&Trick ¼º°Ý¿¡ ¸ÂÁö ¾Ê´Â ±¤°í,ºñ¹æ,Áú¹®ÀÇ ±ÛÀº Áï½Ã »èÁ¦Çϸç
³»¿ëÀ» º¹»çÇÏ¿© »ç¿ëÇÒ °æ¿ì ¹Ýµå½Ã À̰÷(http://www.howto.pe.kr)À» Ãâó·Î ¸í½ÃÇÏ¿© ÁÖ¼¼¿ä


Category

  ±è¿µ´ë(2003-03-06 22:05:09, Hit : 5655, Vote : 1200
 StringGrid ¿¡¼­ ÇÁ·Î±×·¥À¸·Î MultiSelect ½Ã۱â

// <»ç¿ë¹æ¹ý> ¾Æ·¡ ÄÚµùÀ» ÇϽÅÈÄ¿¡ StringGridÀÇ ¾î¶² ÇÁ·ÎÆÛƼµµ º¯°æÇÒ Çʿ䰡 ¾ø½À´Ï´Ù
// Button1 À» Ŭ¸¯ÇϽøé StringGridÀÇ Æ¯Á¤¿µ¿ªÀÌ ¼±ÅÃµÇ°í ±× ³»¿ëÀ» Ŭ¸³º¸µå·Î
// º¹»çÇÑ ´ÙÀ½ ´Ù½Ã Memo ¿¡ ºÙ¿©³Ö±â°¡ µË´Ï´Ù

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, Grids, clipbrd;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Memo1: TMemo;
    Button1: TButton;
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.DFM}

procedure CopyStreamToClipboard(S: TStream; fmt: Word);
var
  hMem: THandle;
  pMem: Pointer;
begin
  {streamÀÇ À§Ä¡¸¦ ¸Ç ¾ÕÀ¸·Î À̵¿½ÃŲ´Ù}
  S.Position := 0;

  {streamÀÇ Å©±â¸¸Å­ Àü¿ª Èü(heap)¿¡ ¸Þ¸ð¸® ºí·ÏÀ» ÇÒ´çÇÑÈÄ À©µµ¿ì ÇÚµéÀ» ¾ò´Â´Ù}
  hMem := GlobalAlloc(GHND or GMEM_DDESHARE, S.Size);
  if hMem <> 0 then
  begin
    {Àü¿ª ÈüÀÇ ÇÒ´çµÈ ¸Þ¸ð¸® ºí·ÏÀ» °íÁ¤(lock)½ÃŲ´Ù}
    pMem := GlobalLock(hMem);
    if pMem <> nil then
    begin
      {ÇÒ´ç¹ÞÀº ¸Þ¸ð¸® ºí·°¿¡ streamÀÇ ³»¿ëÀ» º¹»çÇÑ´Ù}
      S.Read(pMem^, S.Size);
      {À§ÀÇ S.Read()¿¡ ÀÇÇØ Áõ°¡µÈ Æ÷ÀÎÅ͸¦ ´Ù½Ã ¸Ç ¾ÕÀ¸·Î À̵¿½ÃŲ´Ù}
      S.Position := 0;
      {Àü¿ª Èü¿¡¼­ ¸Þ¸ð¸® ºí·ÏÀÇ Àá±Ý ÇØÁ¦}
      GlobalUnlock(hMem);

      {Ŭ¸³º¸µå¸¦ ¿­·¯¼­ ÁÖ¾îÁø Æ÷¸Ë(¿©±â¼­´Â CF_TEXT)°ú À©µµ¿ì ÇÚµé·Î ÁöÁ¤µÈ
       µ¥ÀÌŸ¸¦ Ŭ¸³º¸µå¿¡ ÁØ´Ù}
      Clipboard.Open;
      try
        Clipboard.SetAsHandle(fmt, hMem);
      finally
        Clipboard.Close;
      end;
    end
    else
    begin
      {¸Þ¸ð¸® lockÀÇ ½ÇÆÐ·Î memory block ¿¹¿Ü¸¦ ¹ß»ý½ÃŲ´Ù}
      GlobalFree(hMem);
      OutOfMemoryError;
    end;
  end
  else
  begin
    {¸Þ¸ð¸® ÇÒ´çÀÇ ½ÇÆÐ·Î memory block ¿¹¿Ü¸¦ ¹ß»ý½ÃŲ´Ù}
    OutOfMemoryError;
  end;
end;

procedure CopySelectedGridToClipboard(theGrid: TStringGrid);
var
  m: TMemoryStream;
  i, j: Integer;
  S: String;
begin
  m := TMemoryStream.Create;
  try
    with theGrid do
      for i := theGrid.Selection.Top to theGrid.Selection.Bottom do
        for j := theGrid.Selection.Left to theGrid.Selection.Right do
        begin
          S := Cells[j, i];
          // ¸Ç ¸¶Áö¸· ¼±ÅÃµÈ ColumnÀ̸é CR/LF ¸¦ Ãß°¡ÇÏ¿© Ç౸ºÐ
          if j = theGrid.Selection.Right then
            AppendStr(S, #13#10)
          else
            AppendStr(S, #9); // °¢ ColumnÀ» Tab ¹®ÀÚ·Î ±¸ºÐ
          m.WriteBuffer(S[1], Length(S));
      end;
    S[1] := #0; // ¹®ÀÚ¿­ streamÀÇ ³¡ Ç¥½Ã
    m.WriteBuffer(S[1], 1);
    CopyStreamToClipboard(m, CF_TEXT); // streamÀÇ ³»¿ëÀ» Ŭ¸³º¸µå·Î º¹»ç
  finally
    m.Free;
  end;
end;

procedure TForm1.FormActivate(Sender: TObject);
var
  i, j: Integer;
begin
  // ColumnÀÇ titleÀ» ¸¸µç´Ù
  for i := 1 to StringGrid1.ColCount - 1 do
   StringGrid1.Cells[i, 0] := Char(Ord('A')+i-1);

  // RowÀÇ titleÀ» ¸¸µç´Ù
  for i := 1 to StringGrid1.RowCount - 1 do
   StringGrid1.Cells[0, i] := IntToStr(i);;

  // ÀÓÀÇÀÇ ÀڷḦ ¸¸µé¾î¼­ °¢ cell¿¡ ÀÔ·ÂÇÕ´Ï´Ù
  for i := 1 to StringGrid1.ColCount - 1 do
    for j := 1 to StringGrid1.RowCount - 1 do
      StringGrid1.Cells[i, j] := Format('%.0n', [i * j * 10000.0]);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  SelectedRectangle: TGridRect;
  CoordTopLeft, CoordBottomRight: TGridCoord;
begin
  // ¼±ÅÃÇϰíÀÚ ÇÏ´Â Á÷»ç°¢Çü ¿µ¿ªÀ» ¼³Á¤ÇÑ´Ù
  CoordTopLeft.X:= 2; // µÎ¹øÂ° Ä÷³ºÎÅÍ ¼±ÅÃ
  CoordTopLeft.Y:= 1; // ù¹øÂ° ÇàºÎÅÍ ¼±ÅÃ
  CoordBottomRight.X:= StringGrid1.RowCount - 2; // ¸¶Áö¸· Ä÷³ÀÇ ÀüÄ÷³
  CoordBottomRight.Y:= StringGrid1.ColCount - 2; // ¸¶Áö¸· ÇàÀÇ ÀüÇà

  // Á÷»ç°¢Çü ¿µ¿ªÀ» TGridRect ¿¡ ÇÒ´çÇÑ´Ù
  with StringGrid1 do
  begin
    SelectedRectangle.TopLeft     := CoordTopLeft;
    SelectedRectangle.BottomRight := CoordBottomRight;
  end;
  StringGrid1.Selection:= SelectedRectangle;

  // StringGridÀÇ ¼±ÅÃµÈ ¿µ¿ªÀ» Ŭ¸³º¸µå·Î ºÏ»ç
  CopySelectedGridToClipboard(StringGrid1);

  // Ŭ¸³º¸µåÀÇ ³»¿ëÀ» ¸Þ¸ð·Î ºÙ¿©³Ö±â(Å×½ºÆ®¿ë)
  Memo1.Clear;
  Memo1.PasteFromClipboard;
end;

end.





611   [µ¥ÀÌÅͺ£À̽º] DB¿¡ ÀúÀåµÈ JPEG(JPG)¸¦ DBGrid¿¡ Ãâ·ÂÇÏ±â  ±è¿µ´ë 2003/03/06 5319 1263
610   [µ¥ÀÌÅͺ£À̽º] µ¿ÀûÀ¸·Î À妽º ¸¸µé±â  ±è¿µ´ë 2003/03/06 4623 1150
609   [µ¥ÀÌÅͺ£À̽º] Excel ODBC¸¦ »ç¿ëÇÏ¿© xls¸¦ Å×À̺í·Î »ç¿ëÇÏ±â  ±è¿µ´ë 2003/03/06 7008 1657
608   [µ¥ÀÌÅͺ£À̽º] DB aliasÁß ORACLE alias ¸í ±¸ÇÏ±â  ±è¿µ´ë 2003/03/06 4088 989
607   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] QuickReport¿¡¼­ ÇÁ¸°ÅÍ ¹Ù²Ù¾î¼­ Ãâ·ÂÇÏ±â  ±è¿µ´ë 2003/03/06 6517 1589
606   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] RichEdit ÀÇ ³»¿ëÀ» Bitmap À¸·Î ¸¸µé±â  ±è¿µ´ë 2003/03/06 3442 889
605   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] RichEdit ¿¡¼­ ¹®ÀÚ(¿­)¸¦ ã¾Æ ±ÛÀÚ¼Ó¼º ¹Ù²Ù±â  ±è¿µ´ë 2003/03/06 4844 1224
604   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] RichEdit ¿¡¼­ Ä¿¼­¸¦ óÀ½, ¸¶Áö¸·À¸·Î º¸³»±â  ±è¿µ´ë 2003/03/06 7134 1514
603   [À©µµ¿ìÁî API] ½ÇÇàÁßÀÎ ¸ðµç ÇÁ·Î±×·¥ Minimized ½ÃŰ±â  ±è¿µ´ë 2003/03/06 4744 1248
602   [½Ã½ºÅÛ] µ¨ÆÄÀÌ·Î DOS ÇÁ·Î±×·¥(Console application) ¸¸µé±â  ±è¿µ´ë 2003/03/06 21740 7636
601   [COM/OLE] Registering *.tlb files without Delphi  ±è¿µ´ë 2003/03/06 6768 1150
600   [³×Æ®¿÷/ÀÎÅͳÝ] How to bring a network down - "Win Nuke"  ±è¿µ´ë 2003/03/06 7426 2007
599   [À©µµ¿ìÁî API] Æú´õ³ª ÆÄÀÏÀÇ À©µµ¿ìÁî µî·ÏÁ¤º¸ dialog ¶ç¿ì±â  ±è¿µ´ë 2003/03/06 5169 1484
598   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] À̹ÌÁö¸¦ ¸¶¿ì½º·Î drag ÇØ¼­ zoom ÇÏ±â  ±è¿µ´ë 2003/03/06 3760 1040
597   [À©µµ¿ìÁî API] ¿ÜºÎ ÇÁ·Î±×·¥À» ÃÖ»óÀ§·Î ¼³Á¤ÇÏ±â  ±è¿µ´ë 2003/03/06 5354 1245
596   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] TObjectÀÇ ÇÁ·ÎÆÛƼ¸¦ ¹®ÀÚ¿­·Î ÂüÁ¶ÇÏ±â  ±è¿µ´ë 2003/03/06 5284 1603
595   [À©µµ¿ìÁî API] ÇÁ·Î±×·¥À¸·Î Screensaver µî·ÏÇÏ´Â µÎ°¡Áö ¹æ¹ý  ±è¿µ´ë 2003/03/06 4589 1283
594   [µ¥ÀÌÅͺ£À̽º] ƯÁ¤ ÆûÀÇ ÇöÀç ÆíÁýÁßÀÎ DB Field ±¸ÇÏ±â  ±è¿µ´ë 2003/03/06 4147 1120
593   [À©µµ¿ìÁî API] KeyDownÀÇ BeepÀ½À» ¾ø¾ÖÀÚ...  ±è¿µ´ë 2003/03/06 4806 1234
592   [½Ã½ºÅÛ] How do I use SetWindowsHookEx ?  ±è¿µ´ë 2003/03/06 7053 977
591   [½Ã½ºÅÛ] Redirecting DOS Application Output  ±è¿µ´ë 2003/03/06 4832 1230
590   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] µÎ°³ÀÇ RichEdit »çÀÌ¿¡ ³»¿ë º¹»çÇÏ±â  ±è¿µ´ë 2003/03/06 6016 1401
589   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] ƯÁ¤ ColorÀÇ Invert Color ±¸ÇÏ±â  ±è¿µ´ë 2003/03/06 4377 1324
588   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] ¹®ÀÚ¿­ ¼ö½Ä¹®Àå(expression)ÀÇ °á°ú ±¸ÇÏ±â  ±è¿µ´ë 2003/03/06 3543 901
587   [½Ã½ºÅÛ] ¿Àµð¿À CDÀÇ º¼·ý Á¶ÀýÇÏ±â  ±è¿µ´ë 2003/03/06 3745 1034
586   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] À©µµ¿ìÁî "³¯Â¥/½Ã°£" ¼³Á¤È­¸é ¶ç¿ì±â  ±è¿µ´ë 2003/03/06 6263 1833
585   [½Ã½ºÅÛ] ¸¶ÀÌÅ© º¼·ý Á¶ÀýÇÏ±â  ±è¿µ´ë 2003/03/06 4753 1296
584   [¸ÖƼ¹Ìµð¾î] JPEG, WAVE ¸¦ resource ÆÄÀÏ¿¡ ³Ö°í Àоî¿À±â  ±è¿µ´ë 2003/03/06 5462 1240
583   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] desktop ¹è°æÈ­¸éÀ» ÆûÀÇ ¹è°æÈ­¸éÀ¸·Î ±×¸®±â  ±è¿µ´ë 2003/03/06 3786 1044
582   [À©µµ¿ìÁî API] ·¹Áö½ºÆ®¸®ÀÇ º¯°æ¿©ºÎ ¾Ë¸®´Â 2°¡Áö ¹æ¹ý  ±è¿µ´ë 2003/03/06 4845 1300
581   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] StringGrid ÀÇ ³»¿ëÀ» Ŭ¸³º¸µå·Î º¹»çÇÏ±â  ±è¿µ´ë 2003/03/06 4563 1065
580   [µ¥ÀÌÅͺ£À̽º] Save DBGrid To Excel  ±è¿µ´ë 2003/03/06 7268 2048
579   [COM/OLE] DelphiÀÇ OCX¸¦ InstallShield·Î ¹èÆ÷ÇÏ´Â ¹æ¹ý  ±è¿µ´ë 2003/03/06 8493 5665
578   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] ASCII printing  ±è¿µ´ë 2003/03/06 5423 6326
577   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] OEM conversion  ±è¿µ´ë 2003/03/06 4393 1267
576   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] MemoÀÇ ÇàÀÇ ¹®ÀÚ¼ö¸¦ Á¦ÇÑÇϰí WordWrap½ÃŰ±â  ±è¿µ´ë 2003/03/06 5347 1320
575   [À©µµ¿ìÁî API] DDE ¾²Áö ¾Ê°í IEÀÇ ÇöÀç URL °¡Á®¿À±â  ±è¿µ´ë 2003/03/06 6070 1691
574   [À©µµ¿ìÁî API] RichEdit¿¡ ÀÔ·ÂÇÑ ¹®ÀåÀÇ ½ÇÁ¦ ³ôÀÌ ±¸ÇÏ±â  ±è¿µ´ë 2003/03/06 5135 1434
573   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] StringGrid ÀÇ ¼±Åÿµ¿ª¸¸ Ŭ¸³º¸µå·Î º¹»çÇÏ±â  ±è¿µ´ë 2003/03/06 4996 1114
  [ÀϹÝ/ÄÄÆ÷³ÍÆ®] StringGrid ¿¡¼­ ÇÁ·Î±×·¥À¸·Î MultiSelect ½ÃŰ±â  ±è¿µ´ë 2003/03/06 5655 1200

[1][2][3][4][5][6][7][8][9] 10 ..[25] [´ÙÀ½ 10°³]
 

Copyright 1999-2023 Zeroboard / skin by zero