Справочник советов и примеров по C++Builder

         

Edit


Как получить(узнать) выделенный текст

Edit->SelText



ListBox


Над каким элементом находится курсор мыши

// поместите на форму Form1 компонент ListBox1 и напишите

// следующий обработчик события OnMouseMove:
void __fastcall TForm1::ListBox1MouseMove(TObject *Sender,

TShiftState Shift, int X, int Y)

{

if(ListBox1->ItemAtPos(TPoint(X, Y), true) != -1)

Form1->Caption = ListBox1->Items->Strings[ListBox1->ItemAtPos(TPoint(X, Y), true)];

}

Навигация в ListBox при множественном выборе

// разместите на форме ListBox1, установите у него

// свойство MultiSelect в true, добавьте в ListBox1

// несколько элементов, разместите также на форме

// кнопку Button1, в обработчике события OnClick

// которой напишите следующий код, который будет

// выводить сообщение для каждого элемента ListBox,

// выбранного пользователем:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

for(int i = 0; i < ListBox1->Items->Count; i++)

if(ListBox1->Selected[i])

ShowMessage(ListBox1->Items->Strings[i]);

}

Как сделать так, чтобы при наведении на элемент, длина которого больше длины самого ListBox, появлялся Hint

// Где нибудь на показывании формы :
Application->HintPause = 0;

Application->HintShortPause = 0;

Application->HintHidePause = 10000000000;

Application->OnShowHint = TIn4Form->DoShowHint;

void __fastcall TIn4Form::DoShowHint(System::AnsiString &HintStr, bool &CanShow, THintInfo &HintInfo) { CanShow = true; if (HintInfo.HintControl == ListBox1 ) { if( Mouse->Capture ) { CanShow = false; return; } HintInfo.ReshowTimeout = 100; /*HintInfo.HintColor = clAqua;// Changes only for this hint*/

TPoint pnt; SIZE strsize; int numstr = ListBox1->ItemAtPos(HintInfo.CursorPos,true); if(numstrfalse; Application->HideHint (); return; } HintStr = ListBox1->Items->Strings[numstr]; strsize = ListBox1->Canvas->TextExtent(HintStr); if(strsize.cxClientWidth) { CanShow = false; Application->HideHint (); return; } pnt.x = -1; pnt.y = int(HintInfo.CursorPos.y/ListBox3->ItemHeight)*ListBox1->ItemHeight - 3; pnt = ListBox3->ClientToScreen(pnt); HintInfo.HintPos.x = pnt.x; HintInfo.HintPos.y = pnt.y; HintInfo.HintMaxWidth = Screen->Width-pnt.x; /*HintInfo.HideTimeout = 100;*/

} }

// Не забудьте поставить ShowHint у интересующего ListBox-а

Как узнать количество строк(записей)

int i = ListBox1->Items->Count;

Прокрутка ListBox на одну строку вниз

// Чтобы прокрутить содержимое списка (TListBox) на одну

// строку вниз, напишите следующий код:

SendMessage(ListBox1->Handle, WM_VSCROLL, SB_LINEDOWN, 0);

Удаление выбранных элементов в TListBox

// Напишите следующий код:

for(int i = ListBox1->Items->Count-1; i >= 0; i--)

if(ListBox1->Selected[i])

ListBox1->Items->Delete(i);



ListView


Получение индекса выделенного элемента

// для получения индекса выделенного элемента в TListView

// воспользукйтесь следующим кодом:
int Index = ListView1->Selected->Index;

Всплывающие подсказки при наведении мыши на элемент списка

// поместите на форму компонент ListView1, установите

// у него свойство ShowHint в true и напишите обработчик

// события OnMouseMove следующим образом:
void __fastcall TForm1::ListView1MouseMove(TObject *Sender,

TShiftState Shift, int X, int Y)

{

TListItem *pListItem = ListView1->GetItemAt(X, Y);

if(pListItem) ListView1->Hint = pListItem->Caption;

}

Как ускорить вывод в ListView

// Напишите следующий код:
void __fastcall TForm1::ListViewData(TObject *Sender, TListItem *Item)

{

Item->Caption = AnsiString(Item->Index);

Item->SubItems->Add("комментарий");

}

// Это пропиши в дизайне:

ListView->OnData = ListViewData;

ListView->OwnerData = true;

// "Заполнение":

ListView->Items->Count = 20000000;

// Сброс:

ListView->Items->Count = 0;



RichEdit


Как добавить стpокy, чтобы пpи этом кypсоp остался в конце той же строки

RichEdit1->Lines->Add("тестовая строка");

RichEdit1->SelStart = RichEdit1->SelStart - 1;

Как получить(узнать) выделенный текст

RichEdit->SelText

Что сделать чтобы RichEdit открывал/сохранял RTF файлы

Свойство PlainText = true



StringGrid


Закрашивание отдельной ячейки

// для закрашивания отдельной ячейки в StringGrid напишите

// следующий обработчик события OnDrawCell StringGrid

// (Form1 - форма, на которой размещен StringGrid1,

// StringGrid1 - экземпляр TStringGrid, ячейка которого

// закрашивается):
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,

int ARow, TRect &Rect, TGridDrawState State)

{

if (ACol == 2 && ARow == 2) // определяем конкретную ячейку

{

StringGrid1->Canvas->Brush->Color = clRed;

StringGrid1->Canvas->FillRect(Rect);

}

}

Очистка ячеек в StringGrid (вариант 1)

// Для очистки содержимого ячеек в StringGrid (TStringGrid)

// напишите следующий обработчик (StringGrid1 - сетка,

// в которой очищаем ячейки, Button1 - кнопка на форме):
void __fastcall TForm1::Button1Click(TObject *Sender)

{

for(int i = 0; i < StringGrid1->ColCount; i++)

for(int j = 0; j < StringGrid1->RowCount; j++)

StringGrid1->Cells[i][j] = "";

}

Очистка ячеек в StringGrid (вариант 2)

// Для очистки содержимого ячеек в StringGrid (TStringGrid)

// напишите следующий обработчик (StringGrid1 - сетка,

// в которой очищаем ячейки, Button1 - кнопка на форме):
void __fastcall TForm1::Button1Click(TObject *Sender)

{

for(int i = 0; i < StringGrid1->RowCount; i++)

StringGrid1->Rows[i]->Clear();

}