Se va potrivi textul în celulă (cu exemple de utilizare a dimensiunii automate a fontului, a ambalajului de linie)

Se ridică periodic întrebarea: se va potrivi textul în celula documentului tabelului? Deși se întâmplă rar, dar se întâmplă totuși. Acest articol descrie cum puteți obține un răspuns la această întrebare.







Pe Internet am întâlnit o varietate de soluții, dar toate dintre ele au fost „probabilist“ natura și s-au bazat pe determinarea simbolului mediu (sau dimensiunea maximă) lungimea dimensiunea liniei calculate, numărul de rânduri, folosind tot felul de coeficienți empirice, și încă nu a putut garanta că textul se potrivesc în celulă.

Singura soluție care se apropie de sarcina pe care am găsit-o este: Selectarea automată a dimensiunii fontului în Imagine a TableTable. Dar este pentru plasarea textului în Imagine a TablesDocument, și nu în zona ca în acest articol. Este nevoie de pregătire preliminară, dar nimic nu este mai ușor pentru Desenarea documentului desktop în momentul în care nu știu (vezi mai jos pentru o încercare de simplificare).

Eu însumi am ocolit această problemă într-un fel sau altul. Și toate mulțumit: eu, și clienții. Aparent, datorită faptului că este rară:

1. În etichetele de preț. Numele produsului este de obicei centrat în înălțime, și cu un nume foarte lung de început și de sfârșit sunt la risc nu se încadrează în spațiul alocat (și etichetele de preț sunt de obicei tăiate avtovysotu). Există două modalități de ieșire din această situație:

a) Alegeți una sau altă etichetă de preț pentru șablon. Nu este implementat în exemple.

b) Ajustați dimensiunea textului la eticheta de preț. Implementat în exemple:

Se va potrivi textul în celulă (cu exemple de utilizare a dimensiunii automate a fontului, a ambalajului de linie)

2. Și când numele trebuie să fie scris pe mai multe rânduri:

În standard este implementat astfel:

Prefer să tipăresc așa (cu înfășurare automată a cuvintelor):

După două serate, am venit, sper, într-o soluție simplă:

1. Rețineți dimensiunea inițială a celulei în mm.

2. Atribuiți o proprietate celulei AutoType = True

3. Introduceți textul și reveniți din nou la înălțimea celulei.

4. Dacă înălțimea celulei sa schimbat la partea superioară, textul nu se potrivește.

Înălțimea celulei în mm va fi măsurată prin introducerea acesteia în celula figurii și măsurarea dimensiunilor acesteia.

Funcția de obținere a înălțimii celulei:

Funcție pentru a determina dacă textul se va potrivi într-o celulă:

Pentru a putea utiliza această metodă, trebuie respectate următoarele condiții:







1. Trebuie să denumiți zona într-un fel.

2. Zona de umplere = Text, nu Parametru sau Șablon. În principiu, puteți utiliza ambele, dar codul devine mai înțelept. În orice caz, nu am inventat nimic simplu. Și din moment ce viața complică acest lucru, nu sa deranjat prea mult din cauza asta.

3. Plasarea textului = transferare. Aici este necesar! Textul poate fi plasat programabil, dar efectul schimbării, așa cum o înțeleg, apare numai după afișarea unui document de tabel cu această celulă.

În fișiere veți găsi:

1. Exemplu cu selectarea dimensiunii fontului utilizând funcțiile din articol.

2. Exemplu optimizat pentru potrivirea vitezei cu modificarea codului font de dimensiuni mici (dar selectarea dimensiunea fontului -. Următoarele nu este o încercare optimă acest gen nu vychilit descrește de fiecare dată de 1).

3. Producția liniilor lungi în mai multe celule.

4. Selectați dimensiunea fontului în elementul "Imagine a documentului tabel".

Figura documentului din tabel (Titlu):

Voi spune imediat, pe texte mari, funcționează mult timp.

1. fie așteptați la ce oră și apoi uitați-vă la dimensiuni, cum ar fi: Conectați procesorul de așteptare ("Measure Dimensions", 0.1, Adevăr)

2. sau "forțați" această infecție să fie forțată.

Primul este muncitorul. Cu toate acestea, codul cu aceasta se dovedește a fi complicat. Și pentru fiecare iterație - un minim de 0,1 secunde. În cele din urmă este foarte lung. Dar lucrări (am verificat documentul tabelar pe câmp).

Și aici este al doilea. Cu ajutorul unui mic truc, totul funcționează excelent. Iar trucul este că TabularDocument are metoda Show (). Este bine că, imediat după execuție, mărimea inscripției devine reală, ajustată la dimensiunea textului. Dar e rău că deschide o fereastră pe care nu o poți închide programat sau nu știu cum.

M-am gândit, m-am gândit. Pentru a fi mai precis, experimentând, am experimentat. Și asta a ajuns la el:

Codul care mă aduce în forma umană este lenea. În cazul în care, atunci există un fișier în exemple.

Vreau să notez câteva puncte interesante:

1. Calcularea înălțimii inscripției cu lățimea fixă.

2. Încercați să optimizați algoritmul de căutare al fonturilor.

7. Miffka (mikhailv) 09.04.12 15:26 Acum în firul

Acesta a venit la îndemână în specificațiile de imprimare pe tabla "căptușită".

In timp ce implanturile au venit peste ceea ce 1C (rel. 8.2.13.219) la valori extreme de umplere în celula (atunci când textul este un pic nu se potrivește și este transferat într-o altă linie) nu funcționează corect înălțimea (în imagine). Când depanare, este clar că textul a suferit, și înălțimea imaginii este returnată este același ca și fără transferul.
S-a rezolvat problema prin verificarea suplimentară cu adăugarea unui singur caracter:

// Funcție pentru a determina dacă textul se va potrivi în celulă:
Funcția Text este plasată în celulă (zonă, pTab, ptext)

Înălțimea la = Înălțimea zonei Vmm (aria, pTabdok);

// Copiați zona într-un document nou de foaie de calcul.
// Și acolo vom juca deja cu proprietățile sale.
TimeTableDoc = Document de masă nou;
VremTabDok.Vyvest (pTabDok);
Fus orar = TimeTable. Zonă (zonă).

Timpul. Înălțimea toamnei = Adevărul;
Fus orar. Înălțimea șirului = 0;

Timp Temp. Text = pText;
HeightAfter = Înălțimea zonei Vmm (Time, TimeTab);

Dacă înălțimea A> = Înălțimea după aceea
// Încercați să prindeți "pe marginea": adăugați simbolul
Textul de timp. Text = pText + "Shch";
Înălțime AfterSymbol = Înălțimea zonei Vm (Timp, TimeTable);
Dacă AltDo> = Height AfterSymbol
Întoarcere (Adevăr);
altfel
Întoarcere (Lies);
Sfârșit Dacă;
altfel
Întoarcere (Lies);
Sfârșit Dacă;

De asemenea, pe baza acestei funcții am scris PoluchitMassivUmeschayuschihsyaStrok (pOblast, pTabDok, pTekst), în care textul este împărțit în mai multe se potrivesc în cadrul liniilor de celule specificate.







Trimiteți-le prietenilor: