2008.03.14 00:51:46 (*.107.180.42)
2062

2005년 5월 작성 레포트용


vb1.jpg



탭화면을 구현하기 StripTabs 도구를 이용것이며 StripTabs 의 탭 속성이 배열로 되어 있어 새탭을 추가할 때 배열을 하나 늘이는 방법을 이용합니다.

 

인터넷브라우저도 새탭이 추가 될 때 Load 명령으로 배열을 주어 추가 시킬수 있지만 로딩속도를 고려해서 처음에 10개를 로딩하여 사용 합니다.

 

그리고 활성화 된 탭의 번호에 해당하는 인터넷브라우저를 Enabled 시켜 탭기능을 구현 합니다.

 

팝업창 제어는 인터넷브라우저에 새창이 나타날 때 NewWindow2 이벤트가 발생되는데 이때 Fasle 로 리턴시키면 팝업창을 제어 합니다.

 

바로가기기능은 주소입력창에 입력된 값을 비교하여 환경설정에 등록된 단어로 치환하여 주소로 이동시키는 방법을 사용합니다.

 

소스보기는 자바스크립트로 소스를 볼 수 없게 만든 사이트에서 소스보기를 눌렀을때 소스를 바로 볼수 있게 만듭니다. 이때 보여주는 내용은 이전에 만들었던 메모장을 이용하는데 메모장의 Textbox 도구가 사용되어 64Kb 이상의 용량은 출력되지 않습니다.

 

----- 비베플로러.frm : 메인화면 소스 -----

Private Sub AddTabs()

    ' 인터넷브라우저와 탭번호를 혼동하지 않게 하기위에 0번탭을 사용하지 않음

    PageTab.Tabs.Add

   

    ' 현재탭을 활성화 시킴

    PageTab.Tabs(tabCount).Selected = True

   

    ' 현재탭번호변수를 최대탭 수로 넘김

    tabCount = PageTab.Tabs.Count

   

    ' 마지막탭을 제외한 브라우저는 Disable 시킴

    For j = 0 To 9 Step 1

        If j = tabCount Then

            ' 활성화 된 탭과 같은 브라우저를 보여줌

            WebBrowser.Item(j).Visible = True

            WebBrowser.Item(j).GoHome

            PageTab.Tabs(tabCount).Selected = True

        Else

            ' 비활성화 탭과 같은 브라우저를 감춤

            WebBrowser.Item(j).Visible = False

        End If

    Next

End Sub

 


Private Sub DelTabs()

    ' 탭을 지울때

    Dim k

    j = 0

    k = 0

   

    ' 탭번호가 1 이면 그냥 둠

    If PageTab.Tabs.Count = 1 Then

   

    ' 마지막 탭과 활성화된 탭이 같을때

    ElseIf PageTab.Tabs.Count = tabCount Then

        ' 마지막 탭을 삭제 하고 브라우저를 숨김

        WebBrowser.Item(PageTab.Tabs.Count).Visible = True

        PageTab.Tabs.Remove (tabCount)

       

        ' 삭제 후 마지막 탭을 활성화 시킴

        PageTab.Tabs(PageTab.Tabs.Count).Selected = True

        tabCount = PageTab.Tabs.Count

    Else

        ' 중간의 탭을 삭제시킬때 자신을 기준으로 값을 당겨옴

        For j = 1 To PageTab.Tabs.Count

            If j = tabCount Then

                For k = tabCount To PageTab.Tabs.Count - 1

                    WebBrowser.Item(k).Navigate (WebBrowser.Item(k + 1).Location!URL)

                    PageTab.Tabs(k) = PageTab.Tabs(k + 1)

                Next k

                WebBrowser.Item(PageTab.Tabs.Count).Visible = False

                PageTab.Tabs.Remove (PageTab.Tabs.Count)

                PageTab.Tabs(tabCount).Selected = True

            End If

        Next j

    End If

    ' 삭제 완료후 탭을 활성화 시킴

    SelectTabs

End Sub

 


Private Sub getTabCount()

    ' 현재 탭번호를 받음

    For j = 1 To PageTab.Tabs.Count

        If PageTab.Tabs(j).Selected = True Then

            tabCount = j

        End If

    Next j

End Sub

 


Private Sub SelectTabs()

    ' 현재 탭번호를 받아 해당 번호와 같은 브라우저를 활성화 시킴

    getTabCount

    For j = 0 To 9 Step 1

        If j = tabCount Then

            BrowserResize

            WebBrowser.Item(j).Visible = True

        Else

            WebBrowser.Item(j).Visible = False

            WebBrowser.Item(j).Navigate = "http://"

        End If

    Next

End Sub

 


Private Sub PageTab_Click()

    SelectTabs

End Sub

 


Private Sub Form_Load()

    ' 처음 탭번호를 1로 두고 기본 환경 설정을 함

    tabCount = 1

    ToUrl(0) = "다음;http://www.daum.net"

    ToUrl(1) = "네이버;http://www.naver.com"

    ToUrl(2) = "구글;http://www.google.co.kr"

    ToUrl(3) = "내블로그;http://battlej.nbloger.com"

    ToUrl(4) = "파란;http://www.paran.com"

   

    ' 첫페이지는 설정된 홈페이지로 이동

    WebBrowser.Item(1).GoHome

    WebBrowser.Item(1).Visible = True

 


End Sub

 


Private Sub Form_Resize()

       

    ' 창 사이즈가 바뀔때 설치된 컨트롤의 크기도 같이 변경

    GoPage.Left = 비베플로러.Width - 1335

    Href.Width = 비베플로러.Width - 3240

    PageTab.Width = 비베플로러.Width - 120

    PageTab.Height = 비베플로러.Height - 1140

    Popup.Left = 비베플로러.Width - 375

    BrowserResize

End Sub

 


Private Sub BrowserResize()

    ' 창 사이즈가 바뀔때 설치된 브라우저의 크기도 변경

    WebBrowser.Item(tabCount).Width = 비베플로러.Width - 360

    WebBrowser.Item(tabCount).Height = 비베플로러.Height - 1620

End Sub

 


Private Sub GoHome_Click()

    '홈으로 가기버튼 클릭시 Home 으로 이동

    WebBrowser.Item(tabCount).GoHome

End Sub

 


Private Sub GoPage_Click()

    ' 바로가기 기능 구현

    ' 주소창의 단어와 같은 콜론(;) 전의 단어를 콜론(;) 뒤의 단어로 바꿈

   

    Dim Pos

   

    ' 주소창의 단어의 길이가 1이상이고 http:// 로 시작되지 않을 경우 비교

    If Len(Href.Text) <> "0" And InStr(1, Href.Text, "http://") = 0 Then

        For j = 0 To 4

            Pos = InStr(1, ToUrl(j), Href.Text)

            If Pos > 0 Then

                Href.Text = Mid(ToUrl(j), Len(Href.Text) + 2)

            End If

        Next j

    End If

    ' 치환된 주소로 이동

    WebBrowser.Item(tabCount).Navigate (Href.Text)

End Sub

 


Private Sub Href_KeyDown(KeyCode As Integer, Shift As Integer)

    ' 주소 입력창에 엔터키가 눌러지면 주소이동시킴

    If KeyCode = vbKeyReturn Then

        GoPage_Click

    End If

End Sub

 


Private Sub MfileaTabClose_Click()

    DelTabs

End Sub

 


Private Sub MfileClose_Click()

    End

End Sub

 


Private Sub MfileNewWindow_Click(Index As Integer)

    AddTabs

End Sub

 


Private Sub MfileOpen_Click()

    ' 열기 버튼 클릭시 주소를 입력받고 이동시킴

    Dim location As String

    location = InputBox("보고 싶은 URL 주소를 입력하세요.                         ex) http://www.naver.com", "주소열기", "http://")

   

    ' 주소단어의 길이가 4이상일때 이동

    If Len(location) > 4 Then

        WebBrowser.Item(tabCount).Navigate (location)

    End If

End Sub

 


Private Sub MoptionTool_Click()

    OptionTool.Show vbModal

End Sub

 


Private Sub MviewShowpopup_Click()

    Popup.Value = 0

    WebBrowser.Item(tabCount).Refresh

End Sub

 


Private Sub MviewSource_Click()

   

    ' 소스보기시 Dom 객체에 접근 최상위 Html 소스를 모두 Source 변수에 담음

    ' Source = Inet.OpenURL(WebBrowser.Item(tabCount).Location!URL) Inet 컨트롤을 이용해 소스를 받아 올시 사용

    Source = WebBrowser.Item(tabCount).Document.documentElement.outerHTML

    SourceUrl = WebBrowser.Item(tabCount).Location!URL

   

    ' 소스를 메모장에 출력시킴

    mynotepad.Show

End Sub

 


Private Sub NextPage_Click()

On Error GoTo erro:

    WebBrowser.Item(tabCount).GoForward

    Exit Sub

erro:

End Sub

 


Private Sub Popup_Click()

    ' 팝업창 체크버튼을 쿨릭시 변수를 바꾸고 경고 박스를 보여줌

    If Popup.Value = 0 Then

        MsgBox ("팝업창을 보여줍니다.")

    Else

        MsgBox ("팝업창을 차단합니다.")

    End If

End Sub

 


Private Sub PrevPage_Click()

On Error GoTo erro:

    WebBrowser.Item(tabCount).GoBack

    Exit Sub

erro:

End Sub

 


Private Sub Refresh_Click()

On Error GoTo erro:

    WebBrowser.Item(tabCount).Refresh

    Exit Sub

erro:

End Sub

 


Private Sub StopPage_Click()

On Error GoTo erro:

    WebBrowser.Item(tabCount).Stop

    Exit Sub

erro:

End Sub

 


Private Sub WebBrowser_DocumentComplete(Index As Integer, ByVal pDisp As Object, URL As Variant)

    ' 페이지 로딩이 완료되었을때 제목을 탭이름으로 변경

    Href.Text = WebBrowser.Item(tabCount).Location!URL

    PageTab.Tabs(tabCount).Caption = WebBrowser.Item(tabCount).Location!Name

End Sub

 


Private Sub WebBrowser_NewWindow2(Index As Integer, ppDisp As Object, Cancel As Boolean)

    ' 팝업창 변수가 1일때는 창을 띄우지 않음

    If Popup.Value = 1 Then

        Cancel = True

    End If

End Sub

----- 비베플로러.frm : 메인화면 소스 끝-----

----- OptionTool.frm : 환경설정 소스 -----

Private Sub Form_Load()

    ' 환경변수 값을 받아출력시킴

    For j = 0 To 4

        OptionTool.ToUrl.Item(j).Text = ToUrl(j)

    Next

End Sub

 


Private Sub ToUrl_Change(Index As Integer)

    ' 값이 바뀔때 해당 바로가기 변수에 값을 입력

    ToUrl(Index) = ToUrl.Item(Index).Text

End Sub

----- OptionTool.frm : 환경설정 소스 끝 -----

profile
  • 배경, 글자, 이미지, 인용문등에서 더블클릭을 하시면 상세한 컴포넌트 설정이 가능합니다
  • 문단 나누기를 하시려면 ctrl-엔터를 누르시면 됩니다. (글 작성완료후 alt-S를 누르면 저장이 됩니다)
  • 단축키 안내
    • Un Do : Ctrl+Z
    • Re Do : Ctrl+Y
    • Bold : Ctrl+B
    • Underline : Ctrl+U
    • Italic : Ctrl+I
    • Style Remover : Ctrl+D
    • URL : Ctrl+L
DB백업과 많이 달라진 건 없습니다.
$home 변수를 이용해 /home/ 에 필요한 계정만 백업 할 수 있도록 하였습니다.
크론탭으로 1일에 한번씩 실행시켜면 됩니다.

--------------- myhomebackup (id : root / chmod : 700 이상)-------------------
#!/usr/bin/php
    $dir = '/home/';
    $backupdir = '/backup/home/';
    $makeday = 7;

    $home[] = 'battlej';
    $home[] = 'yourhome';
    $home[] = 'etchome';

    if (is_dir($backupdir)) {
        if ($dh = opendir($backupdir)) {
            while (($file = readdir($dh)) !== false) {
                if(is_dir($backupdir.$file) && $file != '.' && $file != '..') {
                    $day = intval((strtotime("now") - strtotime($file))/86400);
                    if($day >= $makeday) {
                        exec("rm $backupdir$file -rf");
                    }
                }
            }
            closedir($dh);
        }
    }

    foreach($home as $file) {
        if(is_dir($dir.$file)) {
            $today = date('Ymd');
            if(!is_dir($backupdir.$today)) {
                exec("mkdir $backupdir$today");
            }
            exec("tar zcf $backupdir$today/$file.tar.gz $dir$file 2>/dev/null");
        }
    }
    clearstatcache();
?>
profile
  • 배경, 글자, 이미지, 인용문등에서 더블클릭을 하시면 상세한 컴포넌트 설정이 가능합니다
  • 문단 나누기를 하시려면 ctrl-엔터를 누르시면 됩니다. (글 작성완료후 alt-S를 누르면 저장이 됩니다)
  • 단축키 안내
    • Un Do : Ctrl+Z
    • Re Do : Ctrl+Y
    • Bold : Ctrl+B
    • Underline : Ctrl+U
    • Italic : Ctrl+I
    • Style Remover : Ctrl+D
    • URL : Ctrl+L
2008.03.14 00:30:59 (*.217.197.8)
1581
2007년 11월 작성 후배 레포트용

calc1.jpg

뭐.. 완성도는 극악이나 대충.. *_*;;
profile
  • 배경, 글자, 이미지, 인용문등에서 더블클릭을 하시면 상세한 컴포넌트 설정이 가능합니다
  • 문단 나누기를 하시려면 ctrl-엔터를 누르시면 됩니다. (글 작성완료후 alt-S를 누르면 저장이 됩니다)
  • 단축키 안내
    • Un Do : Ctrl+Z
    • Re Do : Ctrl+Y
    • Bold : Ctrl+B
    • Underline : Ctrl+U
    • Italic : Ctrl+I
    • Style Remover : Ctrl+D
    • URL : Ctrl+L
2005년 11월 작성 레포트용

/* *
* @contents 희소행렬의 3열 변환행렬입력 받아 여러 형태로 연산하는 클래스
 * @ps 희소행렬의 변환데이터를 3열 변환데이터라 칭함
 *  * */

// 희소행렬 클래스
class SparseData {

    // 자료를 저장할 2차원 배열, sparseData : 3열 변환데이터, matrixData : 희소행렬
    int [][] sparseData;
    int [][] matrixData;

    // 생성자 : 희소행렬이나 3열 변환데이터를 입력받는다.
    SparseData(int [][]count) {

        // 입력된 데이터를 희소행렬인지 간략히 확인
        if(count[0].length==3 && count[0][0]==count[0][1] && count[0][2]>1) {

            // 3열 변환데이터를 희소행렬로 변환&저장
            SparseDataToMatrix(count);
            // 변환된 희소행렬을 3열 변환데이터로 변수에 저장
            MatrixToSparseData(matrixData);
        } else {

            // 희소행렬을 3열 변환데이터로 저장
            MatrixToSparseData(count);
            // 변환된 데이터를 희소행렬 변수에 저장
            SparseDataToMatrix(sparseData);
        }
    }

    // 희소행렬을 3열 변환데이터로 변환
    public void MatrixToSparseData(int [][]count) {
        // 카운터 변수
        int CountValue=0;
        try {

            // 값이 0이 아닌 데이터의 갯수를 구함
            for(int i=0;i<count[0].length;i++) {
                for(int j=0;j<count[0].length;j++) {
                    if(count[i][j] != 0) {
                        CountValue++;
                    }
                }
            }

            // 멤버변수 sparseData 에 값이 없으면 초기화 시킨다.
            if(sparseData==null) {
                sparseData = new int[CountValue+1][3];
            }

            // 모든 값을 0으로 만든다.
            for(int i=0;i<sparseData.length;i++) {
                sparseData[i][0]=0;
                sparseData[i][1]=0;
                sparseData[i][2]=0;
            }

            // 첫행의 값을 등록한다. [행][열][갯수]
            sparseData[0][0]=count.length;
            sparseData[0][1]=count[0].length;
            sparseData[0][2]=CountValue;
            CountValue=1;

            // 모든 배열의 값을 검사해 0이 아닌 값을 저장한다.
            for(int i=0;i<count[0].length;i++) {
                for(int j=0;j<count[0].length;j++) {
                    if(count[i][j] != 0) {
                        sparseData[CountValue][0] = i+1;
                        sparseData[CountValue][1] = j+1;
                        sparseData[CountValue++][2] = count[i][j];
                    }
                }
            }
        } catch(Exception e) {
            System.out.println("MatrixToSparseData 메쏘드 ArrayException 발생");
        }
    }

    // 3열 변환데이터를 희소행렬로 변환
    public void SparseDataToMatrix(int [][]count) {

        // 희소행렬 변수가 없으면 초기화 한다.
        if(matrixData==null) {
            matrixData = new int[count[0][0]][count[0][1]];
        }
        try {

            // 값을 0으로 초기화 시킨다.
            for(int i=0;i<matrixData.length;i++) {
                for(int j=0;j<matrixData[0].length;j++) {
                    matrixData[i][j]=0;
                }               
            }

            // 3열 변환데이터가 가지는 위치에 값을 저장한다.
            for(int i=1;i<=count[0][2];i++) {
                matrixData[count[i][0]-1][count[i][1]-1] = count[i][2];
            }
        } catch(Exception e) {
            System.out.println("SparseDataToMatrix 메쏘드 ArrayException 발생");
        }
    }
    public void SparseToTranspose() {
        for(int i=1;i<sparseData.length;i++) {
            sparseData[i][0]=sparseData[i][0]+sparseData[i][1];
            sparseData[i][1]=sparseData[i][0]-sparseData[i][1];
            sparseData[i][0]=sparseData[i][0]-sparseData[i][1];
        }
        SparseDataSort();
    }

    // 3열 변환데이터를 정렬한다.
    private void SparseDataSort() {

        // 3열 변환데이터를 희소행렬로 변환시켜 다시 3열 변환데이터를 얻어 정렬을 결과를 얻는다.
        SparseDataToMatrix(sparseData);
        MatrixToSparseData(matrixData);
    }

    // 희소행렬을 출력한다.
    public String MatrixDataPrint() {

        // 출력할 String 초기화
        String Output = new String("");
        try {
            for(int i=0;i<matrixData.length;i++) {
                for(int j=0;j<matrixData[0].length;j++) {

                    // String 변수에 결과 값을 저장시킨다.
                    Output+=matrixData[i][j]+"\t";
                }
                Output+="\n";
            }
        } catch(Exception e) {
            System.out.println("MatrixDataPrint 메쏘드 ArrayException 발생");
        }
        return Output;
    }

    // 3열 변환데이터를 출력한다.
    public String SparseDataPrint() {

        // 출력할 String 초기화
        String Output = new String("");
        try {
            for(int i=0;i<sparseData.length;i++) {

                // String 변수에 결과 값을 저장시킨다.
                Output+=sparseData[i][0]+"\t"+sparseData[i][1]+"\t"+sparseData[i][2]+"\n";
            }
        } catch(Exception e) {
            System.out.println("SparseDataPrint 메쏘드 ArrayException 발생");
        }
        return Output;
    }

    // 3열 변환데이터에 입력된 3열 변환데이터를 2차원 배열로 리턴시킨다.
    public int[][] SparseAdd(SparseData data) {

        // 임시 변수 : 두데이터의 최대 행 갯수는 두 값*2이므로 초기화 시킨다.
        int [][] tempData = new int[data.sparseData[0][2]+sparseData[0][2]+1][3];

        // 3열 변환데이터가 없을경우 희소행렬에서 값을 가져온다.
        if(sparseData==null) {
            MatrixToSparseData(matrixData);
        }

        // 두 값이 3열 변환데이터의 조건이 맞는지 검사한다.       
        if(sparseData[0].length==3 && data.sparseData[0].length==3 && sparseData[0][0] == sparseData[0][0] && sparseData[0][1] == sparseData[0][1]) {
            int check=1;

            // 결과를 넣을 tempData 에 행,열의 값을 저장한다.
            tempData[0][0] = data.sparseData[0][0];
            tempData[0][1] = data.sparseData[0][1];
            try {

                // A데이터와 같은 B데이터를 합하고 0으로 저장한다.
                for(int i=1;i<sparseData.length;i++) {
                    for(int j=1;j<data.sparseData.length;j++) {
                        if(sparseData[i][0]==data.sparseData[j][0] && sparseData[i][1]==data.sparseData[j][1]) {
                            sparseData[i][2] += data.sparseData[j][2];
                            data.sparseData[j][0] = 0;
                            data.sparseData[j][1] = 0;
                            data.sparseData[j][2] = 0;
                        }
                    }
                }
               
                // 같은 값의 합이 저장된 A데이터를 tempData로 저장한다.
                for(int i=1;i<sparseData.length;i++) {
                    tempData[check][0] = sparseData[i][0];
                    tempData[check][1] = sparseData[i][1];
                    tempData[check++][2] = sparseData[i][2];
                }
               
                // B데이터는 같은값은 이미 0으로 초기화 되어 있으므로 0이 아닌값을 tempData로 저장한다.
                for(int j=1;j<data.sparseData.length;j++) {
                    if(data.sparseData[j][0]!=0 && data.sparseData[j][1]!=0 && data.sparseData[j][2]!=0) {
                        tempData[check][0] = data.sparseData[j][0];
                        tempData[check][1] = data.sparseData[j][1];
                        tempData[check++][2] = data.sparseData[j][2];
                    }
                }
               
                // 총 값이 있는 데이터 갯수를 저장한다.
                tempData[0][2] = check-1;
            } catch(Exception e) {
                System.out.println("SparseAdd 메쏘드 ArrayException 발생");
            }

            // 자신의 배열을 생성하여 정렬을 시키고 리턴시킨다.
            //SparseDataSort();
            return tempData;
        } else {

            // 두 값이 3열 변환데이터의 조건이 아니면 null 을 반환한다.
            return null;
        }
    }
}
public class SparseMatrix {
    public static void main(String [] arg) {
        int [][]Array1 = {
            {0,1,0,2,-2},
            {2,0,0,0,0},
            {0,4,0,-2,0},
            {0,0,1,0,5},
            {9,0,0,-6,0}
        };
        int [][]Array2 = {
            {0,1,0,0,-1},
            {0,0,5,0,0},
            {0,15,0,8,0},
            {0,0,0,0,1},
            {-11,0,0,22,0}
        };

        /* 1) 희소행을 입력하여 3열 변환데이터로 바꾸는 함수 ( 생성자로 바로 실행 )
         * MatrixToSparseData(int [][] count);

          * 2) 앞의 방법으로 저장된 행렬을 원래의 행렬로 바꾸는 함수 ( 생성자로 바로 실행 )
         * SparseDataToMatrix(int [][] count);

         * 3) 앞의 방법으로 저장된 두 배열의 덧셈 함수
         * SparseAdd(int [][] count);

         * 4) 앞의 방법으로 저장된 배열의 전치행렬을 구하는 함수
         * SparseToTranspose();
       
         * 두 희소행렬을 입력하여 앞의 방법으로 바꾼 배열의 내용 출력하고,
         * 이 두 행렬의 전치행렬을 4)의 함수를 이용하여 구하여 행렬 형식으로 출력하고,
         * 입력한 두행렬의 합을 3)에서 작성한 함수를 이용하여 구하고 그 결과를 행렬 형식으로 출력하시오.
        */
       
        // 2개의 희소 행렬 입력
        SparseData newData = new SparseData(Array1);
        SparseData newData2 = new SparseData(Array2);

        // 3열 변환데이터 출력
        System.out.println("출력결과\n");
        System.out.println("1) 희소행을 입력하여 3열 변환데이터로 바꿈");
        System.out.println("  A 희소행렬 변환결과");
        System.out.println(newData.SparseDataPrint());
        System.out.println("  B 희소행렬 변환결과");
        System.out.println(newData2.SparseDataPrint());

        // 두 배열의 전치행렬을 구함
        newData.SparseToTranspose();
        newData2.SparseToTranspose();

        // 전치행렬을 행렬식으로 출력
        System.out.println("4) 앞의 방법으로 저장된 배열의 전치행렬");
        System.out.println("  A 전치행렬 변환결과");
        System.out.println(newData.SparseDataPrint());
        System.out.println("  B 전치행렬 변환결과");
        System.out.println(newData2.SparseDataPrint());

        // A와 B의 합을 addData 에 저장
        SparseData addData;
        System.out.println("3) 앞의 방법으로 저장된 두 배열의 덧셈");
        addData = new SparseData(newData.SparseAdd(newData2));
        System.out.println(addData.MatrixDataPrint());
    }
}
profile
  • 배경, 글자, 이미지, 인용문등에서 더블클릭을 하시면 상세한 컴포넌트 설정이 가능합니다
  • 문단 나누기를 하시려면 ctrl-엔터를 누르시면 됩니다. (글 작성완료후 alt-S를 누르면 저장이 됩니다)
  • 단축키 안내
    • Un Do : Ctrl+Z
    • Re Do : Ctrl+Y
    • Bold : Ctrl+B
    • Underline : Ctrl+U
    • Italic : Ctrl+I
    • Style Remover : Ctrl+D
    • URL : Ctrl+L
2008.03.14 00:18:52 (*.107.180.42)
1743