Консультация № 139347
06.06.2008, 17:54
0.00 руб.
0 4 2
Здравствуйте Уважаемые эксперты!У меня на форме StringGrid,мне нужно сделать так,что бы при клике по определённой ячейке,вылетал диалог открытия файла и как только нужный файл будет открыт в ячейку должен записаться полный путь до файла.Помогите мне пожалуйста в решении этой задумки.

Обсуждение

Неизвестный
06.06.2008, 20:56
общий
это ответ
Здравствуйте, Зотов.Г.А!

Код обработчика события OnMouseDown, вместе с подробными комментариями, в приложении.

Приложение:
procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);var ACol, ARow: integer;begin //Узнаем по какой ячейке был клик мыши StringGrid1.MouseToCell(X, Y, ACol, ARow); //Реагируем только на ячейку (3, 4) if (ACol=3) and (ARow=4) then //Если файл был выбран if OpenDialog1.Execute then begin //Тут делаем что-то с файлом //И заносим путь к файлу в ячейку StringGrid1.Cells[ACol, ARow]:=OpenDialog1.FileName; end;end;
Неизвестный
06.06.2008, 20:57
общий
это ответ
Здравствуйте, Зотов.Г.А!
Во-первых, положите на форму диалог открытия файлов <b>TOpenDialog</b> с закладки <b>Dialogs</b>.
При клике мышкой по ячейке, вызывается обработчик события <b>OnClick</b>. Значит мы должны использовать это событие.
Измените обработчик щелчка по ячейки таким образом:

<b>if</b> OpenDialog1.Execute <b>then</b>
 <b>begin</b>
  <FONT COLOR=GREEN>//Здесь выполняете открытие файла, например Memo1.lines.LoadFromFile(OpenDialog.FileName)</Font>
  StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row]:=ExtractFilePath(OpenDialog1.FileName);
 <b>end</b>;

В первой строке мы вызываем диалог и проверяем, успешно ли он закончился(пользователь нажал ОК и выбрал файл).
Если да, то изменяем текст текущей ячейки, на путь к файлу.

Доступ к ячейке осуществляется таким образом:
 StringGrid1.Cells[индекс колонки, индекс строки]

Индекс текущей колонки получаем через свойство <b>Col</b> у <b>StringGrid‘а</b>, а индекс строки через свойство <b>Row</b>

Полный путь к файлу получаем с помощью функции ExtractFilePath().
Она объявлена в модуле <b>SysUtils</b> и имеет такой вид:
 <b>function</b> ExtractFilePath(<b>const</b> FileName: string): string;
<b>FileName</b>-полное имя файла, возвращает полный путь до файла.

Удачи!!!
Неизвестный
06.06.2008, 21:23
общий
Абельхарисов Руслан / Marked Первое StringGrid1.Cells[ACol, ARow]:=OpenDialog1.FileName; иStringGrid1.Cells[ACol, ARow]:=ExtractFilePath(OpenDialog1.FileName);дают одинаковый эффект так как более правильнои второе почему OnClick а не onMouseDown
Неизвестный
06.06.2008, 21:41
общий
1)Спутал полный путь и просто путь к файлу.2)Можно и OnMouseDown, так проще: procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);var ACol, ARow: integer;begin StringGrid1.Cells[ACol, ARow]:=OpenDialog1.FileName;end;
Форма ответа