Tìm hiểu các thuộc tính của chữ

Chia sẻ: Buihuu Tan | Ngày: | Loại File: PDF | Số trang:8

0
95
lượt xem
13
download

Tìm hiểu các thuộc tính của chữ

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Trong Windows, khi trình bày văn bản, các ký tự được thể hiện theo nhiều dạng khác nhau. Đây là một trong những đặc trưng cơ bản của giao diện đồ họa - người dùng (GUI – Graphical User Interface). Để thực hiện điều này, Windows hỗ trợ nhiều dạng font chữ khác nhau. Trong phần này, chúng ta tìm hiểu các vấn đề chính về các font chữ, màu sắc cũng như cách sử dụng chúng để trình bày văn bản. ...

Chủ đề:
Lưu

Nội dung Text: Tìm hiểu các thuộc tính của chữ

  1. Iczelion’s Tutorial Win32 ASM Tutorial 5 : More about Text Tìm hiểu các thuộc tính của chữ Trong Windows, khi trình bày văn bản, các ký tự được thể hiện theo nhiều dạng khác nhau. Đây là một trong những đặc trưng cơ bản của giao diện đồ họa - người dùng (GUI – Graphical User Interface). Để thực hiện điều này, Windows hỗ trợ nhiều dạng font chữ khác nhau. Trong phần này, chúng ta tìm hiểu các vấn đề chính về các font chữ, màu sắc cũng như cách sử dụng chúng để trình bày văn bản. Tìm hiểu về hệ thống màu Hệ thống màu của Windows có được xây dựng dựa trên hệ thống màu RGB (R=Red, G=Green, B=Blue) – hiểu nôm na là mỗi màu có được bằng cách trộn 3 màu cơ bản là Red (đỏ), Green (xanh lá cây), Blue (xanh lam). Nếu bạn muốn sử dụng một màu trên Windows, bạn phải cho biết giá trị của 3 thành phần màu R, G, B nói trên. Mỗi thành phần màu tương ứng với một số từ 0 đến giá trị lớn nhất (tùy theo số bit cho mỗi điểm ảnh), thông thường từ từ 0 đến 255 (giá trị 1 byte). Ví dụ, nếu bạn muốn có màu đỏ “thuần túy” thì bạn phải chỉ định giá trị của R,G, B lần lượt là 255,0,0 (R=255, G=0, và B=0). Hay nếu bạn muốn có màu trắng “thuần túy” thì giá trị lần lượt là 255,255,255. Như vậy, để có được màu mà bạn cần thì rất khó khăn với hệ thống như vậy, trừ khi bạn phải biết được giá trị của 3 thông số màu tương ứng trong mỗi màu để. Đối với màu chữ và màu nền, bạn dùng hàm SetTextColor và SetBkColor, cả hai đều sử dụng một handle của DC và một giá trị màu 32-bit RGB. Hệ thống 32-bit giá trị RGB được định nghĩa như sau: RGB_value struct unused db 0 blue db ? green db ? red db ? RGB_value ends Người dịch: Benina (REA TEAM) Trang 1 Tổng hợp và hiệu chỉnh: NhatPhuongLe (VNCERT TEAM)
  2. Iczelion’s Tutorial Win32 ASM Tutorial 5 : More about Text Chú ý, byte đầu tiên không được dùng và nó sẽ bằng zero. Thứ tự của 3 byte màu còn lại R, G, B bị đảo ngược lại thành Blue, Green, Red. Tuy nhiên bạn sẽ không dùng cấu trúc này vì khó khăn trong việc khởi tạo giá trị ban đầu cho các thành phần màu và sử dụng chúng. Thay vì vậy, chúng ta sẽ tạo một macro. Marco này nhận 3 tham số: Red, Green và Blue. Nó sẽ tạo một giá trị 32-bit RGB theo yêu cầu và nạp nó vào thanh ghi EAX. Macro được định nghĩa như sau: RGB macro red,green,blue xor eax,eax mov ah,blue shl eax,8 mov ah,green mov al,red endm Bạn có thể đặt macro này vào trong file include để dùng sau này. Tìm hiểu về font Font chữ trong Windows được chia thành hai nhóm, gọi là font GDI và font thiết bị. Font GDI được lưu trữ dưới dạng tập tin trên đĩa, trong khi font thiết bị được thiết kế sẵn trong thiết bị xuất tương ứng, ví dụ máy in. Đối với font GDI, Windows chuyển văn bản thành ảnh bitmap sau đó chuyển đến máy in để in. Như vậy, ưu điểm của font GDI là độc lập với thiết bị xuất, tuy nhiên tốc độ xử lý in chậm hơn. Các font GDI thông thường gồm có: font bitmap, font vector và font TrueType.  Font bitmap được cấu thành từ ma trận pixel, có lợi điểm là hiển thị nhanh, nhưng hạn chế trong việc thể hiện với các kích thước khác nhau (do chỉ phóng to, thu nhỏ, và khi phóng sẽ bị bể ảnh).  Font vector thể hiện các ký tự như là tập hợp các nét vẽ (sử dụng các hàm GDI), do đó linh động và co giản hơn font bitmap, tuy nhiên được vẽ khá chậm và đường nét cũng không được mềm mại cho lắm.  Font TrueType là dạng font được sử dụng phổ biến nhất hiện nay, được lưu trữ dưới dạng một tập các điểm ảnh, kết hợp một số thuật toán biến đổi. Do đó thể hiện sắc xảo các đường nét trên màn hình và máy in. Chúng ta sẽ khảo sát các hàm xử lý cho các font chữ dạng này. Những lý thuyết về font ở phần trên, bạn không cần nhớ. Tóm lại, để tạo font (font logic), bạn gọi hàm CreateFont hay CreatFontIndirect. Hàm CreateFontIndirect nhận con trỏ cấu trúc LOGFONT. Xét định nghĩa của cấu trúc LOGFONT : typedef struct tagLOGFONT // lf { LONG lfHeight; LONG lfWidth; LONG lfEscapement; LONG lfOrientation; LONG lfWeight; BYTE lfItalic; BYTE lfUnderline; BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; TCHAR lfFaceName[LF_FACESIZE]; } LOGFONT; Người dịch: Benina (REA TEAM) Trang 2 Tổng hợp và hiệu chỉnh: NhatPhuongLe (VNCERT TEAM)
  3. Iczelion’s Tutorial Win32 ASM Tutorial 5 : More about Text Hàm CreateFontIndirect linh hoạt hơn, đặc biệt là nếu các chương trình của bạn cần thay đổi font thường xuyên. Tuy nhiên, trong ví dụ của chúng ta , chúng ta “tạo” font chữ bằng cách dùng hàm CreateFont. Sau lời gọi hàm, nó sẽ trả về một handle của font mà bạn muốn chọn để hiển thị trong DC. Sau đó, các hàm API có chức năng xuất chữ ra màn hình (TextOut, TabbedTextOut, ExtTextOut hoặc DrawText) sẽ sử dụng font mà chúng ta đã chọn trong DC. Font logic là một đối tượng GDI có handle kiểu HFONT. Một font logic là một mô tả của một font chữ thực tế. Tương tự như viết vẽ logic và chổi sơn logic, font logic là một đối tượng trừu tượng, và trở thành font thực tế trong DC khi ứng dụng gọi hàm SelectObject. Đầu tiên, ta cần định nghĩa các trường trong cấu trúc LOGFONT theo một trong hai cách sau :  Thiết lập các trường trong cấu trúc LOGFONT dựa trên các đặc tính của font bạn quan tâm. Trong trường hợp này, khi gọi hàm SelectObject, Windows sẽ sử dụng một thuật toán "ánh xạ font" để chọn một font tương thích nhất hiện có trên thiết bị.  Chọn font trong hộp thoại Font, hàm ChooseFont sẽ khởi gán các giá trị trong cấu trúc LOGFONT theo thuộc tính font được chọn. Để sử dụng font này trong các thao tác xuất văn bản, trước hết ứng dụng cần khởi tạo font logic, rồi chuyển cho DC. Việc tạo font logic được thực hiện bằng cách gọi hàm CreateFont hoặc hàm CreateFontIndirect. Tuy nhiên, hàm CreateFont ít được sử dụng hơn do hàm cần gởi các biến trong cấu trúc LOGFONT, trong khi hàm CreateFontIndirect chỉ cần biến con trỏ LOGFONT. Cả hai hàm đều trả về handle của font logic HFONT. Trước khi ứng dụng có thể xuất văn bản, font logic cần được ánh xạ tương ứng với một font vật lý trong thiết bị xuất, hoặc font nạp vào hệ điều hành. Tiến trình này được thực hiện khi ứng dụng gọi hàm SelectObject. Khi đó, ta có thể dùng hàm GetTextMetrics (hoặc các hàm tương đương) xác định kích thước và đặc trưng của font thực để tính vị trí và xuất văn bản ra thiết bị xuất. Sau khi dùng font, ta cần loại bỏ font dùng hàm DeleteObject. Chú ý không được xoá font trong DC đang thực thi, hoặc font hệ thống. .386 .model flat,stdcall option casemap:none WinMain proto :DWORD,:DWORD,:DWORD,:DWORD include windows.inc include user32.inc include kernel32.inc include gdi32.inc includelib user32.lib includelib kernel32.lib includelib gdi32.lib RGB macro red,green,blue xor eax,eax mov ah,blue shl eax,8 mov ah,green mov al,red endm .data ClassName db "SimpleWinClass",0 AppName db "Our First Window",0 TestString db "Win32 assembly is great and easy!",0 FontName db "script",0 Người dịch: Benina (REA TEAM) Trang 3 Tổng hợp và hiệu chỉnh: NhatPhuongLe (VNCERT TEAM)
  4. Iczelion’s Tutorial Win32 ASM Tutorial 5 : More about Text .data? hInstance HINSTANCE ? CommandLine LPSTR ? .code start: invoke GetModuleHandle, NULL mov hInstance,eax invoke GetCommandLine mov CommandLine,eax invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT invoke ExitProcess,eax WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD LOCAL wc:WNDCLASSEX LOCAL msg:MSG LOCAL hwnd:HWND mov wc.cbSize,SIZEOF WNDCLASSEX mov wc.style, CS_HREDRAW or CS_VREDRAW mov wc.lpfnWndProc, OFFSET WndProc mov wc.cbClsExtra,NULL mov wc.cbWndExtra,NULL push hInst pop wc.hInstance mov wc.hbrBackground,COLOR_WINDOW+1 mov wc.lpszMenuName,NULL mov wc.lpszClassName,OFFSET ClassName invoke LoadIcon,NULL,IDI_APPLICATION mov wc.hIcon,eax mov wc.hIconSm,eax invoke LoadCursor,NULL,IDC_ARROW mov wc.hCursor,eax invoke RegisterClassEx, addr wc invoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\ WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\ CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\ hInst,NULL mov hwnd,eax invoke ShowWindow, hwnd,SW_SHOWNORMAL invoke UpdateWindow, hwnd .WHILE TRUE invoke GetMessage, ADDR msg,NULL,0,0 .BREAK .IF (!eax) invoke TranslateMessage, ADDR msg invoke DispatchMessage, ADDR msg .ENDW mov eax,msg.wParam ret WinMain endp WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM LOCAL hdc:HDC LOCAL ps:PAINTSTRUCT LOCAL hfont:HFONT .IF uMsg==WM_DESTROY invoke PostQuitMessage,NULL .ELSEIF uMsg==WM_PAINT invoke BeginPaint,hWnd, ADDR ps mov hdc,eax invoke CreateFont,24,16,0,0,400,0,0,0,OEM_CHARSET,\ OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,\ DEFAULT_QUALITY,DEFAULT_PITCH or FF_SCRIPT,\ ADDR FontName invoke SelectObject, hdc, eax Người dịch: Benina (REA TEAM) Trang 4 Tổng hợp và hiệu chỉnh: NhatPhuongLe (VNCERT TEAM)
  5. Iczelion’s Tutorial Win32 ASM Tutorial 5 : More about Text mov hfont,eax RGB 200,200,50 invoke SetTextColor,hdc,eax RGB 0,0,255 invoke SetBkColor,hdc,eax invoke TextOut,hdc,0,0,ADDR TestString,SIZEOF TestString invoke SelectObject,hdc, hfont invoke EndPaint,hWnd, ADDR ps .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax,eax ret WndProc endp end start Phân tích mã lệnh invoke CreateFont,24,16,0,0,400,0,0,0,OEM_CHARSET,\ OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,\ DEFAULT_QUALITY,DEFAULT_PITCH or FF_SCRIPT,\ ADDR FontName Hàm CreatFont tạo ra một font logic, mà các tham số đầu vào của hàm này tương ứng với các trường của cấu trúc LOGFONT (lfHeight – nHeight; lfWidth – nWidth) cũng như các font hiện có. Hàm này có nhiều tham số hơn bất cứ hàm nào khác trong Windows. Nó trả về một handle của font logic, dùng cho hàm SelectObject. Sau đây, là chi tiết các tham số của nó: CreateFont proto nHeight:DWORD,\ nWidth:DWORD,\ nEscapement:DWORD,\ nOrientation:DWORD,\ nWeight:DWORD,\ cItalic:DWORD,\ cUnderline:DWORD,\ cStrikeOut:DWORD,\ cCharSet:DWORD,\ cOutputPrecision:DWORD,\ cClipPrecision:DWORD,\ cQuality:DWORD,\ cPitchAndFamily:DWORD,\ lpFacename:DWORD nHeight: cho biết chiều cao của phông chữ, tính theo đơn vị logic. 0 là kích thước mặc định. nWidth: Chiều rộng trung bình các ký tự trong phông chữ, tính theo đơn vị logic. Nếu thông số này bằng 0, thì tỷ lệ chiều rộng, cao của thiết bị xuất sẽ trùng khớp với tỷ lệ chiều rộng, cao của các phông chữ có sẵn. Tuy nhiên trong ví dụ này, tôi set nWidth bằng 16 để cho dễ nhìn so với chiều rộng mặc định (=0) nEscapement: cho biết góc độ (tính theo đơn vị 0.1 độ hay 1/10 độ) của mỗi hàng văn bản được kết xuất, giữa escapement vector và trục x của màn hình. Escapement vector là đường kẻ từ ký tự đầu tiên và ký tự cuối cùng trên cùng một dùng. Còn góc độ sẽ được tính theo ngược chiều kim đồng hồ của trục x. Thông thường, set là 0. Set là 900 tức là tất Người dịch: Benina (REA TEAM) Trang 5 Tổng hợp và hiệu chỉnh: NhatPhuongLe (VNCERT TEAM)
  6. Iczelion’s Tutorial Win32 ASM Tutorial 5 : More about Text cả các ký tự đi hướng lên so với ký tự đầu tiên, set là 1800 thì viết hướng xuống, còn set 2700 thì viết mỗi ký tự từ trên xuống. nOrientation: Cho biết góc độ (tính theo đơn vị 0.1 độ) giữa baseline của một ký tự và trục x (tương đối so với cuối trang). Orientation cũng tương tự như Escapement nhưng chỉ áp dụng cho từng ký tự một thay vì cho cả hàng ký tự. Set là 900 các ký tự sẽ nằm ngã về trước, set 1800 thì các ký tự viết lộn ngược xuống … nWeight: cho biết độ dày của một ký tự. Hằng Trị Hằng Trị FW_DONTCARE 0 FW_SEMIBOLD 600 FW_THIN 100 FW_DEMIBOLD 600 FW_EXTRALIGHT 200 FW_BOLD 700 FW_ULTRALIGHT 200 FW_EXTRABOLD 800 FW_LIGHT 300 FW_ULTRABOLD 800 FW_NORMAL 400 FW_HEAVY 900 FW_REGULAR 400 FW_BLACK 900 FW_MEDIUM 500 Các trị trên chỉ mang tính xấp xỉ. Hình dạng thực thụ tùy thuộc vào loại mặt chữ. Một vài phông chữ chỉ có FW_NORMAL, FW_REGULAR và FW_BOLD. Nếu FW_DONTCARE được khai báo thì giá trị weight mặc định sẽ được dùng. cItalic: cho biết thuộc tính Italic (in nghiêng) của ký tự. Thông thường là 0, bất cứ giá trị nào khác 0 cũng cho ký tự có đặc tính Italic. cUnderline: cho biết thuộc tính underlined (gạch dưới). Thhường bằng 0, bất cứ giá trị nào khác 0 cũng cho ký tự có đặc tính Underlined. cStrikeout: cho biết chữ có bị gạch ngang hay không cCharSet: Cho biết bộ ký tự phông chữ. Hằng Trị Ghi chú ANSI_CHARSET 0 Được sử dụng cho đa số kết xuất khi lập trình trên Windows. Có thể là bộ chữ mà bạn sẽ sử dụng đến. Ký hiệu ANSI_CHARSET được mã hóa là 0, cho dễ dùng làm thông số mặc định DEFAULT_CHARSET 1 SYMBOL_CHARSET 2 Được dùng để hiển thị những ký hiệu thường được sử dụng trong các công thức toán học SHIFTJIS_CHARSET 128 OEM_CHARSET 255 Được dùng cho những chương trìnhở chế độ Console, gần giống như ANSI_CHARSET. Bộ ký tự OEM này mang tính phụ thuộc hệ thống nên không thể tin tưởng đem dùng trên mọi thiết bị có khả năng chạy trên nền Windows. Một vài ký tự mang mã số thấp và cao rất khác biệt nên các ký tự này ít được dùng. Người dịch: Benina (REA TEAM) Trang 6 Tổng hợp và hiệu chỉnh: NhatPhuongLe (VNCERT TEAM)
  7. Iczelion’s Tutorial Win32 ASM Tutorial 5 : More about Text cOutputPrecision: Cho biết độ chính xác kết xuất mong muốn, tức là chỉ rõ font đã chọn phải phù hợp với yêu cầu về phông chữ như: height, width, character orientation, escapementm, có thể mang một trong những giá trị sau đây: Giá trị Ý nghĩa OUT_CHARACTER_PRECIS Cho biết phông chữ phải phù hợp với tất cả các yêu cầu ngoại trừ orientation và escapment. OUT_DEFAULT_PRECIS Được dùng khi HĐH có thể chọn một phông chữ “hợp lý”. Đây là mục chọn đựơc dùng nhiều nhất nên tương đương với 0 như là mặc định. OUT_DEVICE_PRECIS Chỉ thị cho font mapper chọn Device font khi hệ thống chứa nhiều phông chữ cùng mang một tên. OUT_RASTER_PRECIS Chỉ thị cho font mapper chọn raster font khi hệ thống chứa nhiều phông chữ cùng mang một tên OUT_STRING_PRECIS Cho biết phông chữ chọn bởi HĐH phải phù hợp với yêu cầu về kích cỡ OUT_STROKE_PRECIS Cho biết phông chữ chọn bởi HĐH phải phù hợp với yêu cầu. OUT_TT_PRECIS Chỉ thị cho font mapper TrueType khi hệ thống chứa nhiều phông chữ cùng mang một tên. cClipPrecision: Cho biết clipping precision. Clipping precision định nghĩa làm thế nào để cắt xén các ký tự vượt quá vùng clipping region. Có thể mang một trong các giá trị sau: Giá trị Giải thích CLIP_DEFAULT_PRECIS Cho phép HĐH chọn một phông chữ “hợp lý”. Đây là mục chọn thường xuyên được chọn nhiều nhất, và bằng 0. CLIP_CHARACTER_PRECIS Đòi hỏi HĐH chọn một phông chữ của phép xén riêng rẻ từng ký tự một nếu bất cứ phần nào của ký tự nằm ngoài rìa của vùng clipping region. CLIP_STROKE_PRECIS Đòi hỏi HĐH chọn một phông chữ cho phép xén những phần nào của từng ký tự một ký tự nằm trên đường biên clipping region. CLIP_LH_ANGLES Khi trị này được dùng, việc cho quay phông chữ tùy thuộc vào orientation của hệ thống tọa độ là tay trái hay tay phải. cQuality: Cho biết chất lượng kết xuất của phông chữ, định nghĩa làm thế nào GDI phải chọn cẩn thận để cố gắng phù hợp với các thuộc tính của font logic với thuộc tính của phông chữ vật lý hiện hành. Có thể là một trong những trị sau đây: Giá trị Giải thích DEFAULT_QUALITY Không để ý đến kiểu của phông chữ DRAFT_QUALITY Kiểu kết xuất của phông chữ ít quan trọng so với PROOF_QUALIFY. Đối với những GDI raster fonts, chế độ scaling có hiệu lực. Bold, Italic, underline, và strikeout font sẽ được synthesized nếu thấy cần thiết. PROOF_QUALITY Chất lượng ký tự in ra quan trọng hơn là làm cho nó phù hợp với các thuộc tính của font logic. Đối với GDI raster font, thì chế độ scaling sẽ bị vô hiệu hóa và phông chữ gần nhất về kích cỡ sẽ được chọn. Bold, Italic, underline, và strikeout font sẽ được synthesized nếu thấy cần thiết. Người dịch: Benina (REA TEAM) Trang 7 Tổng hợp và hiệu chỉnh: NhatPhuongLe (VNCERT TEAM)
  8. Iczelion’s Tutorial Win32 ASM Tutorial 5 : More about Text cPitchAndFamily: Cho biết pitch và họ phông chữ. Hai bit low-order cho biết pitch của phông chữ, và có thể là một trong những trị sau đây: Giá trị Giải thích FF_DECORATIVE Phông chữ lạ thường. Thí dụ: Old English. FF_DONTCARE Bất cần hoặc không biết đến FF_MODERN Phông chữ với khổ rộng cố định (fixed-pitch), có Serifs hoặc không. Fixed- pitch font thường là modern faces. Thí dụ: Courier New FF_ROMAN Phông chữ với khổ rộng thay đổi có Serifs. Thí dụ: Times New Roman và Century Schoolbook. FF_SCRIPT Phông chữ được thiết kế in ra giống như viết tay. Thí dụ: Script và Cursive FF_SWISS Phông chữ với khổ rộng thay đổi không có Serifs. Thí dụ: MS Sans Serif. lpFacename: Con trỏ trỏ đến một chuỗi Null-terminate cho biết tên mặt chữ (Typeface) của font. Bề dày của chuỗi không được quá 32 ký tự. Hàm EnumFontFamilies() có thể được dùng để liệt kê ra những phông chữ hiện có sẵn. Nếu lpFacename = NULL, GDI sẽ dùng một device-independent typeface. Mô tả dưới đây không bao trùm hết ý tác giả muốn nói, bạn có thể tham khảo Win32 API reference để được chi tiết hơn invoke SelectObject, hdc, eax mov hfont,eax Sau khi lấy được handle của font logic, chúng ta phải dùng nó để chọn font bên trong DC bằng cách gọi hàm SelectObject. Hàm SelectObject đặt các đối tượng GDI mới như pens, brushs và fonts trong DC để hàm API đó sử dụng. Nó trả về một handle của đối tượng GDI cũ mà bạn đã chọn bằng hàm API SelectObject trước đó, nhưng nó đã bị thay thế bởi đối tượng GDI mới mà chúng ta đã thiết lập các giá trị về pen, brush, và font để SelectObject sử dụng trong tương lai. Sau khi gọi hàm SelectObject, chữ xuất ra sẽ dùng font mà chúng ta đã chọn trong DC. RGB 200,200,50 invoke SetTextColor,hdc,eax RGB 0,0,255 invoke SetBkColor,hdc,eax Dùng macro RGB để tạo một giá trị 32-bit RGB được sử dụng bởi hàm SetColorText và SetBkColor. invoke TextOut,hdc,0,0,ADDR TestString,SIZEOF TestString Gọi hàm TextOut để vẽ chữ trên vùng client. Chữ sẽ có font và color mà chúng ta chọn. invoke SelectObject,hdc, hfont Khi đã sử dụng xong đối tượng font mới, bạn phải nạp lại (khôi phục lại handle) của font cũ trong DC. Bạn sẽ phải luôn restore lại đối tượng cũ mà bạn đã thay thế bằng đối tượng mới trong DC. Người dịch: Benina (REA TEAM) Trang 8 Tổng hợp và hiệu chỉnh: NhatPhuongLe (VNCERT TEAM)
Đồng bộ tài khoản