Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод текста на Image->Canvas заданным шрифтом, проблемы со шрифтом (без - работает) 
:(
    Опции темы
SparF
Дата 6.9.2007, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 14.9.2006
Где: Санкт-Петербург/М осква

Репутация: нет
Всего: 18



С обычным выводом на канву проблем не возникает, а вот если попытаться сделать это каким-либо шрифтом - в тех координатах, куда осуществляется вывод видно лишь закрашенный прямоугольник. Вот код:
Код

        TFont *BtnFont;
...
        Image1->Picture->LoadFromFile("D:\\projects\\batoni\\but_up.bmp");
        Form1->DoubleBuffered = true;

        BtnFont = new TFont;
        BtnFont->Charset = RUSSIAN_CHARSET;
        BtnFont->Color = clWhite;
        BtnFont->Height = -16;
        BtnFont->Name = "Lucida Sans";
        BtnFont->Pitch = fpDefault;
        BtnFont->Size = 12;
        BtnFont->Style = TFontStyles()<< fsBold;

        //вывод на label данным шрифтом происходит без проблем
        Label1->Font = BtnFont;
        Label1->Caption = "Получилось";

        //а вот это- не хочет =(
        Image1->Canvas->Font = BtnFont;
        Image1->Canvas->TextOut(0,0,"werwer");


Скриншот прилагается))
(Image1 - кнопка с закругленными краями)

Добавлено через 46 секунд
Скриншот:

Добавлено через 10 минут и 10 секунд
В голову приходит поместить Label над Image - но что-то как-то это не красиво (( да и при движении Image (а мне придется его двигать) вызовет кучу запарок....

Присоединённый файл ( Кол-во скачиваний: 22 )
Присоединённый файл  untitled.JPG 10,55 Kb


--------------------
Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux!
PM MAIL ICQ   Вверх
SenkraD
Дата 6.9.2007, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



SparF, а на прямую зменять параметры шрифта канвы пробовал?
А в твоём способе ещё и запоминать нужно предыдущий и потом возвращать обратно!!!


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
SparF
Дата 6.9.2007, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 14.9.2006
Где: Санкт-Петербург/М осква

Репутация: нет
Всего: 18



Теперь вот так:
Код

BtnFont = new TFont;
        BtnFont->Charset = RUSSIAN_CHARSET;
        BtnFont->Color = clWhite;
        BtnFont->Height = -16;
        BtnFont->Name = "Lucida Sans";
        BtnFont->Pitch = fpDefault;
        BtnFont->Size = 12;
        BtnFont->Style = TFontStyles()<< fsBold;

        Image1->Canvas->Font->Charset = BtnFont->Charset;
        Image1->Canvas->Font->Color = BtnFont->Color;
        Image1->Canvas->Font->Height = BtnFont->Height;
        Image1->Canvas->Font->Name = BtnFont->Name;
        Image1->Canvas->Font->Pitch = BtnFont->Pitch;
        Image1->Canvas->Font->Size = BtnFont->Size;
        Image1->Canvas->Font->Style = BtnFont->Style;


        Label1->Font = BtnFont;
        Label1->Caption = "Получилось";
        //Image1->Canvas->Font = BtnFont;
        //SetBkMode(Image1->Canvas, TRANSPARENT);
        Image1->Canvas->TextOut(0,0,"werwer");

эффект тот же =(
Цитата(SenkraD @  6.9.2007,  07:31 Найти цитируемый пост)
А в твоём способе ещё и запоминать нужно предыдущий и потом возвращать обратно!!! 

зачем? мне просто нужно в вывести надпись на кнопку.


--------------------
Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux!
PM MAIL ICQ   Вверх
586
Дата 7.9.2007, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Image1->Canvas->Brush->Color=clNone;
PM   Вверх
abrekos
Дата 7.9.2007, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.5.2007

Репутация: 1
Всего: 1



Цитата(586 @ 7.9.2007,  08:28)
Image1->Canvas->Brush->Color=clNone;

Не, лучше так:
Image1->Canvas->Brush->Style = bsClear;
PM MAIL   Вверх
SenkraD
Дата 7.9.2007, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



SparF,  у меня этот код работает (добавь стили fsItalic и fsUnderline и увидишь)
Цитата(SparF @  6.9.2007,  22:07 Найти цитируемый пост)
зачем? мне просто нужно в вывести надпись на кнопку.

Да, ты прав - глянул исходный код он там Assign'тся - утечки не будет



--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
SparF
Дата 9.9.2007, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 14.9.2006
Где: Санкт-Петербург/М осква

Репутация: нет
Всего: 18



Спасибо)) как только домой доберусь - испробую))))


--------------------
Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux!
PM MAIL ICQ   Вверх
Rekah
Дата 9.9.2007, 22:11 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 23.7.2007

Репутация: нет
Всего: нет



А подскажите как сделать эффект перетаскивания мюшью объекта label? Я пробовал использовать MouseUp Doun, Movi объекта label и Table, но что-то не получается, есть у кого какие соображения?
PM MAIL   Вверх
Pori
Дата 10.9.2007, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 10.9.2007

Репутация: 1
Всего: 1



Ну вот кое-что (не судите строго -писал на скорую руку):
Код


bool down;
TPoint pt;



void __fastcall TForm1::Label1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
down=true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Label1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
down=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Label1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
if(down) {
 GetCursorPos(&pt);
 Label1->Top = pt.y-Form1->Top-30; //Получаем координату курсора по оси у на самой форме, а не экране (30-это высота бортика)
 Label1->Left = pt.x-Form1->Left; // Аналогично по х}
}



Работает вроде, но хватается за 0,0 лэйбела

Для того, чтобы было не так, сделай аналогично приведенному выше коду.

Это сообщение отредактировал(а) Pori - 11.9.2007, 06:19
PM MAIL   Вверх
GIK
Дата 11.9.2007, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: нет
Всего: 14



Помойму не получиться, Label1MouseMove - передвижение по самой Label мышью, а не объета по форме. Теперерь вопрос, как это реализовать?  Через MouseMove самой формы тоже не получиться, нужно как-то припоять объект label вместо mouse.

Это сообщение отредактировал(а) GIK - 11.9.2007, 17:28


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
SparF
Дата 11.9.2007, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 14.9.2006
Где: Санкт-Петербург/М осква

Репутация: нет
Всего: 18



Цитата(abrekos @  7.9.2007,  08:31 Найти цитируемый пост)

Не, лучше так:
Код

Image1->Canvas->Brush->Style = bsClear; 

Спасибо большое, это работает)
вот только никак не получается заставить ее выводить надпись нужным цветом (цветом шрифта)
извращения с
Код

Image1->Canvas->Brush->Color

не помогают (


--------------------
Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux!
PM MAIL ICQ   Вверх
Pori
Дата 11.9.2007, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 10.9.2007

Репутация: 1
Всего: 1



Цитата(GIK @  11.9.2007,  17:27 Найти цитируемый пост)
Помойму не получиться, Label1MouseMove - передвижение по самой Label мышью, а не объета по форме. Теперерь вопрос, как это реализовать?  Через MouseMove самой формы тоже не получиться, нужно как-то припоять объект label вместо mouse.


хм, все получится.
Вы посмотрите внимательней, нам же главное не движение мышью объекта (собственно это мы и собираемся реализовать), а движение мыши(просто движение мыши!), а то что мы отлавливаем это движение в нужный момент, это гарантирует переменная bool down

Или же вы имеете в виду, что координаты будут не верны???
Ну так для этого мы и не берем переменные X и Y из функции Label1MouseMove, а используем WinAPI функцию GetCursorPos, которая возвращает координаты мыши относительно экрана

P.S.:я не силен в объяснениях

Это сообщение отредактировал(а) Pori - 11.9.2007, 20:31
PM MAIL   Вверх
Pori
Дата 11.9.2007, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 10.9.2007

Репутация: 1
Всего: 1



Цитата(Pori @  10.9.2007,  21:00 Найти цитируемый пост)
Работает вроде, но хватается за 0,0 лэйбела


А вот усовершенствованный вариант, в котором положение мыши относительно лэйбела остается неизменным:
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

bool down;
TPoint pt;
int lb_X, lb_Y;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Label1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
down=true;
GetCursorPos(&pt);
lb_X=pt.x; lb_Y=pt.y;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Label1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
down=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Label1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
  if(down) {
 GetCursorPos(&pt);

 Label1->Top = Label1->Top+(pt.y-lb_Y);
 Label1->Left = Label1->Left+(pt.x-lb_X);
 lb_X=pt.x; lb_Y=pt.y;

 }
}
//---------------------------------------------------------------------------


Для тех, кто не верит что работает, приведен весь файл cpp. Остается только добавить на форму Label и проверить работоспособность самим ;)
PM MAIL   Вверх
abrekos
Дата 12.9.2007, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.5.2007

Репутация: 1
Всего: 1



Цитата(SparF @ 11.9.2007,  19:41)
Цитата(abrekos @  7.9.2007,  08:31 Найти цитируемый пост)

Не, лучше так:
Код

Image1->Canvas->Brush->Style = bsClear; 

Спасибо большое, это работает)
вот только никак не получается заставить ее выводить надпись нужным цветом (цветом шрифта)
извращения с
Код

Image1->Canvas->Brush->Color

не помогают (

Да не, Brush - это кисть, а цвет шрифта определяется так:
Image1->Canvas->Font->Color = ... ;
PM MAIL   Вверх
GIK
Дата 12.9.2007, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: нет
Всего: 14



Цитата

P.S.:я не силен в объяснениях

Да нет, нормально объяснил  smile , щас догнал что к чему  smile 


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1392 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.