Article View: pl.comp.bazy-danych.msaccess
Article #125021Re: Font autosize access
From: BraZby
Date: Fri, 15 Aug 2008 16:19
Date: Fri, 15 Aug 2008 16:19
165 lines
6479 bytes
6479 bytes
Użytkownik "Krzysztof Pozorek" <access@vis.pl> napisał w wiadomości
news:g83l98$a9a$1@news.onet.pl...
> (...)
>> Tworzę etykiety za pomocą raportu w Accessie 2003.
>> Jak zrobić aby wielkość czcionki automatycznie dopasowywała się
>> do stałej wielkości pola etykiety ?
>> Ilość wpisywanych znaków max 20.
>> Chodzi o to aby tekst zmieścił się w jednej linii z max możliwą
>> wielkością czcionki.
>
> Access nie ma takich wbudowanych mozliwosci.
>
> Ale nie ma rzeczy niemozliwych, trzeba kombinowac. Przepis na sukces:
> - jeden BraZby
> - jakies API
> i to wszystko ;-)
[...]
No niezupełnie.
Jeden BraZby może (aczkolwiek niekoniecznie), API niepotrzebne ;-)
Kusiło mnie użycie API, ale dość dawno nie ruszałem API operującego na
tekście więc odpuściłem. Potrzebne funkcje API można znaleźć w przykładach:
2.2. Grawerowanie siekierą, czyli prymitywny "pseudoRTF" w kontrolce Image.
2.3. . Kontynuacja tematu . czyli jak napisać w pseudoetykiecie tekst
pionowo w kierunku od dołu do góry ?
na stronie:
http://www.bratki.w.v1.pl/accesspseudofaq/31a_ImgHDCFaq.htm
Ja spróbowałem zrobić to bez API,
'_______________________________
1. Raport pomocniczy rptTest:
Public m_lHeight As Long
Public m_lHeightBis As Long
' utwórz Raport pomocniczy rptTest a na nim dwa formanty TextBox
' identyczne z Twoją etykietą na raporcie głównym ,
' Me.txtTest i ustaw mu CanShrink = True
' Me.txtTestBis i ustaw mu CanShrink = False, ten formant jest potrzebny ,
' w przypadku gdy tekst jest krótki i należy powiększać czcionkę,
' a równocześnie wysokość etykiety jest na tyle wysoko, że pomieści
' dwa lub więcej wierszy
Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
m_lHeight = Me.txtTest.Height '
m_lHeightBis = Me.txtTestBis.Height
End Sub
Raport roboczy:
'________________________
Private m_lHeight As Long
Private m_lHeightBis As Long
Private m_lFontSize As Long
Private rpt As Report
'_____________________________________
' Twoja etykieta to "txtLabel"
Private Sub Report_Open(Cancel As Integer)
DoCmd.OpenReport "rptTest", acViewPreview
Set rpt = Reports("rptTest")
m_lFontSize = Me.TxtLabel.FontSize
With rpt
.Visible = False
' ustaw wielkość formantów w "rptTest", na takie same jak txtLabel
' zakładam, że atrybuty czcionki są takie same
.txtTest.Height = Me.TxtLabel.Height
.txtTest.Width = Me.TxtLabel.Width
.txtTestBis.Height = Me.TxtLabel.Height
.txtTestBis.Width = Me.TxtLabel.Width
.txtTest.FontSize = m_lFontSize
.txtTest = "X"
.txtTestBis = "X"
' wymuś odświeżenie raportu
.txtTest.Visible = False
.txtTest.Visible = True
DoEvents
' pobierz wymiary pionowe, po wykonaniu
' się Detail_Print w "rptTest"
m_lHeight = .m_lHeight()
m_lHeightBis = .m_lHeightBis()
End With
End Sub
'_________________________________________________________
Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
Dim lHeightTmp As Long
With rpt
' przywróc wielkość czcionki
.txtTest.FontSize = m_lFontSize
' przypisz aktualny tekst
.txtTest = Me.TxtLabel.Value
' wymuś odświeżenie raportu
.txtTest.Visible = False
.txtTest.Visible = True
DoEvents
' pobierz aktualną wysokość formantu w "rptTest"
lHeightTmp = .m_lHeight()
If lHeightTmp > m_lHeight Then
' za duży formant, zmiejszaj czcionkę
Do
.txtTest.FontSize = .txtTest.FontSize - 1
' wymuś odświeżenie raportu
.txtTest.Visible = False
.txtTest.Visible = True
DoEvents
' pobierz aktualną wysokość formantu
lHeightTmp = .m_lHeight
Loop Until lHeightTmp <= m_lHeight
Me.TxtLabel.FontSize = .txtTest.FontSize
Else
' zwiększ o 1 pkt wielkość czcionki
.txtTest.FontSize = .txtTest.FontSize + 1
' wymuś odświeżenie raportu
.txtTest.Visible = False
.txtTest.Visible = True
DoEvents
' pobierz aktualną wysokość formantu
lHeightTmp = .m_lHeight
' sprawdź, jak wymiar pionowy się zmienił
If lHeightTmp > .m_lHeight Then
' nie rób nic, bo wysokość się zwiększyła
Else
Do
.txtTest.FontSize = .txtTest.FontSize + 1
' wymuś odświeżenie raportu
.txtTest.Visible = False
.txtTest.Visible = True
DoEvents
' pobierz aktualną wysokość formantu
lHeightTmp = .m_lHeight
Loop Until lHeightTmp > m_lHeightBis
Me.TxtLabel.FontSize = .txtTest.FontSize
End If
End If
'Debug.Print .txtTest.FontSize
End With
End Sub
Private Sub Report_Close()
Set rpt = Nothing
End Sub
Powinno zadziałać.
Resztę dopasuj sobie sam.
--
Pozdrowienia
BraZby
www.bratki.w.v1.pl/accesspseudofaq
Technical Details
Message-ID:
<g84aa9$np9$1@news.onet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mailReferences:
<g83ke7$pfq$1@nemesis.news.neostrada.pl> <g83l98$a9a$1@news.onet.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail From: "BraZby" <brazby@BEZTEGOpoczta.onet.pl> Newsgroups: pl.comp.bazy-danych.msaccess Subject: Re: Font autosize access Date: Fri, 15 Aug 2008 18:19:22 +0200 Organization: Onet.pl Lines: 168 Message-ID: <g84aa9$np9$1@news.onet.pl> References: <g83ke7$pfq$1@nemesis.news.neostrada.pl> <g83l98$a9a$1@news.onet.pl> NNTP-Posting-Host: pj007.multi-play.net.pl X-Trace: news.onet.pl 1218817161 24361 91.142.206.154 (15 Aug 2008 16:19:21 GMT) X-Complaints-To: usenet@news.onet.pl NNTP-Posting-Date: Fri, 15 Aug 2008 16:19:21 +0000 (UTC) X-Sender: 1rp7WqKRey31dYvkfRe2d9YYOdDSUIzb X-RFC2646: Format=Flowed; Original X-Antivirus-Status: Clean X-Newsreader: Microsoft Outlook Express 6.00.2900.2180 X-Antivirus: avast! (VPS 080109-0, 2008-01-09), Outbound message X-Priority: 3 x-mimeole: Produced By Microsoft MimeOLE V6.00.2900.2180 X-MSMail-Priority: Normal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit