Q&A

  • StringGrid의 특정셀값(숫자값)을 바꾸었을때 Column합의 값 자동변경 ?
제가 구현한 것은...

DBgrid의 특정 레코드를 클릭하여 StringGrid로 값을 넘겨준후

StringGrid의 특정셀(숫자값셀)의 값을 바꾸면 그 Column의 세로로 입력되어 있는

값들의 합을 for문으로 더하여 Panel.Caption 에 표시해주는 것입니다.



StringGrid의 특정셀에서 OnKey 이벤트에서 key=#13 일때 합을 구하는 것 말고

값을 입력후에 마우스로 다른 셀을 클릭해도 한Column의 세로 합계값이 바뀌게 하려면

OnDrawCell에서 처리하면 되더군요





OnDrawCell안에 입력해 넣은 구문은



대략...---------------------------------------

Col_hab := 0;



If ACol=4 then

begin

for R := 1 to SGrid1.RowCount - 1 do

Col_hab := Col_hab + StrToInt(StringGrid1(5,R)); <--- 이부분에서 에러

end;

Panel_hab.Caption := IntToStr(Col_hab);

end;



인데... ----------------------------------------



OnDrawCell안에 처리된 문이라서

맨처음 얘기한듯이

DBgrid의 특정레코드를 클릭하여 StringGrid의 레코드를 늘리면서

값이 입력될때도 이 구문을 실행하죠...

그래서 Column의 합도 자동적으로 같이 변하여 잘 되는데...



*그런데 문제는*

StringGrid의 Row수가 StringGrid의 크기보다 많으면 수직 스크롤바가 생기면서

한레코드 추가때마다 처음레코드가 위로 스크롤 되죠.. 말하자면



처음 스크롤바가 생기는 순간 이상하게도

위의 문장에서 StringGrid(5,R) 값은 읽어오는데

<위소스중 ('<--이 부분에러')부분>



StrToInt 함수에서 에러가 나더군요



OnDrawCell 이벤트는 넘 어렵군요...



긴 내용 읽어주신 분들께 감사드리며 아시는 분 좀 갈켜주세요...

4  COMMENTS
  • Profile
    김하늘 2000.12.12 10:08
    -- StrToInt 대신에 아래 함수를 만들어 써보지여

    -- StrToInt에서 나는 에러는 발생하진 않을겁니다.

    __ StrToInt 부분을 ValInt 로 바꾸어 써보지여...

    -- 그럼...

    Functon ValInt(aValue: String): Integer;

    var

    lr_code: Integer;

    Begin

    val(aValue, result, lr_code);

    if lr_code <> 0 Then Result := 0;

    End;



    급궁금 wrote:

    > 제가 구현한 것은...

    > DBgrid의 특정 레코드를 클릭하여 StringGrid로 값을 넘겨준후

    > StringGrid의 특정셀(숫자값셀)의 값을 바꾸면 그 Column의 세로로 입력되어 있는

    > 값들의 합을 for문으로 더하여 Panel.Caption 에 표시해주는 것입니다.

    >

    > StringGrid의 특정셀에서 OnKey 이벤트에서 key=#13 일때 합을 구하는 것 말고

    > 값을 입력후에 마우스로 다른 셀을 클릭해도 한Column의 세로 합계값이 바뀌게 하려면

    > OnDrawCell에서 처리하면 되더군요

    >

    >

    > OnDrawCell안에 입력해 넣은 구문은

    >

    > 대략...---------------------------------------

    > Col_hab := 0;

    >

    > If ACol=4 then

    > begin

    > for R := 1 to SGrid1.RowCount - 1 do

    > Col_hab := Col_hab + StrToInt(StringGrid1(5,R)); <--- 이부분에서 에러

    > end;

    > Panel_hab.Caption := IntToStr(Col_hab);

    > end;

    >

    > 인데... ----------------------------------------

    >

    > OnDrawCell안에 처리된 문이라서

    > 맨처음 얘기한듯이

    > DBgrid의 특정레코드를 클릭하여 StringGrid의 레코드를 늘리면서

    > 값이 입력될때도 이 구문을 실행하죠...

    > 그래서 Column의 합도 자동적으로 같이 변하여 잘 되는데...

    >

    > *그런데 문제는*

    > StringGrid의 Row수가 StringGrid의 크기보다 많으면 수직 스크롤바가 생기면서

    > 한레코드 추가때마다 처음레코드가 위로 스크롤 되죠.. 말하자면

    >

    > 처음 스크롤바가 생기는 순간 이상하게도

    > 위의 문장에서 StringGrid(5,R) 값은 읽어오는데

    > <위소스중 ('<--이 부분에러')부분>

    >

    > StrToInt 함수에서 에러가 나더군요

    >

    > OnDrawCell 이벤트는 넘 어렵군요...

    >

    > 긴 내용 읽어주신 분들께 감사드리며 아시는 분 좀 갈켜주세요...

  • Profile
    급궁금 2000.12.12 18:57
    김하늘 님 감사합니다.

    아래대로 해보니 잘 해결되더군요

    StringGrid가 StringGrid창보다 Row값이 커졌을때, 즉 동적인 좌표? 를 갖을때의

    StrToInt함수처리가 먼가 맞지않아 그런것 같은데

    좀더 부연설명을 해주시면 더 고맙겠네요...

    그럼...





    김하늘 wrote:

    > -- StrToInt 대신에 아래 함수를 만들어 써보지여

    > -- StrToInt에서 나는 에러는 발생하진 않을겁니다.

    > __ StrToInt 부분을 ValInt 로 바꾸어 써보지여...

    > -- 그럼...

    > Functon ValInt(aValue: String): Integer;

    > var

    > lr_code: Integer;

    > Begin

    > val(aValue, result, lr_code);

    > if lr_code <> 0 Then Result := 0;

    > End;





  • Profile
    김상호 2000.12.12 07:17
    StrToInt(StringGrid1(5,R)) 은 StrToInt(StringGrid1.cells[5,R]) 로 해야 할것 같고요..



    에서 에러가 나는것은 StrToint(StringGrid1.cells[5.r])가 공백일때 발생한것 같습니다.

    try..except..end 문을 사용하여 에러발생을 막으십시오.

    for R := 1 to SGrid1.RowCount - 1 do begin

    try

    Col_hab := Col_hab + StrToInt(StringGrid1.cells[5,R]); <--- 이부분에서 에러

    except

    //여기에 에러발생부분에 대한 설명을 기록해 줘도 됩니다.

    // Col_hab := Col_hab+0;

    end;

    end;





    그리고

    for R := 1 to SGrid1.RowCount - 1 do

    Col_hab := Col_hab + StrToInt(StringGrid1(5,R)); <--- 이부분에서 에러



    부분에서 SGrid1 이 맞나요?, 아니면 StringGrid1 이 맞나요?



    프로그램을 다시 확인해 보세요,,..





    급궁금 wrote:

    > 제가 구현한 것은...

    > DBgrid의 특정 레코드를 클릭하여 StringGrid로 값을 넘겨준후

    > StringGrid의 특정셀(숫자값셀)의 값을 바꾸면 그 Column의 세로로 입력되어 있는

    > 값들의 합을 for문으로 더하여 Panel.Caption 에 표시해주는 것입니다.

    >

    > StringGrid의 특정셀에서 OnKey 이벤트에서 key=#13 일때 합을 구하는 것 말고

    > 값을 입력후에 마우스로 다른 셀을 클릭해도 한Column의 세로 합계값이 바뀌게 하려면

    > OnDrawCell에서 처리하면 되더군요

    >

    >

    > OnDrawCell안에 입력해 넣은 구문은

    >

    > 대략...---------------------------------------

    > Col_hab := 0;

    >

    > If ACol=4 then

    > begin

    > for R := 1 to SGrid1.RowCount - 1 do

    > Col_hab := Col_hab + StrToInt(StringGrid1(5,R)); <--- 이부분에서 에러

    > end;

    > Panel_hab.Caption := IntToStr(Col_hab);

    > end;

    >

    > 인데... ----------------------------------------

    >

    > OnDrawCell안에 처리된 문이라서

    > 맨처음 얘기한듯이

    > DBgrid의 특정레코드를 클릭하여 StringGrid의 레코드를 늘리면서

    > 값이 입력될때도 이 구문을 실행하죠...

    > 그래서 Column의 합도 자동적으로 같이 변하여 잘 되는데...

    >

    > *그런데 문제는*

    > StringGrid의 Row수가 StringGrid의 크기보다 많으면 수직 스크롤바가 생기면서

    > 한레코드 추가때마다 처음레코드가 위로 스크롤 되죠.. 말하자면

    >

    > 처음 스크롤바가 생기는 순간 이상하게도

    > 위의 문장에서 StringGrid(5,R) 값은 읽어오는데

    > <위소스중 ('<--이 부분에러')부분>

    >

    > StrToInt 함수에서 에러가 나더군요

    >

    > OnDrawCell 이벤트는 넘 어렵군요...

    >

    > 긴 내용 읽어주신 분들께 감사드리며 아시는 분 좀 갈켜주세요...

  • Profile
    급궁금 2000.12.12 19:08
    김상호 님 요번에도 답변을 주셔서 감사하군요...

    그런데 제가 질문에서 올린 소스는 질문내용 타이핑하면서

    잘못쓴것이구요...(Cells 빠뜨리고,StringGrid1를 SG1으로 표기한것)



    그리고 김상호님이 제안하신 에러처리방법은

    제가 질문한 의도하고는 상관이 없네요..



    왜냐하면 dbgrid의 한레코드를 클릭하여 StringGrid로 값을 한레코드씩 전달할때

    StringGrid의 크기보다 Row의 크기가 작을때는 잘되거든요...

    값전달은 항상 잘되고요...

    그리고 except문으로 다른 처리문을 코딩하여 에러를 처리하는 방식이 필요한 것이 아니고 StringGrid의 Row의 크기가 StringGrid의 창크기보다 높아져 스크롤이 될때

    전달해준 값들을 StrToInt함수를 써서 숫자로 변환하여 계산하려 할때의 문제이기 때문이죠



    추측컨데 StringGrid Cell의 동적인 좌표?를 갖을때 StrToInt함수처리와의 문제같거든요...



    위 김하늘 님의 답변으로 해결이
    • 김용배
      2000.12.14 19:00
      김오성 wrote: > 모뎀을 이용한 데이타 송수신을 하고 싶습니다. > 제에게 도움을 꼭 주세요 제발 ... >...
    • 김용배
      2000.12.12 23:32
      김오성 wrote: > 모뎀을 이용한 데이타 송수신을 하고 싶습니다. > 제에게 도움을 꼭 주세요 제발 ... >...
    • 서희
    • 2000.12.12 19:50
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 방경주
      2000.12.12 22:15
      오라클이고 필드가 date타입이라면 쿼리문에서 바꿔 주심 어떨까여?^^ Select to_char('yyyymmddhhnn',p...
    • 권경미
      2000.12.12 20:25
      서희 wrote: > 안녕하세요. > > 중략 > > while not(query2.Eof) do > begin > ...
    • 권경미
      2000.12.15 20:55
      데이터를 입력하는 부분에 String형태로 바꿀때... 제대로 포맷을 안맞추신거 같네요... 움...구럼 ...
    • 서희
      2000.12.12 20:39
      권경미 wrote: > 서희 wrote: > > 안녕하세요. > > > > 중략 > > > > while not(query2.Eof) do ...
    • 정건호
    • 2000.12.12 19:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 권경미
      2000.12.12 20:27
      정건호 wrote: > 질문 그대로 입니다. > 보통 메뉴는 디자인 시간에 작성하는데, > 실행시간에 메뉴를 ...
    • 천명
    • 2000.12.12 19:12
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 초보
    • 2000.12.12 19:01
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 델초
    • 2000.12.12 16:41
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최은석
      2000.12.12 18:04
      여기에 이런글 올리시면 안되지요......... 델초 wrote: > delphi 5 를 싸게 사는 방법이나 파실분 ...
    • youngae
    • 2000.12.12 16:23
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김용배
      2000.12.12 18:41
      youngae wrote: > listview에서 report형식으로 준 상황에서 옆으로 subItem을 증가시키고 > 밑으로는 ...
    • ...
      2000.12.12 18:29
      Reg.OpenKey('', True); 가 빠졌네요. > Reg.GetKeyNames(Str); 전에 넣어보세요. Help 로 자세...
    • bingyou
    • 2000.12.12 11:05
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 황광일
      2000.12.12 17:31
      그러니깐... 폼은 필요없다 이거져.. 클래스 공부만 일단 하고 싶다는 겁니다..그렇죠? 음... 일단은 ...
    • bingyou
      2000.12.12 18:00
      친절한 가르쳐주셔서 감사합니다. 앞으로도 꽤 많은 질문들을 하게 될것 같은데요, 시간나시는대로 도와주...
    • 미남
    • 2000.12.12 07:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 컴맹...
      2000.12.12 18:55
      windows 2000은 사용자마다 설정파일을 다르게 저장하구 있져.. 그래서 델파이의 컴포넌트가 Loading이 ...
    • 초보
    • 2000.12.12 06:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김상호
      2000.12.12 06:49
      pause 버튼 이벤트에 다음과 같이 해보세요.. if pause.tag = 0 then begin timer1.enabled := fal...
    • 급궁금
    • 2000.12.12 05:06
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김하늘
      2000.12.12 10:08
      -- StrToInt 대신에 아래 함수를 만들어 써보지여 -- StrToInt에서 나는 에러는 발생하진 않을겁니다. __...
    • 급궁금
      2000.12.12 18:57
      김하늘 님 감사합니다. 아래대로 해보니 잘 해결되더군요 StringGrid가 StringGrid창보다 Row값이 커졌을...
    • 김상호
      2000.12.12 07:17
      StrToInt(StringGrid1(5,R)) 은 StrToInt(StringGrid1.cells[5,R]) 로 해야 할것 같고요.. 에서 에러가 ...
    • 급궁금
      2000.12.12 19:08
      김상호 님 요번에도 답변을 주셔서 감사하군요... 그런데 제가 질문에서 올린 소스는 질문내용 타이핑하면...
    • 김규억
    • 2000.12.12 04:43
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김상호
      2000.12.12 06:54
      익스플로워에서 인터넷옵션에 보안설정에서 변경해야 할것 같은데요.. [보안] 옵션에서 [인터넷] 보안...
    • 최은석
      2000.12.12 06:30
      스트링그리드를 사용하세요..... OnMouseWheelDown OnMouseWheelUp 이벤트에 코딩을 해주세요 기본으...
    • 최재호
    • 2000.12.12 02:48
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 지나가다
      2000.12.19 01:23
      최재호 wrote: > 프로그램 실행시(여러개의 Wav File 을 순서대로 Media Player를 통해서 플레이시키는) ...
    • 바보
      2000.12.13 04:03
      안녕하세요!! 델맹 바보 입니다. 꾸벅!! 제 생각에는 AutoOpen 떼문이라고 생각이드네요!! 바보라서 잘...
    • 최용일
      2000.12.12 04:28
      안녕하세요. 최용일입니다. 헐헐~ 진짜 오랜만에 답변을 쓰네요.... 고거 제가 몇일전에 강좌란에다 ...
    • 영경이
    • 2000.12.12 02:32
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 컴맹...
      2000.12.12 19:01
      순서는여... Create -> show -> Active 순이구여... create는 말그대로 생성될때... show는 이해하시겠...
    • 김종언
      2000.12.12 02:55
      님이 생각하시는게 비슷하긴 하지만 약간은 차이가 있습니다. 생성 -> 보여주기 (create -> show) ...
    • 영경이
      2000.12.12 05:21
      글쿤여.. 제 생각이 좀 틀렸네요.. 고맙습니다. ~~^O^~~