Виведення тексту на canvas в delphi - stack overflow російською

Повинен сказати, що це ще не все, що можна робити зі шрифтом в графічному режимі: десь (не пам'ятаю точно де, напевно у великій базі знай по Делфі) бачив, що можна змінювати жирність, висоту і щось ще у шрифту .

А щось подібне, я вважаю, можна зробити так:

  1. На обработчике OnMouseMove для Image окреслити рамку для тексту (створити який-небудь прапор і привласнити йому істина);
  2. За подією натискання клавіші писати в неї текст (якщо прапор = істина), якщо клавіша = Enter закінчити введення (привласнити прапору брехня і замалювати рамку, але щоб рамка стерлася коректно потрібно 2 компонента Image: на одному все малюємо і виділяємо (він повинен бути прозорим (Transparent = True, колір прозорості - за замовчуванням - найперша нижня точка компонента Image))). Спробую зробити, але нічого поки не обіцяю.

Начебто вийшло щось подібне (типу прозорого Мемо-поля (RichEdit замість Memo теж піде)). Відразу скажу, що є один мінус: не можна змінювати розміри мишкою (можна подумати як зробити, але мені ніколи).

  1. Створюємо проект кидаємо 2 компонента Image (перший на інший) так, щоб у них були однакові розміри і один лежав точно під іншим, ну і кнопку SpeedButton (AllowAllUp = True, GroupIndex = (Не нуль)).
  2. Додаємо в проект форму, на яку і кидаємо Memo або RichEdit.
  3. Розтягуємо ці компоненти на всю форму (Align = alClient).
  4. У форми встановлюємо властивість Transparent = true і TransparentColor вибираємо будь-який колір (але не той, якого може бути шрифт, хоча програмно теж можна змінити, якщо, звичайно, потрібно).
  5. У компонента RichEdit або Memo колір фону ставимо такої, як і TransparentColor форми.

З розробкою форм можна покінчити, - приступаємо до кодування (опишу коротко):

  1. Виділяємо прямокутну область оброблювачем OnMouseMove компонента Image.
  2. Потім на обработчике OnMouseUp показуємо нашу другу форму в ній.
  3. Пишемо текст, закриваємо натисканням Enter.

Далі, сподіваюся, в коді все буде зрозуміло.

КОД головною форми (у інший нічого руками писати не потрібно, тільки властивості налаштувати!):

Можна вчинити таким чином:

  1. Обробивши подія MouseClick на Image, при кліці запам'ятовуємо позицію, де кликнули (X1, Y1)
  2. Далі обробити подія MouseButtonDown (на кшталт), малюємо рамку від X1, Y1 до поточного положення миші, ну і запам'ятовуємо звичайно X2, Y2
  3. Обробити подія MouseButtonUp, тобто коли відпустили кнопку, то створюємо елемент RichEdit в X1, Y1, розміри встановлюємо до X2, Y2, властивість рамки ставимо - відсутня, І фокус на нього.
  4. Для створеного 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