Q&A

  • 양쪽 정렬 구현방법은?
메모나 리치에디터에서 양쪽 정렬을 구현 할 수는 없나여?

어떻게 해야 양쪽 정렬을 구현할수 있져?

이미지 처리로 해야 되나여? 많은 답변 주세요 ㅠㅠ

4  COMMENTS
  • Profile
    홍성락 2001.08.21 07:33
    gudwhrla wrote:

    > 메모나 리치에디터에서 양쪽 정렬을 구현 할 수는 없나여?

    > 어떻게 해야 양쪽 정렬을 구현할수 있져?

    > 이미지 처리로 해야 되나여? 많은 답변 주세요 ㅠㅠ

    //////////////////////////////////////////////////////////////////

    아래는 메모를 예로 든건데요, Form의 폰트와 같아야 한다는 결함이 있습니다.

    (Canvas.TextWidth를 구하려면 어떤 윈도우컴포넌트의 계열의 컴포넌트가 있어야됩니다.)

    아래 소스중 (Canvas.TextWidth('1') / Canvas.TextWidth(' '))는 공간과 한글자의 너비가 서로 다르기에 비육값을 계산하려 했습니다.

    마구잡이라 더 좋은방법이 있으면 다시 올려주십시요.

    ------------------------------------------------------------------------------

    procedure TForm1.Button2Click(Sender: TObject);

    var

    str1, str2: string;

    i, j, num : integer;

    begin

    //Memo1.ParentFont := True;

    Memo1.Font := Form1.Font;



    for j := 0 to Memo1.Lines.Count-1 do begin

    str1 := '';

    str2 := Memo1.Lines.Strings[j];

    num := Round(((Memo1.Width/Canvas.TextWidth('1')/2)-(Length(str2)/2))

    * (Canvas.TextWidth('1') / Canvas.TextWidth(' ')));



    for i := 1 to num do str1 := str1 + ' ';

    Memo1.Lines.Strings[j] := str1 + str2;

    end;

    end;

  • Profile
    gudwhrla 2001.08.21 23:03
    위 소스는 가운데 정렬 같네여 아닌가여?



    한글과 ms-word의 양쪽정렬기능을 자세히 살펴보니까



    정렬이 될때 공백의 크기가 줄었다 늘었다 하네여



    그걸 코딩으로 구현해야 하나여 ㅠ.ㅠ



  • Profile
    홍성락 2001.08.23 07:23
    gudwhrla wrote:

    > 위 소스는 가운데 정렬 같네여 아닌가여?

    >

    > 한글과 ms-word의 양쪽정렬기능을 자세히 살펴보니까

    >

    > 정렬이 될때 공백의 크기가 줄었다 늘었다 하네여

    >

    > 그걸 코딩으로 구현해야 하나여 ㅠ.ㅠ

    ///////////////////////////////////////////////////////////

    죄송합니다. 양쪽정렬이란걸 깜빡했네요, 그리고 반문하신걸 못봐서요.

    아래것은 조금 고쳐본건데요, 한글같은 2바이트짜리는 안되고

    정렬시에도 정확한 RECT좌표도 아닌 스페이스로하다보니 엉성합니다.

    많이생각하고 다른방법을 알아보셔야겠는데요.

    좀더 알아보고 답변을 드려야하는데 문제해걸을 못해 다시한번 죄송스럽습니다.



    procedure TForm1.Button2Click(Sender: TObject);

    var

    str1, str2, str3, str4: string;

    i, j, num, space_num, Add_num : integer;

    begin

    //Memo1.ParentFont := True;

    Memo1.Font := Form1.Font;



    for j := 0 to Memo1.Lines.Count-1 do begin

    str2 := Memo1.Lines.Strings[j];

    if Length(str2) > 1 then begin

    //빈칸이 필요한개수

    num := Round(((Memo1.Width-6-(Canvas.TextWidth(str2)))/Canvas.TextWidth('1'))

    * ((Canvas.TextWidth('1') / Canvas.TextWidth(' '))));

    //문자에 들어가게될 공백 개수

    space_num := Trunc(num/(Length(str2)-1));

    str1 := '';

    for i := 1 to space_num do str1 := str1 + ' ';



    Add_num := num - (space_num*(Length(str2)-1)) -1;



    //문자만듬

    str3 := '';

    for i := 1 to Length(str2)-1 do begin

    str3 := str3 + str2[i] + str1;

    if i <= Add_num then str3 := str3 + ' ';

    end;





    Add_num := Round(((Memo1.Width-6 - (Canvas.TextWidth(str3)))/Canvas.TextWidth('1'))

    * ((Canvas.TextWidth('1') / Canvas.TextWidth(' '))))-4;

    if Add_num > 0 then begin

    for i := 1 to Add_num do str3 := str3 + ' ';

    end

    else if Add_num < 0 then begin

    str3 := Copy(str3,1,length(str3)+Add_num);

    end;

    str4 := str3 + str2[Length(str2)];

    Memo1.Lines.Strings[j] := str4;;



    end;

    end;

    end;

  • Profile
    gudwhrla 2002.10.12 22:03
    .