Виведення тексту на canvas в delphi - stack overflow російською
Повинен сказати, що це ще не все, що можна робити зі шрифтом в графічному режимі: десь (не пам'ятаю точно де, напевно у великій базі знай по Делфі) бачив, що можна змінювати жирність, висоту і щось ще у шрифту .
А щось подібне, я вважаю, можна зробити так:
- На обработчике OnMouseMove для Image окреслити рамку для тексту (створити який-небудь прапор і привласнити йому істина);
- За подією натискання клавіші писати в неї текст (якщо прапор = істина), якщо клавіша = Enter закінчити введення (привласнити прапору брехня і замалювати рамку, але щоб рамка стерлася коректно потрібно 2 компонента Image: на одному все малюємо і виділяємо (він повинен бути прозорим (Transparent = True, колір прозорості - за замовчуванням - найперша нижня точка компонента Image))). Спробую зробити, але нічого поки не обіцяю.
Начебто вийшло щось подібне (типу прозорого Мемо-поля (RichEdit замість Memo теж піде)). Відразу скажу, що є один мінус: не можна змінювати розміри мишкою (можна подумати як зробити, але мені ніколи).
- Створюємо проект кидаємо 2 компонента Image (перший на інший) так, щоб у них були однакові розміри і один лежав точно під іншим, ну і кнопку SpeedButton (AllowAllUp = True, GroupIndex = (Не нуль)).
- Додаємо в проект форму, на яку і кидаємо Memo або RichEdit.
- Розтягуємо ці компоненти на всю форму (Align = alClient).
- У форми встановлюємо властивість Transparent = true і TransparentColor вибираємо будь-який колір (але не той, якого може бути шрифт, хоча програмно теж можна змінити, якщо, звичайно, потрібно).
- У компонента RichEdit або Memo колір фону ставимо такої, як і TransparentColor форми.
З розробкою форм можна покінчити, - приступаємо до кодування (опишу коротко):
- Виділяємо прямокутну область оброблювачем OnMouseMove компонента Image.
- Потім на обработчике OnMouseUp показуємо нашу другу форму в ній.
- Пишемо текст, закриваємо натисканням Enter.
Далі, сподіваюся, в коді все буде зрозуміло.
КОД головною форми (у інший нічого руками писати не потрібно, тільки властивості налаштувати!):
Можна вчинити таким чином:
- Обробивши подія MouseClick на Image, при кліці запам'ятовуємо позицію, де кликнули (X1, Y1)
- Далі обробити подія MouseButtonDown (на кшталт), малюємо рамку від X1, Y1 до поточного положення миші, ну і запам'ятовуємо звичайно X2, Y2
- Обробити подія MouseButtonUp, тобто коли відпустили кнопку, то створюємо елемент RichEdit в X1, Y1, розміри встановлюємо до X2, Y2, властивість рамки ставимо - відсутня, І фокус на нього.
- Для створеного RichEdit, обробляємо подія виходу з нього, тобто коли перемикається на кинувся, то значення з RichEdit записуємо в змінну string, після чого виводимо цю змінну функцією Canvas TextOut в X1, Y1, ну або в центрі прямокутника від X1, Y1 до X2, Y2
Делфі зараз не варто, тому не можу привести приклад) Але логіка начебто така) Творіть)
відповідь даний 18 Вересня '11 о 7:56
Виведення тексту на канву
відповідь даний 18 Вересня '11 в 7:54
Ось, наприклад, текст з Edit'a буде на зображенні Image1 чорного кольору і прозорим, тобто фону не буде.
відповідь даний 18 Вересня '11 о 7:56