14-16 StringGrid.
Компонент StringGrid находится на странице Additionalпалитры компонентов. Там находятся «дополнительные» компоненты, но StringGrid Delphi, на мой взгляд, достоин большего уважения, лично я разместил бы его на странице Standart! StringGrid — компонент для отображения различных данных в табличной форме. Как следует из названия, ячейки компонента StringGrid Delphi могут содержать данные, имеющие тип String, а также отображать графику.
Таблица StringGrid состоит из выделенных серым FixedCols и FixedRows — зафиксированных ячеек-заголовков, и обычных, белых ячеек. Содержимое Fixed ячеек недоступно редактированию, и меняется только программно. За возможность редактирования обычных ячеек отвечает одно из значений свойства Options. Итак, компонент StringGrid имеет возможность адресации каждой отдельной ячейки по номеру столбца и строки. Содержимое ячейки (i, j), где где i — номер столбца, j — номер строки, имеет вид StringGrid1.Cells[i, j] и доступно как для чтения, так и для записи. Здесь, как и всегда, номера столбцов ( i ) и строк ( j ) отсчитываются от 0. Выделенная ячейка таблицы имеет
StringGrid1.Col
StringGrid1.Row
поэтому содержимое выделенной ячейки будет адресоваться так: S:=StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row]; Не правда ли, написание такой строки — утомительный процесс. Поэтому пользуйтесь оператором присоединения with: with StringGrid1 do S:=Cells[Col, Row]; А лучше сразу задать в свойстве Name имя покороче, например SG. За многие свойства компонента Delphi StringGrid отвечает свойство Options. В Инспекторе Объектов Options — это раскрывающийся список, представляющий собой элементы данногомножества. Если значение элемента равно True, то он присутствует в множестве, если False — то нет.

goFixedVertLine
Наличие вертикальных разделительных линий между «фиксированными» ячейками
goFixedHorzLine
Наличие горизонтальных разделительных линий между «фиксированными» ячейками
Наличие вертикальных разделительных линий между «обычными» ячейками
Наличие горизонтальных разделительных линий между «обычными» ячейками
goRangeSelect
Возможность выделить диапазон ячеек
goDrawFocusSelected
Закрашивание ячейки с фокусом ввода
goRowSizing
Возможность менять высоту строк мышкой
goColSizing
Возможность менять ширину столбцов мышкой
goRowMoving
Возможность менять номер строки, то есть перемещать её, мышкой
goColMoving
Возможность менять номер столбца, то есть перемещать его, мышкой
Возможность редактировать содержимое ячейки с клавиатуры
При значении True фокус смещается на следующую ячейку в таблице,False — на следующий компонент
goRowSelect
Выделяется вся строка с «фокусированной» ячейкой
goAlwaysShowEditor
При значении True содержимое ячейки при получении фокуса сразу доступно редактированию, False — сначала необходимо щёлкнуть по ней мышкой, либо нажать Enter или F2 (прим.: не действует приgoRowSelect=True)
goThumbTracking
При значении True перемещение «бегунка» прокрутки мышкой вызывает немедленное перемещение ячеек,False — ячейки перемещаются только при отпускании «бегунка»
Как следует из таблицы, за возможность редактировать содержимое ячеек с клавиатуры отвечает элемент goEditing свойства-множества Options. В Инспекторе Объектов установите его значение вTrue. Чтобы управлять этой возможностью программно, нужно включить или исключить из множества данный элемент: StringGrid1.Options:=StringGrid1.Options+[goEditing]; //Включаем редактирование, другие элементы не трогаем StringGrid1.Options:=StringGrid1.Options-[goEditing]; //Выключаем редактирование, другие элементы не трогаем StringGrid1.Options:=[goEditing, goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRowSelect]; //Задаём список необходимых элементов Если элементы заданы списком, это аналогично присвоению в Инспекторе Объектов этим элементам значения True, остальным — False. Ячеек в таблице, как правило, много, и в рамках компонента видна только часть из них. В программе доступна информация как об общем количестве строк и столбцов, так и номерах и количестве строк и столбцов, видимых в рамках таблицы. Количество строк в Delphi StringGrid равно StringGrid1.RowCount. Количество столбцов в Delphi StringGrid равно StringGrid1.ColCount. Если ячейки не помещаются в таблице, появляются полосы прокрутки. При прокручивании
StringGrid1.LeftCol
Номер столбца, видимого самым левым
StringGrid1.TopRow
Номер строки, видимой самой верхней
StringGrid1.VisibleColCount
Количество столбцов, видимых в рамках таблицы
StringGrid1.VisibleRowCount
Количество строк, видимых в рамках таблицы
У таблицы StringGrid также есть свойство и для управления размером ячеек.Для всех ячеек
DefaultRowHeight — высота строк по умолчанию
DefaultColWidth — ширина столбцов по умолчанию
Эти значения ширины и высоты принимают все новые ячейки. При необходимости индивидуально установить ширину и высоту столбцов и строк соответственно, пользуемся свойствами
RowHeights[i] — массив, содержащий высоты строк с номером i
ColWidths[i] — массив, содержащий ширины столбцов с номером i
Все эти свойства настраиваем в обработчике события OnCreate Формы, так же как и надписи заголовков, располагающиеся в строках и столбцах «фиксированной» зоны таблицы. В результате таблица появляется уже в «настроенном» виде! Отдельно требуется осветить вопрос очистки содержимого таблицы StringGrid. Так как таблицаStringGrid, в отличие от, например, компонента Memo, не имеет метода для очистки содержимого сразу всех ячеек, то для удаления внесённых в таблицу ранее данных приходится очищать каждую ячейку отдельно. Делается это двумя вложенными циклами for, пробегающими по столбцам и строкам: var i, j: Integer; begin with StringGRid1 do for i:=1 to RowCount-1 do //Заголовки строк не трогаем for j:=1 to ColCount-1 do //Заголовки столбцов не трогаем Cells[j, i]:=»; end; Хотя, оказывается, есть метод для очищения содержимого целого столбца или строки: StringGrid1.Cols[i].Clear; //Очищается столбец с номером i StringGrid1.Rows[i].Clear; //Очищается строка с номером i Очевидно, очищение этими методами гораздо быстрее. Однако будут очищены и ячейки фиксированной зоны, содержащие, например, названия строк и столбцов, которые удалять не нужно. Их после очистки нужно просто «написать» заново, на глаз эта манипуляция совершенно незаметна. Для очистки всей таблицы достаточно последовательно очистить только строки или только столбцы: var i, j: Integer; begin with StringGRid1 do for i:=1 to RowCount-1 do //Заголовки столбцов не трогаем — цикл от 1 begin Rows[i].Clear; Cells[0, i]:=»Заголовок строки i»; end; end; Казалось бы, можно поступить и по-другому, просто обнулить количество строк или столбцов! Однако так делать неправильно, так как при их последующем добавлении может оказаться, что каждая ячейка содержит прежние данные. А в Delphi4 даже при уменьшении количества строк или столбцов содержавшиеся в них данные вообще не пропадали, а так и повисали в воздухе! Так что так можно поступать только если в добавляемых ячейках сразу будет новое непустое содержимое.
Delphi как вычислить toprow stringgrid
Профиль
Группа: Участник
Сообщений: 46
Регистрация: 31.7.2009
Репутация: нет
Всего: нет
Профиль
Группа: Участник
Сообщений: 46
Регистрация: 31.7.2009
Репутация: нет
Всего: нет
| Код |
| SoilMoisture->TopRow — 1 + Int( (SoilMoisture->Height — SoilMoisture->RowHeights[0])/25); |
Добавлено через 12 минут и 15 секунд
Можно сделать функцию:
| Код |
| int tsg(TStringGrid *sgSender) < return sgSender->TopRow — 1 + Int( (sgSender->Height — sgSender->RowHeights[0])/25 ); > |
Люди умные, подскажите, как эту функцию можно сделать свойством компонента?
Профиль
Группа: Участник
Сообщений: 46
Регистрация: 31.7.2009
Репутация: нет
Всего: нет
| Цитата(Volfs @ 24.1.2012, 20:37 ) |
| return sgSender->TopRow — 1 + |
здесь подразумевается что FixedRows = 1
Профиль
Группа: Комодератор
Сообщений: 2072
Регистрация: 15.11.2004
Репутация: 13
Всего: 116
Запрещается!
1. Публиковать ссылки на вскрытые компоненты
2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
- Литературу по С++ Builder обсуждаем здесь
- Действия модераторов можно обсудить здесь
- С просьбами о написании курсовой, реферата и т.п. обращаться сюда
- Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) — крупнейший в рунете сборник материалов по Дельфи
- FAQ раздела лежит здесь!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
[ Время генерации скрипта: 0.1110 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Delphi как вычислить toprow stringgrid
Компонент StringGrid (см. пример на рис. 3.11) представляет собой таблицу, содержащую строки. Данные таблицы могут быть только для чтения или редактируемыми. Таблица может иметь полосы прокрутки, причем заданное число первых строк и столбцов может быть фиксированным и не прокручиваться. Таким образом, можно задать заголовки столбцов и строк, постоянно присутствующие в окне компонента. Каждой ячейке таблицы может быть поставлен в соответствие некоторый объект.
Компонент StringGrid предназначен в первую очередь для отображения таблиц текстовой информации. Однако в разделе 4.4 поясняется, как этот компонент может отображать и графическую информацию.
Все эти свойства доступны во время выполнения. Задавать тексты можно программно или по отдельным ячейкам, или сразу по столбцам и строкам с помощью методов класса TStrings, описанных ранее в разделе 3.3.4.
Свойства ColCount и RowCount определяют соответственно число столбцов и строк, свойства FixedCols и FixedRows — число фиксированных, не прокручиваемых столбцов и строк. Цвет фона фиксированных ячеек определяется свойством FixedColor. Свойства LeftCol и TopRow определяют соответственно индексы первого видимого на экране в данный момент прокручиваемого столбца и первой видимой прокручиваемой строки.
Свойство ScrollBars определяет наличие в таблице полос прокрутки. Причем полосы прокрутки появляются и исчезают автоматически в зависимости от того, помещается таблица в соответствующий размер, или нет.
Свойство Options является множеством, определяющим многие свойства таблицы: наличие разделительных вертикальных и горизонтальных линий в фиксированных (goFixedVertLine и goFixedHorzLine) и не фиксированных (goVertLine и goHorzLine) ячейках, возможность для пользователя изменять с помощью мыши размеры столбцов и строк (goColSizing и goRowSizing), перемещать столбцы и строки (goColMoving и goRowMoving) и многое другое. Важным элементом в свойстве Options является goEditing — возможность редактировать содержимое таблицы.
В основном компонент StringGrid используется для выбора пользователем каких-то значений, отображенных в ячейках. Свойства Col и Row показывают индексы столбца и колонки выделенной ячейки. Возможно также выделение пользователем множества ячеек, строк и столбцов.
Среди множества событий компонента StringGrid следует отметить событие OnSelectСell, возникающее в момент выбора пользователем ячейки. В обработчик этого события передаются целые параметры ACol и ARow — столбец и строка выделенной ячейки, и булев параметр CanSelect — допустимость выбора. Параметр CanSelect можно использовать для запрета выделения ячейки, задав его значение false. А параметры ACol и ARow могут использоваться для какой-то реакции программы на выделение пользователя. Например, оператор выдаст в метку Label1 номер выбранной ячейки. А оператор выведет в ту же метку текст выделенной ячейки. Конечно, в реальном приложения задача заключается не в том, чтобы вывести подобные тексты при выборе пользователем той или иной ячейки, а в том, чтобы сделать нечто более полезное.
—>Delphi заготовки —>
—>Хотите помочь сайту (работой) пишите в аську или контакт
50 руб.
yandex 410011013695809
qiwi 9177425326
R132677785853 —>
Компонент StringGrid Delphi (основные свойства)
Итак, компонент StringGrid имеет возможность адресации каждой отдельной ячейки по номеру столбца и строки. Содержимое ячейки (i, j), где где i — номер столбца, j — номер строки, имеет вид
StringGrid1.Cells[i, j]
и доступно как для чтения, так и для записи. Здесь, как и всегда, номера столбцов ( i ) и строк ( j ) отсчитываются от 0.
Выделенная ячейка таблицы имеет
| номер столбца: | StringGrid1.Col |
| номер строки: | StringGrid1.Row |
поэтому содержимое выделенной ячейки будет адресоваться так:
S:=StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row];
Не правда ли, написание такой строки — утомительный процесс. Поэтому пользуйтесь оператором присоединения with:
with StringGrid1 do
S:=Cells[Col, Row];
А лучше сразу задать в свойстве Name имя покороче, например SG.
За многие свойства компонента Delphi StringGrid отвечает свойство Options. В Инспекторе Объектов Options — это раскрывающийся список, представляющий собой элементы данного множества. Если значение элемента равно True, то он присутствует в множестве, если False — то нет.
| Свойство | Значение |
| goFixedVertLine | Наличие вертикальных разделительных линий между «фиксированными» ячейками |
| goFixedHorzLine | Наличие горизонтальных разделительных линий между «фиксированными» ячейками |
| goVertLine | Наличие вертикальных разделительных линий между «обычными» ячейками |
| goHorzLine | Наличие горизонтальных разделительных линий между «обычными» ячейками |
| goRangeSelect | Возможность выделить диапазон ячеек |
| goDrawFocusSelected | Закрашивание ячейки с фокусом ввода |
| goRowSizing | Возможность менять высоту строк мышкой |
| goColSizing | Возможность менять ширину столбцов мышкой |
| goRowMoving | Возможность менять номер строки, то есть перемещать её, мышкой |
| goColMoving | Возможность менять номер столбца, то есть перемещать его, мышкой |
| goEditing | Возможность редактировать содержимое ячейки с клавиатуры |
| goTabs | При значении True фокус смещается на следующую ячейку в таблице, False — на следующий компонент |
| goRowSelect | Выделяется вся строка с «фокусированной» ячейкой |
| goAlwaysShowEditor | При значении True содержимое ячейки при получении фокуса сразу доступно редактированию, False — сначала необходимо щёлкнуть по ней мышкой, либо нажать Enter или F2 (прим.: не действует при goRowSelect=True) |
| goThumbTracking | При значении True перемещение «бегунка» прокрутки мышкой вызывает немедленное перемещение ячеек, False — ячейки перемещаются только при отпускании «бегунка» |
Как следует из таблицы, за возможность редактировать содержимое ячеек с клавиатуры отвечает элемент goEditing свойства-множества Options. В Инспекторе Объектов установите его значение в True. Чтобы управлять этой возможностью программно, нужно включить или исключить из множества данный элемент:
StringGrid1.Options:=StringGrid1.Options+[goEditing]; //Включаем редактирование, другие элементы не трогаем
StringGrid1.Options:=StringGrid1.Options-[goEditing]; //Выключаем редактирование, другие элементы не трогаем
StringGrid1.Options:=[goEditing, goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRowSelect]; //Задаём список необходимых элементов
Если элементы заданы списком, это аналогично присвоению в Инспекторе Объектов этим элементам значения True, остальным — False.
Ячеек в таблице, как правило, много, и в рамках компонента видна только часть из них. В программе доступна информация как об общем количестве строк и столбцов, так и номерах и количестве строк и столбцов, видимых в рамках таблицы.
Количество строк в Delphi StringGrid равно StringGrid1.RowCount.
Количество столбцов в Delphi StringGrid равно StringGrid1.ColCount.
Если ячейки не помещаются в таблице, появляются полосы прокрутки. При прокручивании
| StringGrid1.LeftCol | Номер столбца, видимого самым левым |
| StringGrid1.TopRow | Номер строки, видимой самой верхней |
| StringGrid1.VisibleColCount | Количество столбцов, видимых в рамках таблицы |
| StringGrid1.VisibleRowCount | Количество строк, видимых в рамках таблицы |
У таблицы StringGrid также есть свойство и для управления размером ячеек.Для всех ячеек
| DefaultRowHeight — высота строк по умолчанию |
| DefaultColWidth — ширина столбцов по умолчанию |
Эти значения ширины и высоты принимают все новые ячейки. При необходимости индивидуально установить ширину и высоту столбцов и строк соответственно, пользуемся свойствами
| RowHeights — массив, содержащий высоты строк. То есть, например, RowHeights[5] — высота строки с индексом 5 |
| ColWidths — массив, содержащий ширины столбцов. То есть, например, ColWidths[5] — ширина строки с номером 5 |
Все эти свойства настраиваем в обработчике события OnCreate Формы, так же как и надписи заголовков, располагающиеся в строках и столбцах «фиксированной» зоны таблицы. В результате таблица появляется уже в «настроенном» виде!
Поскольку ячейки компонента StringGrid можно редактировать, точно так же как и строку ввода Edit, то возникает вопрос, можно ли программно установить курсор в заданную позицию в содержимом ячейки? Оказывается, есть такая возможность. Для этого требуются дополнительный тип данных на основе таблицы и вспомогательная процедура:
type TGridCracker = class(TStringGrid);
procedure SetCaretPosition(Grid: TStringGrid; col, row, x_pos: Integer);
begin
Grid.Col := Col;
Grid.Row := Row;
with TGridCracker(Grid) do
InplaceEditor.SelStart := x_pos;
end;
Теперь можно установить желаемую позицию курсора в ячейке, например, по нажатию кнопки:
procedure TForm1.Button1Click(Sender: TObject);
begin
StringGrid1.SetFocus;
with StringGrid1 do
SetCaretPosition(StringGrid1, Col, Row, 2);
end;
Правда, ещё один момент! Чтобы код сработал, нужно установить в Инспекторе Объектов значение параметра goAlwaysShoweEditor свойства Options в True. Можно это сделать также и программно, в той же процедуре нажатия кнопки:
StringGrid.Options:=StringGrid.Options+[goAlwaysShoweEditor];
Отдельно требуется осветить вопрос очистки содержимого таблицы StringGrid. Так как таблица StringGrid, в отличие от, например, компонента Memo, не имеет метода для очистки содержимого сразу всех ячеек, то для удаления внесённых в таблицу ранее данных приходится очищать каждую ячейку отдельно. Делается это двумя вложенными циклами for, пробегающими по столбцам и строкам:
var i, j: Integer;
begin
with StringGRid1 do
for i:=1 to RowCount-1 do //Заголовки строк не трогаем
for j:=1 to ColCount-1 do //Заголовки столбцов не трогаем
Cells[j, i]:=»;
end;
Хотя, оказывается, есть метод для очищения содержимого целого столбца или строки:
StringGrid1.Cols[i].Clear; //Очищается столбец с номером i
StringGrid1.Rows[i].Clear; //Очищается строка с номером i
Очевидно, очищение этими методами гораздо быстрее. Однако будут очищены и ячейки фиксированной зоны, содержащие, например, названия строк и столбцов, которые удалять не нужно. Их после очистки нужно просто «написать» заново, на глаз эта манипуляция совершенно незаметна. Для очистки всей таблицы достаточно последовательно очистить только строки или только столбцы:
var i, j: Integer;
begin
with StringGRid1 do
for i:=1 to RowCount-1 do //Заголовки столбцов не трогаем — цикл от 1
begin
Rows[i].Clear;
Cells[0, i]:=»Заголовок строки i»;
end;
end;
Казалось бы, можно поступить и по-другому, просто обнулить количество строк или столбцов! Однако так делать неправильно, так как при их последующем добавлении может оказаться, что каждая ячейка содержит прежние данные.
взято с http://www.delphi-manual.ru/stringgrid.php
примеры которые могут быть полезны
В программе имеется несколько TtabSheet и на каждом по StringGrid, как сделать чтобы какое-либо действие над StringGrid (импорт или экспорт данных, добавление записей) производилось именно в тот StringGrid, который на данный момент в активном Tabsheet ?
var x:integer;
begin
for x:=0 to form1.ComponentCount-1 do
if form1.Components[x].ClassType=TStringGrid then
if TStringGrid(form1.Components[x]).Parent=
PageControl1.ActivePage then Showmessage(TStringGrid(form1.Components[x]).Name);