Q&A

  • ultragrid에서 금액값을 ,(콤마)로 분리해서 표현되나요?
조회해서 보이는 데이터가 금액값인데
천원단위인 3자리수마다 ,(콤마)가 보이게 조회가 가능한가요??
Cells[1, i+1]  값이  금액이라서 ,가 보이게 하고싶은데요...
formatfloat 함수를 쓰라고 하는데...
배열이라서요...


with ugd_spacu do
  begin  
     for i := 0 to rowcount   do
         begin
              Cells[0, i+1] := IntToStr(i+1);
              Cells[1, i+1] := VarToStr(lv_money[i]);
         end;
  end;


고수님들의 답변 부탁드립니다...
6  COMMENTS
  • Profile
    홍성락 2008.06.12 04:38
    2가지 방법으로 해보겠습니다.
    1방법은 그냥 넣을때 곰마를 넣습니다, 그러나 실제 데이타와 다르므로 다른 소스에서 주의해야합니다.
    Cells[1, i+1] := FormatFloat('#,##0', lv_money[i]);
    2방법은 셀의 값과 DB데이타 값을 유지합니다, 단지 보이는것만 콤마를 넣습니다, 편집시에도 원 데이타 형식으로 나타납니다.
    여기서 검색해도 많이 있습니다. 다용도로 사용하도록 함수를 만들었던 겁니다.

    <!--CodeS-->
    //공통함수 TStringGrid응 바꾸세요
    function gfSetCellCfg(psGrid : TStringGrid; pRect : TRect;
    piCol, piRow, pialign : Integer; pTxtColor, pCellColor: Tcolor; psNum2 : string): integer;
    var
    OldColor : TColor;
    Oldalign : word;
    begin
    with psGrid do begin
    Oldalign := settextalign(Canvas.Handle, pialign);
    Canvas.Font := psGrid.Font;
    Canvas.Font.Color := pTxtColor;
    OldColor := Canvas.Brush.Color;
    Canvas.Brush.Color := pCellColor;
    case pialign of
    TA_LEFT :
    Canvas.TextRect(pRect,
    pRect.left+10,
    (pRect.Top+pRect.Bottom-psGrid.Font.Size-2) div 2,
    cells[piCol,piRow]);
    TA_RIGHT :
    Canvas.TextRect(pRect,
    pRect.right-10,
    (pRect.Top+pRect.Bottom-psGrid.Font.Size-2) div 2,
    gfGetCommaStr(cells[piCol,piRow])+psNum2);
    TA_CENTER :
    Canvas.TextRect(pRect,
    (pRect.left+pRect.right) div 2,
    (pRect.Top+pRect.Bottom-psGrid.Font.Size-2) div 2,
    cells[piCol,piRow]);
    end;
    Canvas.Brush.Color := OldColor;
    settextalign(Canvas.Handle, Oldalign);
    end;
    Result := 1;
    end;
    function gfGetCommaStr(psNum : string) : string;
    var
    sFmt : string;
    i : integer;
    begin
    sFmt := '#,##0';
    if psNum <> '' then begin
    if pos('.', psNum) > 0 then begin
    sFmt := sFmt+'.';
    for i := 1 to (length(psNum) - pos('.', psNum) ) do
    sFmt := sFmt+'0';
    end;
    Result := FormatFloat(sFmt, StrToFloat(psNum));
    end else
    Result := '';
    end;
    <!--CodeE-->

    <!--CodeS-->
    //그리드의 함수
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
    Rect: TRect; State: TGridDrawState);
    begin
    if (ARow = 0)or(ACol = 0) then
    gfSetCellCfg(TStringGrid(Sender), Rect, ACol, ARow, TA_CENTER, clBlack, clWhite, '')
    else if (ARow <> 0 )and(ACol = 1) then
    gfSetCellCfg(TStringGrid(Sender), Rect, ACol, ARow, TA_RIGHT, clBlack, clWhite, '원');
    end;
    <!--CodeE-->
  • Profile
    천천히 2008.06.13 00:06

    님말씀대로 formatfloat 함수
  • Profile
    홍성락 2008.06.13 03:10
    FormatFloat인자가 Variant라서 그런가봅니다
    Cells[1, i+1] := FormatFloat('#,##0', StrToFloat(VarToStr(lv_money[i])));
    데이타값에 이상한 값이 있을지 모르니 try문도 간간히 사용하세요...
  • Profile
    천천히 2008.06.13 19:09
    홍성락님..답변 감사합니다..
    그런데 또 에러가... ㅠ..ㅠ

    Cells[1, i+1] := FormatFloat('#,##0', StrToFloat(VarToStr(lv_money[i])));
    했는데요...
    lv_money는 variant 맞습니다..

    'EConvertError with message ''' is not a valid floating point value' 에러메시지 뜹니다.. ㅡㅡ;;
  • Profile
    홍성락 2008.06.13 20:15
    아마 위에서 말한것 처럼 데이타에 숫자가아닌 값이 있나 보네요.
    try를 사용해 함수내 놓거나 별고 함수로 만드는게 좋겠네요.
    데이타에 숫자가아닌 값이면 0으로하시면 되나요?
    <!--CodeS-->
    function Get_VariantToFloat(pValue : Variant):Double;
    begin
    try
    if (pValue <> null)and(Length(pValue) > 0) then //VarIsNull
    result := StrToFloat(VarToStr(pValue));
    else
    result := 0;
    except
    result := 0;
    end;
    end;
    //위 함수는 고쳐쓰세요, 깔끔하게요, 아니면 간단하니 삽입해서 사용하세요.
    //새 함수 사용
    Cells[1, i+1] := FormatFloat('#,##0', Get_VariantToFloat(lv_money[i]));
    <!--CodeE-->
    간단하게는 CurrToStr나 CurrToStrF 등등의 함수들도 있어요...

  • Profile
    천천히 2008.06.14 00:26
    감사합니다..
    해결했습니다... ^^;
    복 받으세요...
    • steps
    • 2008.06.14 02:55
    • 1 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.06.15 02:26
      자답입니다. 코드에서 이미지처리에 리용된 GDI PLUS가 문제였습니다. GDI Plus를 쓴 경우 우의 증상...
    • 화이팅
    • 2008.06.14 00:54
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 깔쌈보이
      2008.06.14 02:51
      with mainf do begin 문장에 보면 name := 어쩌구 구문 있죠? 이 구문에 한글이 들어가서 발생한 오류입...
    • 화이팅
      2008.06.14 03:44
      이름을 바꾸니 위와같은 에러는 발생하지 않네요.. 깔삼보이님 감사합니다^^ 근데 실행을 시키면 아무런...
    • 석주현
      2008.06.19 02:44
      Form2.QuickRep1.Prepare; 를 해주시고 Preview 를 하셔야 합니다.
    • 김길남
    • 2008.06.14 00:08
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2008.06.13 20:21
      이름으로 찾는 FindComponent를 사용해 보세요. 그리고 FrmMain는 그촘의 이름입니다. <!--CodeS--&...
    • 강태원
      2008.06.13 20:53
      아하 저런 함수가 있었군요. 감사합니다. 이제 할수 있을듯...^^
    • 이정욱
      2008.06.13 21:04
      한가지 더 팁을 알려드리면, FindComponent 를 사용하셔도 무방합니다. 하지만 성능상의 잇점을 조금...
    • 강태원
      2008.06.14 00:15
      아하.. 밑쪽의 방법도 괜찮은데요?^^; 근데 이미 다 해놨는데... 바꿔야 하나...(이놈의 게으름..-...
    • 석주현
      2008.06.14 11:52
      아래쪽의 방법이 더 나은거 같네요. 코드 컴프리트 같은 책이나 아니면 보통 프로그래밍 관련 책들을 ...
    • 천천히
    • 2008.06.11 23:56
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2008.06.12 02:22
      for문 다음에 rowcount := rowcount + 1; 이렇게하면 보이겠네요. 전번에 처럼 rowcount로 하시면...
    • 천천히
    • 2008.06.11 23:53
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2008.06.12 04:38
      2가지 방법으로 해보겠습니다. 1방법은 그냥 넣을때 곰마를 넣습니다, 그러나 실제 데이타와 다르므로 ...
    • 천천히
      2008.06.13 00:06
      님말씀대로 formatfloat 함수
    • 홍성락
      2008.06.13 03:10
      FormatFloat인자가 Variant라서 그런가봅니다 Cells[1, i+1] := FormatFloat('#,##0', StrToFloat(VarTo...
    • 천천히
      2008.06.13 19:09
      홍성락님..답변 감사합니다.. 그런데 또 에러가... ㅠ..ㅠ Cells[1, i+1] := FormatFloat('#,##0', ...
    • 홍성락
      2008.06.13 20:15
      아마 위에서 말한것 처럼 데이타에 숫자가아닌 값이 있나 보네요. try를 사용해 함수내 놓거나 별고 함...
    • 천천히
      2008.06.14 00:26
      감사합니다.. 해결했습니다... ^^; 복 받으세요...
    • 플루토
    • 2008.06.11 01:16
    • 2 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.06.11 05:23
      파일을 다운로드하든 메모리에 스트림으로 써넣든 클라이언트에 이미지자료가 오기전에는 불가능합니다.
    • 이정욱
      2008.06.11 06:26
      만약 이미지가 커서 그런다면, 이미지 썸네일을 생성 후 받아서 보여주시면 됩니다.
    • 장성호
      2008.06.10 03:14
      <!--CodeS--> procedure TForm1.Button2Click(Sender: TObject); var idx: Integer; begin ...
    • 강태원
      2008.06.10 18:05
      아 C++ 처럼 형변환이 가능하군요. 감사합니다.
    • 석주현
      2008.06.10 03:06
      DateTimeToFileTime(EncodeDateTime(2008,6,9, 17,25,00,00)); EncodeDateTime 으로 한번 해보세요. ...
    • 이정욱
      2008.06.11 00:29
      FileTimeToLocalFileTime 를 참고해보세요 ^^ 우리나라의 GMT 타임 존이 다르기 때문입니다. 위의 ...
    • 석주현
      2008.06.11 09:41
      역씨 정욱님 대단하시네요. ^^ 저도 좋은거 배웠네요.
    • 장성호
      2008.06.10 03:54
      OpenDialog에서 파일명이 들어가는 부분은 ComboBox 입니다. vcl에서도 마찬가지 그렇지만 ComboB...
    • 백록화
      2008.06.10 00:49
      edit 의 imemode 가 imDontCare 이라면...다른 콤포넌트의 영향을 받을수 있습니다. edit1 에 들어오기전...
    • 바다소리
      2008.06.10 01:16
      감사 합니다 검색을위해 호출되는 하위 폼의 edit box에 imemode를 한글로 했었는데 거기서 영향을 ...
    • 임정미
      2008.06.09 09:31
      해결했습니다. 배열크기는 SetLength(value , s_count); 로 정해놓고 for 문은 scount+1 만큼 ...
    • 이정욱
      2008.06.09 20:10
      윽.. 도와드리려고 했는데... 챙피해 하지 마세요 ^^; 전 더 한 실수도 많이 한답니다.ㅜㅜ 꽤 긴...
    • 석주현
      2008.06.09 22:26
      ㅎㅎ 저도 캡춰해서 분석하다가 말았습니다. 제가 보긴 코드를 좀 나누고 좀 리펙토링 하셔야 할 것 ...
    • 이정욱
      2008.06.06 13:13
      test (a,b) 로 그냥 호출 하시면 됩니다. 그리고 그냥 ShowMessage(b); 하시면 제데로 출력될 것입니...
    • 플루토
      2008.06.06 20:24
      네 감사합니다. 수정했어요^ ^
    • 구창민
      2008.06.06 03:02
      이정욱님 편역한...델파이7 Check 또는 아래 델마당에 어떤분이 추천하셨던 책이네요.. 류종택님 저서....
    • 홍성락
      2008.06.05 23:29
      자료실에 [문자를 좌로 스크롤 하는 소스-이미지 사용]으로 올렸습니다. 수정하시면서 사용해 보세요
    • 김광식
      2008.06.11 00:54
      감사합니다...
    • 화이팅
    • 2008.06.05 10:18
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김병윤
      2008.06.05 12:37
      기본적으로 DATA는 Query한값을 --> DataSource를 통해 --> DBGrid에 보여줍니다. 결과적으로 Query의 ...
    • 화이팅
      2008.06.07 05:33
      고맙습니다..^^ 덕분에 잘 해결되었습니다~
    • 왕초보
    • 2008.06.05 02:34
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.06.05 03:00
      포트 번호는 보통 Ip를 통해서 호스트를 찾고 포트번호를 통해서 호스트 내의 통신 접속점을 구분하기 위...
    • 장성호
      2008.06.05 06:22
      TServerSocket의 Port를 100000으로 하고 Active=true해 놓은후에 netstat -a 해보세요 TCP 에...
    • 석주현
      2008.06.04 22:54
      디버깅 하시면서 쿼리의 결과가 제대로 나오는지 확인 부터 해보세요. 디비 구성이 어떤지 모르지만 ...
    • 이정욱
      2008.06.04 22:57
      저도 가끔 이런경우를 보는데, 아마도 for 문의 최적화 때문일 수도 있습니다. 디버깅을 해보시면, co...
    • 석주현
      2008.06.04 23:20
      아 그러고 보니 정욱님 말씀 처럼 최적화에 따라 달라지는 경우가 있습니다. 음 저 같으면요. v...