Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Курсор в поле мемо, смена цвета и толщины 
V
    Опции темы
artsb
Дата 26.11.2008, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



OutlawZ, посмотрел Ваш пример. Я приблизительно такой хотел дать smile

Вот другой пример. Если я правильно понял, то это то, что Вам нужно. Единственно пока не придумал, как сделать чтобы каретка менялась при переходе в поле по TAB. Пока работает только при клике мыши.



Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  ChCaret.rar 35,37 Kb


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
taiven
Дата 26.11.2008, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Единственно пока не придумал, как сделать чтобы каретка менялась при переходе в поле по TAB. Пока работает только при клике мыши.

надо просто WM_SETFOCUS отловить. Ты мой пример пробовал?
PM   Вверх
OutlawZ
Дата 26.11.2008, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

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



Спасибо всем за участие в решение этой задачки smile Все работает smile


--------------------
user posted image
user posted image
PM MAIL   Вверх
artsb
Дата 26.11.2008, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(taiven @  26.11.2008,  13:47 Найти цитируемый пост)
надо просто WM_SETFOCUS отловить.

Нет, попробую.

Добавлено через 2 минуты и 7 секунд
OutlawZ, так на чём вы остановились?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
artsb
Дата 26.11.2008, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Вот. Доделал. smile
Может кому пригодится...

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  ChCaret.rar 31,69 Kb


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
THandle
Дата 26.11.2008, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Вообще примеров с изменением каретки предостаточно в DRKB.


Пусть и на Delphi - то же самое.
Советую посмотреть статьи:
  • Можно ли изменить вид текстового курсора (каретки) edit'а или другого элемента?
  • Изменить вид каретки TEdit
  • Как создать каретку свой собственной формы?

PM   Вверх
OutlawZ
Дата 26.11.2008, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

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



Я просто совместил два примера в месте smile 

Код

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TMemo *Memo1;
private:    // User declarations
public:        // User declarations
        __fastcall TForm1(TComponent* Owner);
    TWndMethod OldProc;
    void __fastcall NewProc(TMessage &Message);
    Graphics::TBitmap *bmp;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif



И собственно код:
Код

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#pragma resource "image.res"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
    OldProc = Memo1->WindowProc;
    Memo1->WindowProc = NewProc;
    bmp = new Graphics::TBitmap();
    bmp->LoadFromResourceName((int)HInstance,"CARECT");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NewProc(TMessage &Message)
{
    OldProc(Message);
    if(Message.Msg == WM_SETFOCUS)
    {
        CreateCaret(Memo1->Handle, bmp->Handle, 0,0);
        ShowCaret(Memo1->Handle);
        OldProc(Message);
    }

}


Все работает smile

user posted image


--------------------
user posted image
user posted image
PM MAIL   Вверх
artsb
Дата 26.11.2008, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



OutlawZ, а зачем мусор в ресурсы засовываете? smile
Таку простую каретку легче нарисовать. Например так, как в моём примере.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
OutlawZ
Дата 2.12.2008, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

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



Цитата(artsb @ 26.11.2008,  21:37)
Таку простую каретку легче нарисовать. Например так, как в моём примере.

Согласен smile, переписал код теперь он такой:

Код

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

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TMemo *Memo1;
private:    // User declarations
public:        // User declarations
        __fastcall TForm1(TComponent* Owner);
    TWndMethod OldProc;
    void __fastcall NewProc(TMessage &Message);
    Graphics::TBitmap *bmp;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


И собвственно сам код:
Код

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
    OldProc = Memo1->WindowProc;
    Memo1->WindowProc = NewProc;
    bmp = new Graphics::TBitmap();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NewProc(TMessage &Message)
{
    bmp->Height = 12;
    bmp->Width = 10;
    bmp->Canvas->Brush->Color = clLime;
    bmp->Canvas->Brush->Style = bsSolid;
    bmp->Canvas->FillRect(TRect(0,0,bmp->Width,bmp->Height));
    OldProc(Message);
    if(Message.Msg == WM_SETFOCUS)
    {
        CreateCaret(Memo1->Handle, bmp->Handle, 0,0);
        ShowCaret(Memo1->Handle);
        OldProc(Message);
    }

}


И вот все работает так как надо smile
user posted image


--------------------
user posted image
user posted image
PM MAIL   Вверх
OutlawZ
Дата 2.12.2008, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

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



А можно еще сделать так что бы она не мигала?


--------------------
user posted image
user posted image
PM MAIL   Вверх
THandle
Дата 2.12.2008, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



OutlawZ, поставь огромное время не мигания каретки...

Код

SetCaretBlinkTime(INFINITE);


Только это подействует вообще на всю систему. Видимо это надо делать при получении фокуса твоим контролом с измененной кареткой, а при потере фокуса возвращать BlinkTime обратно smile
PM   Вверх
OutlawZ
Дата 2.12.2008, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

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



Спасибо smile


--------------------
user posted image
user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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