블로그 이미지

레몬도리 LemonDory

개발자의 이야기

댓글을 달아 주세요


우연찮은 기회에 Crystal Report를 사용하게 되었다.
처음 사용하는 거라서 완전 삽질 할거라는 예상과 달리 사용하긴 상당히 편했다.
조금 아쉬운거라면 Crystal Report를 사용하는 사람들이 적어 질문을 하기도, 검색해서 자료 찾아보기가 여간 힘들지 않은게 아니다. 드디어 Crystal Report페이지를 만들고 출력할 수 있는 Form을 만들어 이제 빌드해서 배포하는 것만 남았었다.

그런데 일은 여기서 시작되었다. 프로젝트를 빌드하고 배포하려고 내컴퓨터에 설치하고 돌리는데 이상없이 잘 되었다 그런데 !!!!!!!!!! 다른 사람에게 설치하였더니 실행시키자마자 Exception 발생 .....

위에 말했던 것처럼 사용할땐 무지 편하다. 하지만 배포할 땐 모르는 사람은 한참 삽질하게 만드는 Crystal Report

그리하여 혹시 사용하는 사람이 있다면 나처럼 삽질하는 것을 방지하기 위해 글을 남겨본다.

방법은 그리 어렵지 않다.

먼저 C:\C:\Program Files\Common Files\Merge Modules폴더에 보면 msm파일이 많다.
이걸 다쓰는건 아니다 Microsoft_VC80_ATL_x86.msm, policy_8_0_Microsoft_VC80_ATL_x86.msm 두개 파일이 필요하다


이 두개의 파일을 설치프로젝트에 추가한다.

추가한뒤 한가지 더 남았다.
이 파일을 찾느라 무지 고생한거같다.
사용하는 사람들이 없다보니 하루 종일 찾았던 것 같다.
바로 CrystalReportsRedist2005_x86.msm 이다.
원래 이 파일명인지는 모르겠지만 이 파일이 있어야 배포했을 때 이상없이 작동한다.


위에 파일처럼 모듈로 추가하면 이제 빌드하여 배포하면 된다.

이 파일에 라이센스가 있는지 알 수 없기 때문에 쪽지나 메일주소를 남겨주시면 메일로 보내드리겠습니다.^^

이상 저의 허공에 삽질 했던 이야기였습니다.
블로그 이미지

레몬도리 LemonDory

개발자의 이야기

댓글을 달아 주세요

   
        private void ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (GetForm("Incident") == false)
            {
                Incident incidentForm = new Incident();
                incidentForm.MdiParent = this;
                incidentForm.Show();
            }
        }
        public Boolean GetForm(String SearchForm)
        {
            foreach (Form frmChildForm in this.MdiChildren)
            {
                if (frmChildForm.Name == SearchForm)
                {
                    frmChildForm.Activate();
                    return true;
                    break;
                } 
            }
            return false;
        }
블로그 이미지

레몬도리 LemonDory

개발자의 이야기

댓글을 달아 주세요

syntaxhighlighter를 tistory에 설치 하는 방법

syntaxhighter란 홈페이지에 있는 소스코드를 아래와 같이 색상으로 구문 강조를 해 주는 기능 입니다.

  1. #include <stdio.h>   
  2. int main( int argc, const char* argv[] )   
  3. {   
  4.     printf( "\nHello World\n\n" );   
  5. }  


우선 아래 주소에 가서 현재 최신 버전인 SyntaxHighlighter_1.5.1.rar를 다운 받습니다.
 
     http://code.google.com/p/syntaxhighlighter/

가기도 귀찮으신 분은 아래 파일을 다운로드 받으시면 됩니다.

압축을 풀면 아래와 같이 3개의 디렉토리가 나옵니다.

사용자 삽입 이미지

여기서 Styles디렉토리를 css파일이 있습니다. 그리고 scripts와 uncompressed는 같은 내용의 자바스크립트가 들어 있습니다. 다른점은 내용이 압축이 되어 있고 없고 차이 입니다.
올리 때는 둘 중에 하나를 선택해서 올리시면 됩니다. 개인적으로는 scripts에 있는 파일을 올리시길 권장 합니다. 조금이라도 페이지 로딩 속도를 빠르게 하는게 좋으니까요. ^^;;
사용자 삽입 이미지

이제는 스크립트 파일을 업로드 하고 편집을 해 보겠습니다. 먼저 tistory의 스킨 메뉴로 가서 [HTML/CSS]를 선택 합니다.
사용자 삽입 이미지

html/css편집 모드에서 [파일 업로드] 버튼을 눌러 줍니다.
사용자 삽입 이미지

위와 같이 scripts 디렉터리styles디렉터리에 있는 모든 파일을 올려 줍니다.
캡쳐 공간이 부족해서 clipboard.swf파일은 빠졌네요 ^^; 그 파일도 역시 올려 줍니다.

업로드가 끝나면 다시 [HTML/CSS] 편집 모드로 돌아 갑니다.
사용자 삽입 이미지
여기서 페이지 상단에 css를 포함 하는 부분에 다음 줄을 추가 해 줍니다.


  1. <link type="text/css" rel="stylesheet" href="./images/SyntaxHighlighter.css"></link>  

위에 줄을 복사 하시면 됩니다.
사용자 삽입 이미지

그리고 페이지 하단에 </body>태그 위에 아래 문장을 복사 해 줍니다.
여기서 포함하는 스크립트의 순서는 별 지장이 없습니다. 하지만, 가장 위에 있는 shCore.js 파일의 위치는 항상 위로 올라가야 정상적으로 동작하는 것만 주의해 주시면 됩니다.

  1. <script class="javascript" src="./images/shCore.js"></script>  
  2. <script class="javascript" src="./images/shBrushCSharp.js"></script>  
  3. <script class="javascript" src="./images/shBrushCpp.js"></script>  
  4. <script class="javascript" src="./images/shBrushCss.js"></script>  
  5. <script class="javascript" src="./images/shBrushDelphi.js"></script>  
  6. <script class="javascript" src="./images/shBrushJScript.js"></script>  
  7. <script class="javascript" src="./images/shBrushJava.js"></script>  
  8. <script class="javascript" src="./images/shBrushPhp.js"></script>  
  9. <script class="javascript" src="./images/shBrushPython.js"></script>  
  10. <script class="javascript" src="./images/shBrushRuby.js"></script>  
  11. <script class="javascript" src="./images/shBrushSql.js"></script>  
  12. <script class="javascript" src="./images/shBrushVb.js"></script>  
  13. <script class="javascript" src="./images/shBrushXml.js"></script>  
  14. <script class="javascript">  
  15. dp.SyntaxHighlighter.ClipboardSwf = './images/clipboard.swf';     
  16. dp.SyntaxHighlighter.HighlightAll('code');   
  17. </script>  

위와 같은 내용을 skin.html에 포함해 주시면, 설치는 끝났습니다.
그리고 여기 있는 모든 .js파일을 포함 하실 필요는 없습니다.
사용자 분이 주로 사용하는 언어만 넣어 주신다면, 로딩 속도가 조금이나마 빨라 지겠죠?
그렇다고 shCores.js파일은 빼지 마세요. 빼면 동작을 하지 않습니다.

이제는 설치가 끝났습니다. 마음껏 사용을 해 주시면 됩니다.

syntaxhighlighter 사용하기.

tistory에서 사용하기 위해서는 좀 귀찮습니다.
솔직히 기본 편집모드에서 편집하면서 사용하는것은 거의 힘이 듭니다.
복사해서 붙여넣기를 하는 방법으로 사용하시길 권장합니다.

먼저 사용하는 방법은 <pre>테그를 이용하는 방법과 <textarea>테그를 이용하는 방법등 2가지가 있습니다.
먼저 <pre>테그를 사용하는 방법 입니다.

  1. <pre name="code" class="c-sharp">  
  2. ... some code here ...   
  3. </pre>  

pre테그를 사용할 경우에느 <와 같은 html테그를 사용할 경우 &lt;와 같이 변환을 해서 사용해야 합니다. 테그가 좀 편하긴 하지만, 꺽쇠(<) 테그로 인해서 귀찮은 경우가 있습니다.
다음으로 <textarea> 테그를 사용하는 방법입니다.
  1. <textarea name="code" class="c#" cols="60" rows="10">  
  2. ... some code here ...   
  3. </textarea>  
<textarea>테그로 쓸 경우 귀찮은 <를 &lt;로변환 하지 않아도 됩니다.
못쓰는 경우는 내용물에 </textarea>를 쓰는 경우 빼고는 없습니다. 중간에 </textarea>를 쓰게 되면, 중간에 멈춰 버리게 되겠죠?
저 같은 경우에도 바로 위의 <textarea> 샘풀의 경우 내용물에 </textarea>가 들어가야 해서 에는 <pre>테그를 사용해서 표현 했습니다.
꼭 한가지가 답은 아닌가 적당하게 섞어서 사용하시면 되겠습니다.
하지만, 특별한 경우가 아니면, <textarea>테그를 사용하는 것을 권장합니다.

여기서 class뒤에 넣은 형태는 아래 표의 명칭을 보시고 넣으시면 됩니다.
언어  명칭
C++ cpp, c, c++
C# c#, c-sharp, csharp
CSS css
Delphi delphi, pascal
Java java
Java Script js, jscript, javascript
PHP php
Python py, python
Ruby rb, ruby, rails, ror
Sql sql
VB vb, vb.net
XML/HTML xml, html, xhtml, xslt

기본적이 사용법은 이렇게 이해 하시면 됩니다.

그런데, tistory에서는  edit상태에서는 입력을 하시면 입력한 값이 그대로 나와 버리고 코드로 나오지 않습니다.
사용자 삽입 이미지
이럴때는 edit모드 버튼을 눌러서 html모드로 편집해 주시면 됩니다.

편집 할 때 보기에는 별로 안 좋고 귀찮기는 하지만, 그래도 결과물이 잘 나오니까 걱정하지 마시고 쓰시면 됩니다.
그럼 잘 사용하세요~

ps. 좀더 상세한 사용법을 보실려면 syntaxhighlighter 홈페이지를 방문해서 확인 하세요~

끝~

more..



발취 : http://gyuha.tistory.com/193  

블로그 이미지

레몬도리 LemonDory

개발자의 이야기

댓글을 달아 주세요

       Dim mstrRecvData As String    
      Dim 호스트ip As String = 서버아이피     
       Dim 호스트port As String = 서버포트    
       Dim 로그인Prompt As String = "login:" '로그인시 아이디를 입력할 시기를 알기 위해 아이디를 입력해야할 프롬프트 명을 입력    
       Dim 로그인ID As String = 아이디    
      Dim 비밀번호Prompt As String = "Password:" '로그인시 패스워드를 입력할 시기를 알기 위해 아이디를 입력해야할 프롬프트 명을 입력    
      Dim 비밀번호 As String = 패스워드    
     Dim strPrompt As String = 첫화면의 프롬프트(폴더명)    
Dim DBIO생성위치 As String = 프로그램(.SH)가 위치한 경로    
Dim GENSHELL_NAME As String = 프로그램명(.SH)    
Dim GEN종료 As String = 프로그램이 끝나고 마지막줄에 출력되는 값을 입력    
 
Private Sub DBIO_Creation_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load        
TelnetConnect.KeepAlive = True        
lstLog.Items.Clear()        
On Error GoTo OnError        
AddLog("Connection to " & 호스트ip & " ...." & vbCrLf)        
TelnetConnect.Connect(호스트ip, 호스트port, "", 0)        
AddLog("Connect : " + vbCrLf)        
mstrRecvData = ""        
TelnetConnect.Search(mstrRecvData, 로그인Prompt)        
AddLog(mstrRecvData)        
TelnetConnect.Send(로그인ID & vbCrLf)        
mstrRecvData = ""        
TelnetConnect.Search(mstrRecvData, 비밀번호Prompt)        
AddLog(mstrRecvData)        
TelnetConnect.Send(비밀번호 & vbCrLf)        
TelnetConnect.Send(vbCrLf)        
mstrRecvData = ""        
TelnetConnect.Search(mstrRecvData, strPrompt)        
AddLog(mstrRecvData)        
    
TelnetConnect.Send("cd " & DBIO생성위치 & vbCrLf & vbCrLf)        
mstrRecvData = ""        
TelnetConnect.Search(mstrRecvData, DBIO생성위치)        
AddLog(mstrRecvData)        
TelnetConnect.Send(GENSHELL_NAME & " " & UCase(TableName) & vbCrLf)        
mstrRecvData = ""        
TelnetConnect.Search(mstrRecvData, GEN종료)        
AddLog(mstrRecvData)        
txDBIO_st.Text = "정상"        
lstLog.SelectedIndex = lstLog.Items.Count - 1        
Exit SubOnError:        
' Display info about the error        
AddLog(vbCrLf & vbCrLf & "ERROR #" & CStr(Err.Number) & ": " & Err.Description)        
txLogin_st.Text = "오류"        txDBIO_st.Text = "오류"    End Sub    Private Sub AddLog(ByVal S As String)        Dim lines() As String = S.Split(vbCrLf & vbCrLf)        Dim i As Integer        For i = 0 To UBound(lines)            lines(i) = lines(i).Replace(vbLf, "")            If lines(i).Length > 0 Then                lstLog.Items.Add(lines(i))            End If        Next 
블로그 이미지

레몬도리 LemonDory

개발자의 이야기

댓글을 달아 주세요

        NotifyCnt = 0
        ' 송신내용
        Dim sndstr As New TypedString(6344)
        ' 수신내용
        Dim rcvstr As New TypedCArray(6344)
        ' 접속서버 환경설정
        Utils.tuxputenv("WSNADDR=//서버아이피" + 서버포트번호)
        ' TPINIT
        Dim tpinfo As New TypedTPINIT()
        Dim ac As AppContext = AppContext.tpinit(tpinfo)
        ac.tpsetunsol(New UnsolicitedMessageHandler(AddressOf MyUMHandler))
        sndstr.PutString(0, SendStr, SendStr.Length)
        Try
            ac.tpcall("BNCSIN", sndstr, rcvstr, 2)
            Dim Addr As IntPtr = rcvstr.Buffer.ToInt64()
            RecvStr = Marshal.PtrToStringAnsi(Addr, 6344)
        Catch ex As Exception
            MessageBox.Show(ex.Message, "TPFAIL")
            Return False
        End Try
        ac.tpterm()
블로그 이미지

레몬도리 LemonDory

개발자의 이야기

Tag Texedo

댓글을 달아 주세요


C#도 초보인데 Visual Basic을 하게 되었습니다.
한참을 허공에 삽질하다가 도움말을 볼세도 없었죠.
그러다 다른 분들의 몇몇 소스를 보면서 UXXXX관련된 메소드를 사용을 많이하시는걸 보고 이건 머지 보다가 너무 많아서 몇가지 자주 사용 되는것을 정리 해보려고 합니다.
설명은 Visual Studio 도움말을 이용 하였습니다.
Visual Studio 도움말에도 자세한 도움말과 예제가 있습니다.

1. UBound 메서드 
   배열의 표시된 차원에 사용할 수 있는 최고 첨자를 반환합니다.  
   Dim a(100, 5, 4) As Byte
   다음과 같은 배열이 있다면 
   UBound(a, 1) 의 값은 100이 되고 UBound(a, 2) 는 5 가 됩니다.
   이걸 조건문 IF에 사용하게되면 다음과 같습니다. 

        If UBound(a, 1) = 100 Then
            '실행문
        End If

   이런 조건문 이외에도 많은 용도로 사용되고 있습니다. 
2. Mid 문
   String 변수에 있는 지정한 수의 문자를 다른 문자열의 문자로 바꿉니다.
        Dim Str As String = "ABCEEF"
        Str = Mid(Str, 4, 1)   
   사용은 이렇게 합니다.   
   이렇게 하고 Str을 출력해보면 ABCDEF가 출력 되겠죠.

3. UCase 함수 
   대문자로 변환된 특정 문자열이 있는 문자열 또는 문자를 반환합니다.
Dim LowerCase As String = "Hello World 1234"
Dim UpperCase As String = UCase(LowerCase)
   다음과 같은 예제에서 LowerCase를 출력하면 Hello World 1234 저장된 값 그대로 출력할 것이다.
   UCase를 사용한 UpperCase는 소문자 모두가 대문자로 저장되어 HELLO WORLD 1234와 같이 찍일
   것이다.
4. IsNumeric 함수
   특정 식이 숫자로 계산될 수 있는지를 나타내는 Boolean 값을 반환합니다.
      - 계속이어 하겠습니다.-
블로그 이미지

레몬도리 LemonDory

개발자의 이야기

댓글을 달아 주세요

한정자

가. 언어유형/A. C# 2008. 10. 8. 13:45

[abstract]

abstract 한정자는 클래스, 메서드, 속성, 인덱서 및 이벤트에 사용할 수 있습니다. 클래스 선언에 abstract 한정자를 사용하면 해당 클래스가 다른 클래스의 기본 클래스로만 사용됨을 나타낸다. abstract로 표시된 멤버나 abstract 클래스에 포함된 멤버는 해당 abstract 클래스에서 파생되는 클래스에 의해 구현되어야 한다.

[event]

event 키워드는 게시자 클래스에서 이벤트를 선언하는 데 사용.

public class Publisher
{
        // Declare the delegate (if using non-generic pattern).
        public delegate void SampleEventHandler(object sender, SampleEventArgs e);

        // Declare the event.
        public event SampleEventHandler SampleEvent;

        // Wrap the event in a protected virtual method
        // to enable derived classes to raise the event.

        protected virtual void RaiseSampleEvent()
        {
            // Raise the event by using the () operator.
            SampleEvent(this, new SampleEventArgs("Hello"));
        }
}

[extern]

extern 한정자는 외부에서 구현되는 메서드를 선언하는 데 사용된다. extern 한정자는 일반적으로 비관리 코드를 호출하기 위해 Interop 서비스를 사용할 때 DllImport 특성과 함께 사용된다. 이 경우 메서드는 다음 예제에서와 같이 static으로도 선언해야 한다.

using System;
using System.Runtime.InteropServices;
class MainClass
{
   [DllImport("User32.dll")]
   public static extern int MessageBox(int h, string m, string c, int type);

   static int Main()
   {
      string myString;
      Console.Write("Enter your message: ");
      myString = Console.ReadLine();
      return MessageBox(0, myString, "My Message Box", 0);
   }
}

[sealed]

sealed 한정자는 클래스, 인스턴스, 메서드 및 속성에 적용할 수 있다. 봉인 클래스는 상속할 수 없다. 봉인 메서드는 기본 클래스의 메서드를 재정의하지만 이후의 파생 클래스에서는 봉인 메서드 자체를 재정의할 수 없다. 메서드나 속성에 sealed 한정자를 적용하는 경우 항상 override(C# 참조)를 함께 사용해야 한다.


using System;
sealed class SealedClass
{
    public int x;
    public int y;
}

class MainClass
{
    static void Main()
    {
        SealedClass sc = new SealedClass();
        sc.x = 110;
        sc.y = 150;
        Console.WriteLine("x = {0}, y = {1}", sc.x, sc.y);
    }
}

[액서스한정자]

public: 액세스가 제한되지 않는다.

protected: 포함하는 클래스 또는 여기에서 파생된 형식으로 액세스가 된다.

Internal: 액세스가 현재 어셈블리로 된다.

protected internal: 현재 어셈블리 또는 포함하는 클래스에서 파생된 형식으로 액세스가 된다.

private: 액세스가 포함하는 형식으로 제한된다.




[출처]
[C#] 한정자|작성자 문성섭


블로그 이미지

레몬도리 LemonDory

개발자의 이야기

댓글을 달아 주세요