Q&A

  • [re] [초간단] 폼.show시 Label이 안나와요..(실행중)
하고자 하는 것은 위 함수 내에서 fmInfoProgress를 보여주고 싶습니다.
fmInfoProgress는 '실행중입니다'라는 label 하나 있는데
위처럼 하면 label이 안나오는 군요..

procedure p지정휴무_계획서(tmpDate : TDate); 함수에서는 엑셀을 열었다 저장하고 닫습니다..

procedure p지정휴무_계획서(tmpDate : TDate);
begin
  fmInfoProgress.Show;

const
  xlCenter = -4108; //Excel 실행 -> VBA -> 개체 찾아보기
  xlLeft = -4131;
  xlContinuous = 1;
  xlDash = -4115;
  xlDashDot = 4;
  xlDashDotDot = 5;
  xlDot = -4118;
  xlDouble = -4119;
  xlLineStyleNone = -4142;
  xlSlantDashDot = 13;
  xlThick = 4;
  FIX_EXCEL_COLUMN_NUM = 3;
var
  ExcelApp, ExcelWorkSheet, ExcelWorkBook, ExcelRange: OleVariant;
  iFilePath : ansiString;
  tmpString, strFileName : String;
  i, j, k, m, tmpValue : Integer;
  nManCount, n3HCount, isInteger, n3H1, n3H2 : Integer;
  tmpDay, nRowCount, nCycle, nYok, nYokCheckCount : Integer;
  wdYear, wdMonth, wdDay : Word;
  aPart1, aPart2, aPart3, aYoil : aTmp3H;
  aYok : Array[0..100] of String;
begin
  fmInfoProgress.Show; <======================================

  tmpDay := Date_DaysInMonth(tmpDate);
  ShortDateFormat:= 'yyyy년 mm월';
  iFilePath:= ExtractFilePath(Application.ExeName);
  strFileName := fGetExcelExt('지정휴무 계획표');

  pGetManData;

  for i := 0 to Length(aYok) - 1 do
  begin
    aYok[i] := '';
  end;

  nYok := 0;
  i := 0;
  while i < Length(aReadManData) - 1 do
  begin
    nYokCheckCount := 0;

    for j := 0 to Length(aYok) - 1 do
    begin
      if aYok[j] = aReadManData[i] then
      begin
        nYokCheckCount := nYokCheckCount + 1;
      end
    end;

    if nYokCheckCount = 0 then
    begin
      aYok[nYok] := aReadManData[i];
      inc(nYok);
    end;

    i := i + 15;
  end;

  try
    ExcelApp := CreateOLEObject('Excel.Application');
    ExcelApp.Visible := False;
    ExcelApp.DisplayAlerts := False; //Quit 할때 저장여부 묻는 Dialog 안띄우게 함

    ExcelWorkBook := ExcelApp.WorkBooks.Add;
    ExcelWorkSheet := ExcelApp.WorkBooks[1].Sheets[3].Select;
    ExcelWorkSheet := ExcelApp.ActiveSheet.Delete;
    ExcelWorkSheet := ExcelApp.WorkBooks[1].Sheets[2].Select;
    ExcelWorkSheet := ExcelApp.ActiveSheet.Delete;

    for nYokCheckCount := 0 to nYok - 2 do
    begin
      ExcelWorkSheet := ExcelApp.Sheets.Add(after := ExcelApp.ActiveSheet);
    end;
  Except

  end;

  for nYokCheckCount := 0 to nYok - 1 do
  begin
    ExcelWorkSheet := ExcelApp.WorkBooks[1].Sheets[nYokCheckCount + 1].Select;
    ExcelWorkSheet := ExcelApp.ActiveSheet;

    Try
      ExcelApp.ActiveSheet.Name := aYok[nYokCheckCount] + '역';
      nRowCount := fGetYokMan(aYok[nYokCheckCount]) + 6;

      ExcelWorksheet.Columns.HorizontalAlignment := xlCenter;

      tmpString := fGetExcelColumnName(tmpDay + 3) + IntToStr(nRowCount);

      ExcelWorkSheet.Range['A2', tmpString].Cells.Borders.LineStyle :=xlContinuous;

      ExcelWorkSheet.Cells[1, 1].Value := DateToStr(tmpDate) + ' 지정휴무 계획표';
      tmpString := fGetExcelColumnName(tmpDay + 3) + '1';
      ExcelRange := ExcelWorksheet.Cells[1, 1];
      ExcelRange.ColumnWidth := 5;
      ExcelRange.RowHeight := 48;
      ExcelWorkSheet.Range['A1', tmpString].Select;
      ExcelWorkSheet.Range['A1', tmpString].Font.Bold := True;
      ExcelWorkSheet.Range['A1', tmpString].Font.Size := 22;
      ExcelApp.Selection.Merge;

      ExcelWorkSheet.Cells[2, 1].Value := aYok[nYokCheckCount] + '역';
      ExcelWorkSheet.Range['A2', 'C2'].Select;
      ExcelApp.Selection.Merge;

      tmpString := fGetExcelColumnName(tmpDay + 3) + '2';
      ExcelRange.Range['D2', tmpString].Select;
      ExcelApp.Selection.Merge;

      ExcelWorkSheet.Cells[3, 1].Value := '근무조';
      ExcelWorkSheet.Range['A3', 'A4'].Select;
      ExcelApp.Selection.Merge;

      ExcelWorkSheet.Cells[3, 2].Value := '직명';
      ExcelRange := ExcelWorksheet.Cells[3, 2];
      ExcelRange.ColumnWidth := 5;
      ExcelWorkSheet.Range['B3', 'B4'].Select;
      ExcelApp.Selection.Merge;

      ExcelWorkSheet.Cells[3, 3].Value := '성명';
      ExcelRange := ExcelWorksheet.Cells[3, 3];
      ExcelRange.ColumnWidth := 7;
      ExcelWorkSheet.Range['C3', 'C4'].Select;
      ExcelApp.Selection.Merge;

      ExcelWorkSheet.Cells[nRowCount - 1, 1].Value := '비  고';
      ExcelWorkSheet.Range['A' + IntToStr(nRowCount - 1), 'C' + IntToStr(nRowCount)].Select;
      ExcelApp.Selection.Merge;

      ExcelWorkSheet.Cells[(nRowCount - 1), 4].Value := '● : 쉬는 지정휴무, ■ : 근무하는 지정휴무';
      ExcelWorkSheet.Range['D' + IntToStr(nRowCount - 1), fGetExcelColumnName(tmpDay + 3) + IntToStr(nRowCount - 1)].Select;
      ExcelApp.Selection.Merge;
      ExcelWorksheet.Range['D' + IntToStr(nRowCount - 1), fGetExcelColumnName(tmpDay + 3) + IntToStr(nRowCount - 1)].HorizontalAlignment := xlLeft;

      ExcelWorkSheet.Cells[nRowCount, 4].Value := '지정휴일 - 근무일 7일 미만 :  없음, 근무일 7일 이상 21일 미만 : 1일 , 근무일 21일 이상 : 2일';
      ExcelWorkSheet.Range['D' + IntToStr(nRowCount), fGetExcelColumnName(tmpDay + 3) + IntToStr(nRowCount)].Select;
      ExcelApp.Selection.Merge;
      ExcelWorksheet.Range['D' + IntToStr(nRowCount), fGetExcelColumnName(tmpDay + 3) + IntToStr(nRowCount)].HorizontalAlignment := xlLeft;

      tmpString := fGetExcelColumnName(tmpDay + 3) + '1';
      ExcelWorkSheet.Range['A1', tmpString].Select;

      i := FIX_EXCEL_COLUMN_NUM + 1;
      while i <= (tmpDay + FIX_EXCEL_COLUMN_NUM) do
      begin
        ExcelRange := ExcelWorkSheet.Cells[1, i];
        ExcelRange.ColumnWidth := 2;
        i := i + 1;
      end;

      i := 2;
      while i <= nRowCount do
      begin
        ExcelRange := ExcelWorkSheet.Cells[i, 1];
        ExcelRange.RowHeight := 20;
        inc(i);
      end;

      j := 4;
      for i := 1 to tmpDay do
      begin
        ExcelWorkSheet.Cells[3, j] := i;
        inc(j);
      end;

      aYoil := fGet요일(aReadIn3H[2]);

      j := 4;
      for i := 0 to (tmpDay - 1) do
      begin
        if (aYoil[i] = '토') or (aYoil[i] = '일') then
        begin
          ExcelWorkSheet.Cells[4, j].Font.Color := clRed;
        end;
        ExcelWorkSheet.Cells[4, j] := aYoil[i];
        inc(j);
      end;

      aPart1 := f근무스케줄(aReadIn3H[2], 1);
      aPart2 := f근무스케줄(aReadIn3H[2], 2);
      aPart3 := f근무스케줄(aReadIn3H[2], 3);

      j := 5;
      for nCycle := 1 to 3 do
      begin
        i := 5;

        while i <= Length(aReadManData) do
        begin
          if TryStrToInt(aReadManData[i], isInteger) then
          begin
            if aYok[nYokCheckCount] = aReadManData[i - 5] then
            begin
              if StrToInt(aReadManData[i]) = nCycle then
              begin
                ExcelWorkSheet.Cells[j, 1] := aReadManData[i];
                ExcelWorkSheet.Cells[j, 2] := aReadManData[i - 1];
                ExcelWorkSheet.Cells[j, 3] := aReadManData[i - 3];
                inc(j);
              end;
            end;
          end;
          i := i + 15;
        end;
      end;

      j := 5;
      for nCycle := 1 to 3 do
      begin
        i := 5;
        k := 4;
        while i <= Length(aReadManData) do
        begin
          if TryStrToInt(aReadManData[i], isInteger) then
          begin
            if aYok[nYokCheckCount] = aReadManData[i - 5] then
            begin
              if StrToInt(aReadManData[i]) = nCycle then
              begin
                n3H1 := f쉬는지정휴무(aReadManData[i - 4]);
                n3H2 := f근무지정휴무(aReadManData[i - 4]);

                tmpValue := StrToInt(aReadManData[i]);
                case tmpValue of
                  1:
                  begin
                    for m := 1 to tmpDay do
                    begin
                      if m = n3H1 then
                      begin
                        ExcelWorkSheet.Cells[j, k].Font.Color := clBlue;
                        ExcelWorkSheet.Cells[j, k] := '●';
                        inc(k);
                      end
                      else if m = n3H2 then
                      begin
                        ExcelWorkSheet.Cells[j, k].Font.Color := clRed;
                        ExcelWorkSheet.Cells[j, k] := '■';
                        inc(k);
                      end
                      else
                      begin
                        ExcelWorkSheet.Cells[j, k] := aPart1[m - 1];
                        inc(k);
                      end;
                    end;
                  end;
                  2:
                  begin
                    for m := 1 to tmpDay do
                    begin
                      if m = n3H1 then
                      begin
                        ExcelWorkSheet.Cells[j, k].Font.Color := clBlue;
                        ExcelWorkSheet.Cells[j, k] := '●';
                        inc(k);
                      end
                      else if m = n3H2 then
                      begin
                        ExcelWorkSheet.Cells[j, k].Font.Color := clRed;
                        ExcelWorkSheet.Cells[j, k] := '■';
                        inc(k);
                      end
                      else
                      begin
                        ExcelWorkSheet.Cells[j, k] := aPart2[m - 1];
                        inc(k);
                      end;
                    end;
                  end;
                  3:
                  begin
                    for m := 1 to tmpDay do
                    begin
                      if m = n3H1 then
                      begin
                        ExcelWorkSheet.Cells[j, k].Font.Color := clBlue;
                        ExcelWorkSheet.Cells[j, k] := '●';
                        inc(k);
                      end
                      else if m = n3H2 then
                      begin
                        ExcelWorkSheet.Cells[j, k].Font.Color := clRed;
                        ExcelWorkSheet.Cells[j, k] := '■';
                        inc(k);
                      end
                      else
                      begin
                        ExcelWorkSheet.Cells[j, k] := aPart3[m - 1];
                        inc(k);
                      end;
                    end;
                  end;
                end;
              inc(j);
              end;
            end;
          end;
        k := 4;
        i := i + 15;
        end;
      end;
    Except
      fmInfoProgress.Hide;

      MessageDlg('파일 저장 실패!', MtWarning, [mbok], 0);

      ExcelWorkBook.Close;
      ExcelApp.Quit;
      ExcelApp := unAssigned;

      Abort;
    end;
  end;
  ExcelWorkSheet := ExcelApp.WorkBooks[1].Sheets[1].Select;
  ExcelWorkSheet := ExcelApp.ActiveSheet;

  ExcelWorkBook.SaveAs(iFilePath + DateToStr(tmpDate) + ' ' + strFileName);

  ExcelWorkBook.Close;
  ExcelApp.Quit;
  ExcelApp := unAssigned;

  fmInfoProgress.Hide;

  showMessage('기안용 엑셀파일이 저장 되었습니다.');
end;

3  COMMENTS
  • Profile
    구창민 2009.08.12 20:49
    아래 코드 한줄을 추가해 보세요..

    Application.ProcessMessages;
    fmInfoProgress.Show;

    즐거운 프로그래밍 하시구요..
  • Profile
    김병윤 2009.08.12 22:15
    Application.ProcessMessages;
    요놈이 루프 안에 있어야 원하시는 결과를 얻으실 수 있을 듯 합니다. ^^
  • Profile
    Hyphen 2009.08.12 22:56
    fmInfoProgress.Show;
    Application.ProcessMessages;

    순서를 이렇게 하니까 보이는 군요.. 대단히 감사합니다.. 복 받으세요~
    • 이성찬
    • 2009.08.24 03:47
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.08.24 18:34
      안녕하세요.. 코드는 문제 없어보이는데.. 개발하시는 PC 의 OS 가 비스타가 아닌지요? 비스타의 경우...
    • 이성찬
      2009.08.26 06:22
      KDDG_MIN//답변 감사합니다. 하지만 윈도 xp sp3인걸요ㅠ
    • 구창민
      2009.08.26 22:19
      안녕하세요.. 제가 TurboDelphi 가 없어서 테스를 못해보았는데.. 정품으로 테스트시 Vista, XP 에서 ...
    • 이성찬
      2009.08.27 02:47
      KDDG_MIN//아, 여기서도 작동 잘 됩니다 ^^ 감사합니다. 아직 배우는중이라 이런면에서 좀 부족한듯 하네...
    • 박진수
    • 2009.08.21 23:54
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2009.08.23 09:22
      폴더에 대한 옵션이 많아서 그런가 봅니다. 비스타에선 기본적으로 폴더를 생성하면 [고급특성]에서 '...
    • 치꼬
      2009.08.22 02:51
      배우는 단계에서는 그닥 차이점은 중요하지 않을듯합니다.
    • 윤영훈
    • 2009.08.20 04:14
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2009.08.20 20:31
      ShowMessage대신에 MessageBox나 MessageDlg함수를 쓰세요...
    • 장성호
      2009.08.21 00:49
      //다음과 같이 만들어서.. procedure ShowMessageEx(const sTitle:String;const sMsg:String); b...
    • 성더기
      2009.08.22 02:32
      위에 방법도 있구요 델파이 메뉴의 프로젝트 > 프로젝트 옵션 > 프로그램 타이틀을 다른 바꾸시면...
    • 장성호
      2009.08.22 10:00
      Application 타이틀을 바꿔서도 가능하네요 다음과 같이 Application.Title을 변경해서도 구현이 가능...
    • 윤영훈
      2009.08.25 20:13
      감사합니다~ 한번씩 다 확인해고 제일 맞는 걸로 사용해야겠네요. 도움 주신 분들 정말정말 감사해요~
    • 최용일
      2009.08.18 18:43
      상용이구요... 아래 홈페이지에서 구매하실 수 있습니다. http://www.devart.com/dac.html
    • 조상은
      2009.08.18 19:25
      최용일님 정말 감사합니다. 알려주신 사이트 들어가서 보니 SQL에 직접 붙일 때 사용하는 컴포넌트이...
    • 조상은
      2009.08.18 20:12
      위의 글을 작성하다보니 install package에서 runtime packages 에 정의된 목록이 의심이 가서 다른 정상...
    • 문병구
    • 2009.08.15 00:11
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 백록화
      2009.08.15 09:16
      흠...보통 스캐너에서 바코드번호와 엔터값이 넘어옵니다. 따로 자릿수 처리를 할 필요가 없을껀데요.....
    • 아르스
      2009.08.18 00:15
      백록화 님의 말씀 처럼 OnKeyPress 나 OnKeyDown 이벤트에 if Key = #13 then begin ..... end; 또는 i...
    • 문병구
      2009.08.18 01:21
      맞네요..제가 착각을 했네요... 바코드 값이 읽어지는 것은 마치 키보드에 값을 넣고 모두 넣은 다음 엔...
    • 김동원
    • 2009.08.14 18:55
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.08.15 02:41
      안녕하세요.. 우선 그 네개의 TMemo 콘트롤의 크기가 동일하다는 가정하에 아래 예제를 따라해보세요....
    • 김동원
      2009.08.15 22:27
      초보가 이해하긴 대단히 어려운 내용같습니다.. 하여간, 좋은 답변주신데 대해 , 저의 감사의 마음을 ...
    • 구창민
      2009.08.17 19:09
      조금 설명을 달아 보겠습니다.. 음.. FOldMemoWndProc 는 함수포인터라고 하는건데.. 일종의 변수라고...
    • 김동원
      2009.08.19 02:08
      어렴풋이 이해할수있게되었습니다. 정말 감사합니다.그런데 실제로 코드를 입력해보니 아래와 같은 오류...
    • 구창민
      2009.08.19 18:25
      동원님.. 위에러만 봐서는 상황을 알 수 없고요... 에러나는 부분의 함수부분만이라도 떼서 올려보세요....
    • 김동원
      2009.08.21 01:03
      님께서 올려주신대로 새로 코드를 써서 만들었더니 잘 됩니다. 그런데 문제는 다른데 있었던것 같습니다. ...
    • cdrd
    • 2009.08.13 20:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김동원
      2009.08.14 18:24
      위 질문중 1번에서 ADO,BDE 두가지만 말씀드릴수 있습니다. 제가 경험한 것이 이것 뿐이라서요.(저는 초...
    • 현실환
      2009.08.18 21:16
      Antialiased Drawing을 할려면 GDI가 아닌 GDI+ 함수를 이용해야 합니다. 컴포넌트 자체는 TImage를 그...
    • 오델로
    • 2009.08.12 19:50
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김병윤
      2009.08.12 21:28
      10분에 천원이면...한시간에 6천원...하루에 14만4천원? 뜨억 @.@;; ㅋㅋ 설마 이렇게 많이 받지는 않겠죠...
    • 오델로
      2009.08.12 22:54
      아 완전 깔끔한 한방이네요 ㅠ.ㅠ 완전 감솨*10000000000000000000 소중하게 보겠습니다... Edit6....
    • 김병윤
      2009.08.13 01:46
      Format에 관해서 따로 알아두시는게 좋으실텐데 여기다 다 설명드리기는 좀 그렇고 대략...설명하자면 ...
    • 오델로
      2009.08.19 18:24
      이제서야 답변봤네요^^ 유용한 답변 감사합니다...^^ 복사해서 따로 저장후에 써야겠네요 ㅋ즐거운 하루...
    • 이훈
    • 2009.08.12 08:47
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.08.12 18:45
      코드를 올려보세요..
    • 김병윤
      2009.08.12 21:37
      폼.Hide 때문입니다. 번쩍하고 사라지지 않습니까? 폼.Show; 로 폼을 호출하면 그 아래 코드까지 일사...
    • Hyphen
    • 2009.08.12 20:12
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.08.12 20:49
      아래 코드 한줄을 추가해 보세요.. Application.ProcessMessages; fmInfoProgress.Show; 즐거운 ...
    • 김병윤
      2009.08.12 22:15
      Application.ProcessMessages; 요놈이 루프 안에 있어야 원하시는 결과를 얻으실 수 있을 듯 합니다. ^^
    • Hyphen
      2009.08.12 22:56
      fmInfoProgress.Show; Application.ProcessMessages; 순서를 이렇게 하니까 보이는 군요.. 대단히 ...
    • 치꼬
      2009.08.12 06:21
      내용은 정확히 파악은 잘 안되지만요. 위의 문장이 안되는건.. 말그대로 edit2.text 가 '' 것이 아니라...
    • 구창민
      2009.08.12 19:15
      안녕하세요.. 아래와 같은 문자열을 날짜로 치환하는 문장으로 해결하실수 있을거 같네요.. if Str...
    • 오델로
      2009.08.12 19:38
      답변 무한감사드립니다^^;; 아직 완전 백지상태라서 무작정 삽들고 파대기 시작하는중이라 답답합니다...
    • 백록화
      2009.08.11 21:32
      리더기가 시리얼통신을 사용한다면 관련 시리얼통신 콤포넌트에 데이터읽기 이벤트에서 제어를 해주심돼...
    • KDDG_Apine
      2009.08.12 04:12
      밑에 같이 id 컴포넌트를 사용하면 됩니다. ^^ 제가 사용했던부분인데.. 될겁니다. var nDate,...
    • 김지호
      2009.08.24 18:27
      답변 감사합니다 ^^