Vấn đề thể hiện kích thước chữ (Label, button, checkbox...) trên WinForm

Liên hệ QC

giaiphap

==(^o^)==
Tham gia
12/3/07
Bài viết
5,778
Được thích
6,274
Donate (Momo)
Donate
Giới tính
Nam
Tôi có vấn đề mà chưa biết cách khắc phục, nhờ các thành viên ai có kinh nghiệm trợ giúp tôi với.
Tôi viết Add-Ins cho Excel bằng C#, ở máy tính của mình thì nó thể hiện đúng như mình thiết kế, nhưng sang máy khác thì kích thước chữ của các đối tượng (Label, checkbox, button...) trên WinForm đều thể hiện to hơn bình thường (to hơn mình thiết kế ở máy của mình). Vấn đề này tôi cũng từng gặp khi viết ứng dụng Windows nhưng đến thời điểm hiện tại vẫn chưa biết cách khắc phục, vậy có thành viên nào có kinh nghiệm về vấn đề này có thể hỗ trợ tôi khắc phục với, hoặc có gợi ý nào để tôi tham khảo với.
Dưới đây là một số ảnh kích thước chữ bị to dẫn đến trường hợp không thể hiện hết nội dung cần thể hiện.
H3.jpg
H2.jpg
H1.jpg
 
Có thể do một số máy tính thiết lập độ hiển thị hơn 100% nên xảy ra hiện tượng này !
 
Có thể do một số máy tính thiết lập độ hiển thị hơn 100% nên xảy ra hiện tượng này !
Vấn đề ở đây là mình cần điều chỉnh ứng dụng mình sao cho phù hợp với độ phan giải của máy người khác. Mình không muốn điều chỉnh máy của họ mà cần phải tự điều chỉnh ứng dụng của mình nó sẽ hay hơn. Còn nếu bí quá thì cho phép người dùng tùy chỉnh kích thước hiển thị size các control theo máy tính của họ.
 
Lập trình giao diện người dùng thì "ăn ngủ chung" với DPI đó anh
Thử với từ khóa "WinForm DPI"
Hoặc học hỏi mã nguồn các ứng dụng khác NotePad++ hoặc PowerToys
 
Từ Windows 10 trở lên nó hỗ trợ zoom màn hình với các tỷ lệ như 100%, 125%, 150%, 200%, 250%,... Cái này thuộc khái niệm DPI. Các phần mềm lập trình thông thường thì chỉ chạy đúng khi để 100%. Các IDE mới như Visual Studio, RAD Studio họ đều hỗ trợ tự động hóa điều chỉnh size các controls của họ theo DPI nên nếu dùng thuần các controls của IDE thì không bị lỗi. Nếu bạn dùng các controls của bên thứ ba thì tìm hiểu họ đã cập nhật phần tự điều chỉnh DPI chưa, phiên bản nào hỗ trợ thì bạn dùng. Nếu bạn chưa có kinh nghiệm xử lý DPI hoặc tránh mất nhiều công phải tự xử lý thì nên tránh dùng các controls lạ. Form bạn xây dựng hình như còn dùng cả SetWindowRgn theo ảnh, vụ này cũng sẽ mất nhiều công xử lý DPI đó.
 
Từ Windows 10 trở lên nó hỗ trợ zoom màn hình với các tỷ lệ như 100%, 125%, 150%, 200%, 250%,... Cái này thuộc khái niệm DPI. Các phần mềm lập trình thông thường thì chỉ chạy đúng khi để 100%. Các IDE mới như Visual Studio, RAD Studio họ đều hỗ trợ tự động hóa điều chỉnh size các controls của họ theo DPI nên nếu dùng thuần các controls của IDE thì không bị lỗi. Nếu bạn dùng các controls của bên thứ ba thì tìm hiểu họ đã cập nhật phần tự điều chỉnh DPI chưa, phiên bản nào hỗ trợ thì bạn dùng. Nếu bạn chưa có kinh nghiệm xử lý DPI hoặc tránh mất nhiều công phải tự xử lý thì nên tránh dùng các controls lạ. Form bạn xây dựng hình như còn dùng cả SetWindowRgn theo ảnh, vụ này cũng sẽ mất nhiều công xử lý DPI đó.
Đúng như anh nói em dùng bộ Control của bên thứ 3, còn vụ DPI để em nghiên cứu thử.
 
Tôi chỉ khuyên chút còn nghe hay không thì tùy

1/ Tôi thấy trên VB6 tốn quá nhiều bài dài lê thê nói về xử lý DPI khi ai đó tự tạo các Controls

2/ Nên sử dụng cái có sẳn mặc định trên bất cứ ngôn ngữ nào mà dùng cho lành

3/ kẹt quá bất đắc dĩ mới sử dụng đồ của bên thứ 3 khi ta không có khả năng viết ra nó hay chi phí viết ra nó mất nhiều thời gian

thì nên sử dụng cho nhanh vì mục đích xxx gì đó còn không thì cũng bỏ đi cho lành

tạm vậy đi
 
Em thì hay làm kiểu phóng kích thước và vị trí x, y của control theo một kích thước mốc (thường thì em lấy theo kích thước của winform) khi load theo một tỉ lệ khác thì kích thước control nó cũng được tính lại và thay đổi theo
 
Nhờ sự gợi ý của @HeSanbi@Nguyễn Duy Tuân em đã cấu hình được sản phẩm chạy ngon cành đào rồi, đúng là DPI giờ mình mới biết, trước giờ toàn lập trình ra sản phẩm đều bị lỗi size chữ như thế mà không biết cách sửa, hôm nay học được bài học lớn.
Sẳn đây cho hỏi thêm câu hỏi nửa (khỏi lập Topic mới), trong ứng dụng của tôi có lưu cấu hình vào File xml, ở máy mình chạy rất ngon nhưng sang máy khác (lúc này add-ins của mình cài vào đường dẫn C:\Program Files (x86)\VnTools Excel...) lưu vào file xml không được, toàn báo lỗi, mặc dù đọc dữ liệu từ file này bình thường. Thành viên nào biết nguyên nhân hướng dẫn mình khắc phục với. Cảm ơn các thành viên diễn này trước nhé.
 
Nhờ sự gợi ý của @HeSanbi@Nguyễn Duy Tuân em đã cấu hình được sản phẩm chạy ngon cành đào rồi, đúng là DPI giờ mình mới biết, trước giờ toàn lập trình ra sản phẩm đều bị lỗi size chữ như thế mà không biết cách sửa, hôm nay học được bài học lớn.
Sẳn đây cho hỏi thêm câu hỏi nửa (khỏi lập Topic mới), trong ứng dụng của tôi có lưu cấu hình vào File xml, ở máy mình chạy rất ngon nhưng sang máy khác (lúc này add-ins của mình cài vào đường dẫn C:\Program Files (x86)\VnTools Excel...) lưu vào file xml không được, toàn báo lỗi, mặc dù đọc dữ liệu từ file này bình thường. Thành viên nào biết nguyên nhân hướng dẫn mình khắc phục với. Cảm ơn các thành viên diễn này trước nhé.
Đã chạy quyền admin chưa?
 
Các máy tính Windows hầu hết được cài đặt bởi "cài win dạo", user đều không phải Administrator nên bị giới hạn quyền write vào phân vùng cài đặt Windows, đặc biệt mấy thư mục của hệ thống.
Thêm nữa từ Windows 10 trình chặn virus mặc định cấm write ở một số thư mục nào đó.
 
Các máy tính Windows hầu hết được cài đặt bởi "cài win dạo", user đều không phải Administrator nên bị giới hạn quyền write vào phân vùng cài đặt Windows, đặc biệt mấy thư mục của hệ thống.
Thêm nữa từ Windows 10 trình chặn virus mặc định cấm write ở một số thư mục nào đó.
Cũng có thể do quyền Admin, nhưng vấn đề là có cách nào qua mặt nó hay không? Những phần mềm khác người ta làm cách nào để ghi được dữ liệu mặc dù mình không chạy với quyền admin. Vấn đề ghi dữ liệu này đối với tôi không khó (chỉ cần ghi dữ liệu vào nơi khác là được) nhưng tui muốn tìm giải pháp nào tối ưu hơn để lưu dữ liệu vào chính thư mục cài đặt cho dễ quản lý.
Còn vụ chạy với quyền admin để mai thử lại (do mượn máy người khác để test), nhưng cái nửa hỏi rõ hơn để làm cho dễ, file của tui là xll, file add-ins của excel, vậy chạy Excel với quyền admin hay chạy xll bằng cách nào vậy @YêuCN
 
Cũng có thể do quyền Admin, nhưng vấn đề là có cách nào qua mặt nó hay không? Những phần mềm khác người ta làm cách nào để ghi được dữ liệu mặc dù mình không chạy với quyền admin. Vấn đề ghi dữ liệu này đối với tôi không khó (chỉ cần ghi dữ liệu vào nơi khác là được) nhưng tui muốn tìm giải pháp nào tối ưu hơn để lưu dữ liệu vào chính thư mục cài đặt cho dễ quản lý.
Còn vụ chạy với quyền admin để mai thử lại (do mượn máy người khác để test), nhưng cái nửa hỏi rõ hơn để làm cho dễ, file của tui là xll, file add-ins của excel, vậy chạy Excel với quyền admin hay chạy xll bằng cách nào vậy @YêuCN
Bạn chạy quyền admin với file excel.exe xong mở file xll là được! (đã thử)
 
Tôi nghĩ nên viết 1 cái exe chạy bằng quyền admin xong cho nó làm nhiệm vụ ghi file xml vào đó ! Trong xll gọi exe khi cần!
Đây cũng là một cách tham khảo, ban đầu tui định tạo thư mục trong Documents và ghi vào thư mục này. Để cân nhắc một trong hai cách làm này, cần sự tư vấn thêm nhiều cách nửa.
 
TỪ VB6 to Delphi nếu có các file đính kèm tôi toàn đính ngay trong DLL hay Exe khi cần load trực tiếp trong đó luôn không cần xuất ra HD

Còn trên C# tôi nghĩ cũng có chức năng đó Resource
 
Nhờ sự gợi ý của @HeSanbi@Nguyễn Duy Tuân em đã cấu hình được sản phẩm chạy ngon cành đào rồi, đúng là DPI giờ mình mới biết, trước giờ toàn lập trình ra sản phẩm đều bị lỗi size chữ như thế mà không biết cách sửa, hôm nay học được bài học lớn.
Sẳn đây cho hỏi thêm câu hỏi nửa (khỏi lập Topic mới), trong ứng dụng của tôi có lưu cấu hình vào File xml, ở máy mình chạy rất ngon nhưng sang máy khác (lúc này add-ins của mình cài vào đường dẫn C:\Program Files (x86)\VnTools Excel...) lưu vào file xml không được, toàn báo lỗi, mặc dù đọc dữ liệu từ file này bình thường. Thành viên nào biết nguyên nhân hướng dẫn mình khắc phục với. Cảm ơn các thành viên diễn này trước nhé.

Nếu bạn tạo bộ cài đặt bằng InnoSetup thì thêm Section [Dirs] vào và thiết lập quyền để ghi dữ liệu.
[Dirs]
;Nếu muốn ghi dữ liệu vào nơi Windows cho phép thì tạo thiết lập dưới đây:
Name: {commonappdata}\{app}; Permissions: users-modify
;Nếu muốn ghi dữ liệu vào thư mục ứng dụng thì tạo thiết lập dưới đây:
Name: {app}; Permissions: users-modify
 
Web KT
Back
Top Bottom