Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2017, 16:30   #1
ciy
 
Регистрация: 12.04.2017
Сообщений: 4
По умолчанию Фрагмент кода

Помогите разобраться в данном коде. Для чего он нужен и какие функции выполняет.
Код:
 procedure TForm1.AppInfoToGrid(grid:TStringGrid);
var descript:TStringList;
    WinCaption:array[0..255] of char;
    i:word;

begin
descript:=TStringList.Create;
with descript do
  begin
    Clear;
    EnumWindows(@AddWinInfo,LParam(descript));
  end;
for i:=0 to descript.Count-1 do
 begin
  if i+1>grid.RowCount-1 then grid.RowCount:=grid.RowCount+1;
  GetWindowText(strtoint(descript.strings[i]),WinCaption,SizeOf(WinCaption));
  grid.Cells[0,i+1]:=WinCaption;
  grid.Cells[1,i+1]:=descript.strings[i];
 end;
if grid.RowCount>i+1 then grid.RowCount:=i+1;
descript.Destroy;
end;
ciy вне форума Ответить с цитированием
Старый 24.04.2017, 16:41   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

получить список запущенных программ (с помощью EnumWindows() ) и занести эту информацию в grid

p.s. А код написан коряво - мало того, что увеличение размеров грида производится в цикле, так ещё и после цикла используется переменная цикла, которая после цикла for может иметь неопределённое значение!
вместо этого нужно просто один единственный раз задать размер грида:
Код:
grid.RowCount := descript.Count;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.04.2017, 17:26   #3
ciy
 
Регистрация: 12.04.2017
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
получить список запущенных программ (с помощью EnumWindows() ) и занести эту информацию в grid

p.s. А код написан коряво - мало того, что увеличение размеров грида производится в цикле, так ещё и после цикла используется переменная цикла, которая после цикла for может иметь неопределённое значение!
вместо этого нужно просто один единственный раз задать размер грида:
Код:
grid.RowCount := descript.Count;
а не могли бы вы данный код немного подправить, чтобы он нормально выглядел.
ciy вне форума Ответить с цитированием
Старый 24.04.2017, 17:53   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от ciy Посмотреть сообщение
а не могли бы вы данный код немного подправить, чтобы он нормально выглядел.
так я же уже предложил исправление.

ладно, повторю ещё раз, полностью процедуру AppInfoToGrid:

Код:
procedure TForm1.AppInfoToGrid(var grid:TStringGrid);
var 
    descript:TStringList;
    WinCaption:array[0..255] of char;
    i:word;

begin
    descript:=TStringList.Create;
    EnumWindows(@AddWinInfo,LParam(descript));

    grid.RowCount := descript.Count;
    for i:=0 to descript.Count-1 do
    begin
       GetWindowText(strtoint(descript.strings[i]),WinCaption,SizeOf(WinCaption));
       grid.Cells[0,i+1]:=WinCaption;
       grid.Cells[1,i+1]:=descript.strings[i];
    end;
    descript.Free;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подправить фрагмент кода Программистер Общие вопросы Delphi 0 19.01.2017 19:21
Объясните фрагмент кода ka11n Общие вопросы C/C++ 4 04.09.2014 16:27
Фрагмент кода по алгоритму Студент8565 Помощь студентам 4 12.05.2013 17:42
Удалить фрагмент из кода DeadWarlock Общие вопросы Delphi 2 03.02.2012 00:26
Фрагмент кода С++ Роман Кор Общие вопросы C/C++ 6 22.02.2009 19:25