Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
11th
Авг
Удалить строки и поместить остальные вверх в StringGrid
Posted by micher under Delphi
SPD
Нужно все ячейки, которые не подходят под условие 8 и 20 часов, удалить со StringGrid-a..
01.07.2011 8:00 157 37,76
01.07.2011 20:00 164 42,52
02.07.2011 8:00 157 37,76
02.07.2011 20:00 183 56,55
03.07.2011 9:00 170 46,6
03.07.2011 20:00 164 42,52
04.07.2011 8:00 173 48,54
04.07.2011 20:00 170 46,6
05.07.2011 10:00 167 44,56
Делаю так:
procedure GridDeleteRow(RowNumber: Integer; Grid: TstringGrid);
var
i: Integer;
begin
Grid.Row := RowNumber;
if (Grid.Row = Grid.RowCount - 1) then
{ On the last row}
Grid.RowCount := Grid.RowCount - 1
else
begin
{ Not the last row}
for i := RowNumber to Grid.RowCount - 1 do
Grid.Rows := Grid.Rows;
Grid.RowCount := Grid.RowCount - 1;
end;
end;
................................
for i:=1 to n do
begin
mis:=stringgrid1.Cells[0,i];
mis:=mis[12]+mis[13];
if (mis'20') or (mis'8') then
begin
GridDeleteRow(i, stringGrid1);
end;
Но работает не правильно, удаляет что и как хочет. Подскажите в чем ошибка?
Serge_Bliznykov
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, StdCtrls;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure DeleteARow(Grid: TStringGrid; ARow: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
type TMyGrid=class(TCustomGrid);
procedure TForm1.DeleteARow(Grid: TStringGrid; ARow: Integer);
begin
TMyGrid(Grid).DeleteRow(ARow);
end;
procedure TForm1.FormCreate(Sender: TObject);
var i, j : integer;
begin
for i:=StringGrid1.FixedRows to StringGrid1.RowCount-1 do
for j:=StringGrid1.FixedCols to StringGrid1.ColCount-1 do
StringGrid1.Cells[j,i] := IntToStr(i*100 + j+i);
end;
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
for i:=StringGrid1.RowCount-1 downto StringGrid1.FixedRows do
if odd(StrToInt(StringGrid1.Cells[1,i])) // ТУТ ВАШЕ УСЛОВИЕ для удаляемых строк
then begin
// удалить целиком i-ю строку
DeleteARow(StringGrid1, i);
end;
end;
Внимание! ВАЖНО! При удалении цикл крутим от последней строки к началу.
Иначе при удалении будет изменяться количество записей!
Случайные статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)