• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Đường dẫn khít Label không dùng API

Các thủ thuật liên quan đến việc xử lý ứng dụng, biểu mẫu và control
Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4761
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Đường dẫn khít Label không dùng API

Gửi bàigửi bởi truongphu » CN 06/04/2008 2:53 pm

Thủ thuật: Đường dẫn khít Label không dùng API
Tác giả: truongphu
Mô tả: Đường dẫn khít Label không dùng API. Nhờ Admin test thử, nếu tốt xin move vào bài cùng tên


Mã: Chọn hết

  1. Dim str$, i& 'Code by Truong Phú
  2.    str = "C:\BinhPhuong\goldsoft\Download\web_wiz_forums_access2000_v7.01\forum\index.asp"
  3.          Do While Me.TextWidth(Label2.Caption) < Label2.Width - 60
  4.                Label2.Caption = Left$(str, i) & "..." & Right$(str, Len(str) - InStrRev(str, "\", , 1) + 1)
  5.                i = i + 1
  6.          Loop


o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
QuanGL
VIP
VIP
Bài viết: 76
Ngày tham gia: T.Năm 04/01/2007 7:37 pm
Đến từ: Hành tinh thứ tư tính từ Mặt Trời ^^!
Been thanked: 4 time

Re: Đường dẫn khít Label không dùng API

Gửi bàigửi bởi QuanGL » T.Hai 07/04/2008 9:02 pm

truongphu xem lại nhé. Label để Autosize = True, F5 phát đơ luôn :D
I'm in the mood for love

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4761
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Re: Đường dẫn khít Label không dùng API

Gửi bàigửi bởi truongphu » T.Hai 07/04/2008 9:48 pm

Cảm ơn QuanGL đã Test
Tuy vòng lặp lớn nhưng máy chưa đơ, Label không thể hiện được caption mà thôi, vẫn tắt được Form đang chạy!
Sau đây là code v1.1 bản chính thức

Mã: Chọn hết

  1. Private Sub Form_Load() 'thêm môt Label1
  2. Label1.AutoSize = False
  3. Dim str$, i& 'Code by Truong Phú, QuanGL hiêu Ðính
  4.    str = "C:\BinhPhuong\goldsoft\Download\web_wiz_forums_access2000_v7.01\forum\index.asp"
  5.          Do While Me.TextWidth(Label1.Caption) < Label1.Width - 60
  6.                Label1.Caption = Left$(str, i) & "..." & Right$(str, Len(str) - InStrRev(str, "\", , 1) + 1)
  7.                i = i + 1
  8.          Loop
  9. End Sub

ghi chú: Hàm Function PathCompactPath có gọi hàm API khi khai Label1.AutoSize = True cũng mất tác dụng. Hiện đã chỉnh sửa rồi
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
QuanGL
VIP
VIP
Bài viết: 76
Ngày tham gia: T.Năm 04/01/2007 7:37 pm
Đến từ: Hành tinh thứ tư tính từ Mặt Trời ^^!
Been thanked: 4 time

Re: Đường dẫn khít Label không dùng API

Gửi bàigửi bởi QuanGL » T.Ba 08/04/2008 7:44 pm

Hôm trước tính chuyển Chủ đề này vào bên trong nhưng khi test thì phát sinh lỗi. Do hôm trước vội vàng quên nói luôn với bác là: khi chỉnh font chữ khác (lớn hơn) thì hiểu quả sẽ không còn. Bác xem lại nhé!
I'm in the mood for love

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4761
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Re: Đường dẫn khít Label không dùng API

Gửi bàigửi bởi truongphu » T.Ba 08/04/2008 9:47 pm

:P
Sửa lần cuối bởi truongphu vào ngày T.Năm 10/04/2008 6:13 am với 1 lần sửa.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
QuanGL
VIP
VIP
Bài viết: 76
Ngày tham gia: T.Năm 04/01/2007 7:37 pm
Đến từ: Hành tinh thứ tư tính từ Mặt Trời ^^!
Been thanked: 4 time

Re: Đường dẫn khít Label không dùng API

Gửi bàigửi bởi QuanGL » T.Ba 08/04/2008 11:17 pm

Lỗi hay không lỗi là do người dùng đánh giá, tôi cũng không muốn nhiều lời làm gì. Có thể nói code trên đã hoạt động tốt. Nhưng hoạt động tốt với ai? Với truongphu, người viết ra code, thì có thể nói là không gặp trở ngại gì. Còn đối với những người mới bắt đầu học VB thì sao? Load code lên thấy màn hình Vb6 cứng đơ vì vòng lặp vô hạn? Họ sẽ giải quyết ra sao? Lên diễn đàn và hỏi? Mất thời gian của cả đôi bên. Mà truongphu đã thử với 1 Label có chiều rộng khá dài chưa? => Vòng lặp vô hạn, phải Ctrl + Break thì mới trở về IDE của VB6 được. Như đã được học và tự học ở một số ngôn ngữ lập trình khác thì vòng lặp vô hạn người ta gọi là gì? Code không sai nhưng khi chạy bạn phải kiểm tra nhiều trường hợp chứ? Test thì không thể nói là test chơi được, nếu là test chơi thì một quy trình sản xuất ra phần mềm người ta đã không chú trọng khâu testing rồi.
Vài dòng thế, truongphu xem lại, được chứ?
P.S: không phải vì chức danh điều hành của tôi mà truongphu mới edit source lại, mà với ai cũng thế, mọi người đều bình đẳng, tôn trọng nhau trên 4rum. Đúng thì nghe, không đúng thì bỏ ngoài tai, không ảnh hưởng gì tới nhau.
I'm in the mood for love

giongto35
Thành viên danh dự
Thành viên danh dự
Bài viết: 194
Ngày tham gia: T.Năm 19/04/2007 10:17 am
Đến từ: Đà Nẵng City
Been thanked: 1 time
Liên hệ:

Re: Đường dẫn khít Label không dùng API

Gửi bàigửi bởi giongto35 » T.Ba 08/04/2008 11:53 pm

em thấy 2 hàm đó cũng chẳng khác gì nhau , như bác truongphu đã phân tích . Vậy nếu cả 2 cái đều giống nhau như vậy thì hoặc move cả 2 bài ra hoặc move cả 2 bài zô . mà bài được move zô là bài sử dụng win32 (Chuẩn) thì sao bài bác truongphu ko được move .
Thật ra bắt bí tìm lỗi cũng ko nên , vì như bác truongphu đã nói : Test chơi thì được nhưng ý nghĩa thì thiếu LOGIC . <= cái này đúng .
Kính lão đắc thọ mà anh :D
________________________________________________________________________________________________
. . . . . . . . . . . . .. .

Hình đại diện của người dùng
QuanGL
VIP
VIP
Bài viết: 76
Ngày tham gia: T.Năm 04/01/2007 7:37 pm
Đến từ: Hành tinh thứ tư tính từ Mặt Trời ^^!
Been thanked: 4 time

Re: Đường dẫn khít Label không dùng API

Gửi bàigửi bởi QuanGL » T.Tư 09/04/2008 1:07 pm

Khi dùng PathCompactPath thì label để kiểu nào chạy vẫn được (có thể hiển thị đúng/sai) nhưng không rơi vào tình trạng vòng lặp vô hạn như vậy. Tôi chỉ có ý nói bác truongphu chú thích thêm trong code/bài viết để người dùng khác tránh được tình trạng ấy thôi. Tôi cũng không dư thời gian đâu mà ngồi kiểm tra theo kiểu bắt bí từng chủ đề một. Nhiều khi ý tốt lại bị hiểu nhầm thế đấy.
Tập tin đính kèm
whatisthis.JPG
PathCompactPath
I'm in the mood for love

Hình đại diện của người dùng
NoBi
Quản trị
Quản trị
Bài viết: 954
Ngày tham gia: T.Ba 18/03/2008 1:22 pm
Đến từ: Sài Gòn
Has thanked: 51 time
Been thanked: 66 time
Liên hệ:

Re: Đường dẫn khít Label không dùng API

Gửi bàigửi bởi NoBi » T.Tư 09/04/2008 9:27 pm

Việc QuanGL test thủ thuật này mà để Autosize = True là sai với ý nghĩa của thủ thuật này rồi. Thủ thuật này đòi hỏi label phải có kích thước cố định, chử mới có thể co dản nằm trong label được chứ :) .
Mình nghĩ bác truongphu nên vui vì ng ta có thích thú thì mới theo dõi và chạy thử code của mình và sẽ không có việc người này "kê" người nọ như vậy trong forum này (đây cũng là lý do để nó tồn tại tới ngày hôm nay). Tất cả coder như anh em chúng ta ai mà hổng muốn hoàn thiện code đến mức tối đa, do đó việc phát hiện ra 1 kỷ thuật hay thì mọi người cùng nhào vào góp ý để nó tốt nhất là đương nhiên.
Trở lại với thủ thuật này, theo mình thì cái hàm TextWidth kia là của Form, do đó nó phụ thuộc vào font chử, đơn vị tính của Form nữa.
:>

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4761
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Re: Đường dẫn khít Label không dùng API

Gửi bàigửi bởi truongphu » T.Tư 09/04/2008 9:45 pm

Cảm ơn NoBi đã giảng hòa
Đúng như NoBi nhận xét, có lệ thộc Form.font
Cầu toàn thì cố định luôn Form.font và label.font
:D :D
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
QuanGL
VIP
VIP
Bài viết: 76
Ngày tham gia: T.Năm 04/01/2007 7:37 pm
Đến từ: Hành tinh thứ tư tính từ Mặt Trời ^^!
Been thanked: 4 time

Re: Đường dẫn khít Label không dùng API

Gửi bàigửi bởi QuanGL » T.Tư 09/04/2008 11:08 pm

:D Theo như anh Nobi đã nói, em làm theo cách như sau (không phụ thuộc chủ yếu vào TextWidth, phụ thuộc vào chính thuộc tính Width của Label nên code dài quá :-S )

Mã: Chọn hết

  1. Sub fit_label()
  2. Dim a&, b&, c&, f&, g&, str$, i&
  3. Me.Font = Label1.Font
  4. str = "C:\BinhPhuong\goldsoft\Download\web_wiz_forums_access2000_v7.01\forum\index.asp"
  5. f = Label1.Width
  6. Label1.Caption = str
  7. Label1.AutoSize = True
  8. g = Label1.Width
  9. Label1.AutoSize = False
  10. Label1.Width = f
  11. Label1.Caption = ""
  12. c = TextWidth("W")
  13. If g < f Then
  14.     Label1.Caption = str
  15. Else
  16.     For i = 1 To Len(str)
  17.         Label1.AutoSize = True
  18.         a = Label1.Width
  19.         If a > f - c Then Label1.AutoSize = False: Label1.Width = f: Exit For
  20.         Label1.Caption = Left$(str, i) & "..." & Right$(str, Len(str) - InStrRev(str, "\", , 1) + 1)
  21.     Next i
  22. End If
  23. End Sub
  24. Private Sub Form_Load()
  25. Me.ScaleMode = 3
  26. End Sub
  27.  
  28. Private Sub Form_Resize()
  29. Label1.Move 10, 0, ScaleWidth - 15
  30. fit_label
  31. End Sub

Bác truongphu xem rồi chỉnh code ngắn gọn lại dùm mình luôn hen ;)
I'm in the mood for love

Hình đại diện của người dùng
NoBi
Quản trị
Quản trị
Bài viết: 954
Ngày tham gia: T.Ba 18/03/2008 1:22 pm
Đến từ: Sài Gòn
Has thanked: 51 time
Been thanked: 66 time
Liên hệ:

Re: Đường dẫn khít Label không dùng API

Gửi bàigửi bởi NoBi » T.Năm 10/04/2008 12:10 am

Còn đây là đoạn code của anh nè, dựa theo ý tưởng của bác truongphu :P :

Mã: Chọn hết

  1. Private Sub Form_Load() 'thêm môt Label1
  2.     Dim str$, lastStr$, i& 'Code by Truong Phú, QuanGL hiêu Ðính
  3.  
  4.     Label1.AutoSize = False
  5.     Me.FontName = Label1.FontName
  6.     Me.FontSize = Label1.FontSize
  7.     'Me.FontBold = Label1.FontBold
  8.     'Me.FontItalic = Label1.FontItalic
  9.  
  10.     str = "C:\BinhPhuong\goldsoft\Download\web_wiz_forums_access2000_v7.01\forum\index.asp"
  11.     lastStr = "..." & Right$(str, Len(str) - InStrRev(str, "\", , 1) + 1)
  12.     Label1.Caption = lastStr
  13.  
  14.     Do While Me.TextWidth(Label1.Caption) < Label1.Width - Me.TextWidth("A")
  15.           Label1.Caption = Left$(str, i) & lastStr
  16.           i = i + 1
  17.     Loop
  18. End Sub
:>

Hình đại diện của người dùng
QuanGL
VIP
VIP
Bài viết: 76
Ngày tham gia: T.Năm 04/01/2007 7:37 pm
Đến từ: Hành tinh thứ tư tính từ Mặt Trời ^^!
Been thanked: 4 time

Re: Đường dẫn khít Label không dùng API

Gửi bàigửi bởi QuanGL » T.Năm 10/04/2008 12:53 am

Code của anh Nobi và em giống nhau phần Me.TextWidth("A") ( "W" ý tưởng đụng nhau :D).
Cách giải quyết của anh Nobi ngắn gọn và tốt nữa. Cám ơn bác truongphu đã đưa ra ý tưởng hay giúp mọi người có thể thông suốt được vấn đề :P
I'm in the mood for love


Quay về “[VB] Ứng dụng - Form và Control”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.0 khách