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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 26.11.2010, 07:09   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Вызов одной процедуры из другой

Есть компонент ShellListView1, в котором отображается список файлов папки и есть StringGrid1, в котором обрабатыватся нажатие клавиши Enter. По ShellListView1 я перемещаюсь стрелками вверх и вниз так:
Код:
procedure TMainForm.ShellListView1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if Key = VK_DOWN then
 begin
  MainForm.Image2.Picture.LoadFromFile(MainForm.ShellListView1.SelectedFolder.PathName);
 end;

 if Key = VK_UP then
 begin
  MainForm.Image2.Picture.LoadFromFile(MainForm.ShellListView1.SelectedFolder.PathName);
 end;
end;

procedure TMainForm.ShellListView1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if Key = VK_DOWN then
 begin
  MainForm.Image2.Picture.LoadFromFile(MainForm.ShellListView1.SelectedFolder.PathName);
 end;

 if Key = VK_UP then
 begin
  MainForm.Image2.Picture.LoadFromFile(MainForm.ShellListView1.SelectedFolder.PathName);
 end;
end;
Вопрос в том, как когда на StringGrid1 нажимаем Enter вызвать вот эти процедуры:
Код:
procedure TMainForm.ShellListView1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure TMainForm.ShellListView1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума
Старый 26.11.2010, 07:21   #2
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

Ну как-то так:
Код:
procedure TForm2.StringGrid1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var
    K: Word;
begin
  K:= Vk_Up;
  if Key = VK_RETURN then
    ShellListView1KeyUp(sender, K, []);
end;
принимаю благодарности в письменном виде( весы слева)...
MaxNik2009 вне форума
Старый 26.11.2010, 07:31   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Нет, так не работает, ничего не происходит...по списку файлов в SHellListView1 переход не осуществляется
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума
Старый 26.11.2010, 09:12   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Нет, так не работает
Правильно так не получится. Тебе нужно найти метод, который переходит по этому компоненту на следующую-предыдущую папку, или найти сообщение, и послать этому компоненту, и только уж потом
Код:
  if Key = VK_RETURN then
    ShellListView1KeyUp(sender, K, []);
Вот что-то в таком роде
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 with ShellListView1 do begin
  if tag<Items.Count then begin
   Selected:=Items[tag];
   tag:=Tag+1;
  end;
 end;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
 with ShellListView1 do begin
  if tag>0 then begin
   Selected:=Items[tag];
   tag:=Tag-1;
  end;
 end;
end;
Здесь по кнопкам переход на следующее элементы
I'm learning to live...

Последний раз редактировалось Stilet; 26.11.2010 в 09:15.
Stilet вне форума
Старый 26.11.2010, 09:15   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Тебе нужно найти метод, который переходит по этому компоненту на следующую-предыдущую папку, или найти сообщение, и послать этому компоненту
Не понял..
Кстати, сразу спрошу тоже, это относится к этой теме. Быть может я откажусь от того, что щас делаю если получится сделать следующее. Перемещаюсь вниз и добавляю строку в таблицу так, а также вверх по списку:
Код:
procedure TMainForm.ShellListView1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if Key = VK_DOWN then
 begin
  MainForm.Image2.Picture.LoadFromFile(MainForm.ShellListView1.SelectedFolder.PathName);
  MainForm.StringGrid1.RowCount:=MainForm.StringGrid1.RowCount + 1;
 end;

 if Key = VK_UP then
 begin
  MainForm.Image2.Picture.LoadFromFile(MainForm.ShellListView1.SelectedFolder.PathName);
  MainForm.StringGrid1.Row:=MainForm.StringGrid1.RowCount - 1;
 end;
end;

procedure TMainForm.ShellListView1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if Key = VK_DOWN then
 begin
  MainForm.Image2.Picture.LoadFromFile(MainForm.ShellListView1.SelectedFolder.PathName);
 end;

 if Key = VK_UP then
 begin
  MainForm.Image2.Picture.LoadFromFile(MainForm.ShellListView1.SelectedFolder.PathName);
 end;
end;
Не получается следующее: 1. когда перемещаюсь вверх, то почему-то не удаляется добавленная в таблицу последняя строка; 2. Как поставить курсор на последнюю добавленную строку хотя бы? Если сделать второе, то первое впринципе необязательно, это я так, для удобства хотел. Помогите со вторым вопросом.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 26.11.2010 в 09:32.
artemavd вне форума
Старый 26.11.2010, 09:31   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Вот второй вариант:
Код:
procedure TMainForm.ShellListView1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
     MyProc (параметры);
end;
А в MyProc уже делаешь все действия которые тебе нужны в TMainForm.ShellListView1KeyDown.
Затем, когда тебе понадобится
Цитата:
StringGrid1 нажимаем Enter вызвать вот эти процедуры:
просто вызовешь MyProc в условии на проверку if Key=13 ...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума
Старый 26.11.2010, 09:37   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Гляньте мой предыдущий пост, я его немного дополнил)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума
Старый 26.11.2010, 09:43   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Как конкретно выделить ячейку не знаю, но можно попробоваь программно кликнуть мышью на нужную тебе строку .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума
Старый 26.11.2010, 10:16   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

А как удалять строки при перемещении вверх и программно кликнуть на нужную строку?
Вот, сделал так:
Код:
procedure TMainForm.ShellListView1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if Key = VK_DOWN then
 begin
  MainForm.Image2.Picture.LoadFromFile(MainForm.ShellListView1.SelectedFolder.PathName);
  MainForm.StringGrid1.RowCount:=MainForm.StringGrid1.RowCount + 1;
  MainForm.StringGrid1.SetFocus;
 end;

 if Key = VK_UP then
 begin
  MainForm.Image2.Picture.LoadFromFile(MainForm.ShellListView1.SelectedFolder.PathName);
  MainForm.StringGrid1.Row:=MainForm.StringGrid1.RowCount - 1;
 end;
end;

procedure TMainForm.ShellListView1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if Key = VK_DOWN then
 begin
  MainForm.Image2.Picture.LoadFromFile(MainForm.ShellListView1.SelectedFolder.PathName);
  MainForm.StringGrid1.SetFocus;
 end;

 if Key = VK_UP then
 begin
  MainForm.Image2.Picture.LoadFromFile(MainForm.ShellListView1.SelectedFolder.PathName);
 end;
end;
Строка добавляется при перемещении вниз, курсор вставляется на последнюю добавленную строка только после того как я нажму мышкой на какой-нибудь строке в ShellListView, а потом снова нажму на клавишу перемещения вниз....как бы это исправить, чтобы курсор сразу помещался куда надо?
Виталий, ну вот я попробовал твой последний вариант:
Код:
procedure TMainForm.Button2Click(Sender: TObject);
begin
 with MainForm.ShellListView1 do
 begin
  if Tag < Items.Count then
  begin
   Selected:=Items[Tag];
   MainForm.Image2.Picture.LoadFromFile(MainForm.ShellListView1.SelectedFolder.PathName);
   Tag:=Tag + 1;
  end;
 end;
end;
нажимаю на кнопку, вижу, что в списке файлов идет выделение имени файла после каждого нажатия вниз, а в Image не грузится картиинка.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 26.11.2010 в 11:16.
artemavd вне форума
Старый 26.11.2010, 16:24   #10
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Вы вот это имели введу?
Код:
var
  Form1: TForm1;
  n:word;
implementation

{$R *.dfm}

procedure TForm1.StringGrid1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
n:=40;
if key=13 then begin
form1.ShellListView1KeyDown(shelllistview1,n,shift);
end;
end;

procedure TForm1.ShellListView1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=vk_down then begin
showmessage('Привед медвед!');
//
end;
end;

end.
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов функции из другой книги Tolikv Microsoft Office Excel 1 06.07.2010 13:52
Ошибка вызова одной процедуры в другой! $T@LKER БД в Delphi 4 28.04.2010 19:50
Вызов другой программы Anatoly555 Помощь студентам 1 18.03.2010 08:08
TabControlChanging вызов из другой процедуры FaTaL Общие вопросы Delphi 3 25.12.2009 15:08
delphi вызов одной формы из другой hi-end1 Помощь студентам 4 17.10.2009 19:53