![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Помогите сократить действия с OpenDialog, в моей программе сначала прописывается:
Код:
if OpenDialog1.Execute then Edit1.Text:=OpenDialog1.FileName; Код:
if OpenDialog1.InitialDir = '' then OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName); MAD: Учимся пользоваться тегами. Последний раз редактировалось M.A.D.M.A.N., 24.01.2015 в 09:02. |
#2
|
||||
|
||||
![]() С какого это перепуга, диалог открывается без вызова метода Execute. Давайте ка полный код в студию, наверняка вы что-то там накосячили.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
||||
|
||||
![]() Цитата:
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
||||
|
||||
![]() Смотрю, и не вижу в упор второго вызова в этой строчке:
Код:
if OpenDialog1.InitialDir = '' then OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName); Цитата:
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 24.01.2015 в 13:42. |
#5
|
|||
|
|||
![]() Цитата:
Вот полный код procedure TForm1.Button2Click(Sender: TObject); var ExApp, ExBook, ExSheet : OleVariant; V : Variant; C, R, Col, Col1, Col2, Row, Row1, Row2 : Integer; S, FileName : String; Sg : TStringGrid; begin if OpenDialog1.Execute then Edit1.Text:=OpenDialog1.FileName; if OpenDialog1.InitialDir = '' then OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName); if not OpenDialog1.Execute then Exit; FileName := OpenDialog1.FileName; if not FileExists(FileName) then begin ShowMessage('Внимание! Файл с указанным именем не существует. Действие отменено.'); Exit; end; Sg := StringGrid1; ExApp := CreateOleObject('Excel.Application'); ExBook := ExApp.WorkBooks.Open(FileName:=FileName); ExSheet := ExBook.WorkSheets[1]; //Определяем границы таблицы на листе Excel. Row1 := ExSheet.UsedRange.Row; Col1 := ExSheet.UsedRange.Column; Row2 := Row1 + ExSheet.UsedRange.Rows.Count - 1; Col2 := Col1 + ExSheet.UsedRange.Columns.Count - 1; //Задаём размер таблицы StringGrid1 в соответствие с размером //таблицы на листе Excel Sg.FixedRows := 0; Sg.RowCount := Row2 - Row1 + 1; Sg.FixedCols := 0; Sg.ColCount := Col2 - Col1 + 1; //Читаем данные с листа Excel. R := 0; for Row := Row1 to Row2 do begin C := 0; for Col := Col1 to Col2 do begin V := ExSheet.Cells[Row, Col].Value; //Чтение значения ячейки. case VarType(V) of //Преобразование в зависимости от типа данных. varOleStr : S := V; //Строковые данные. varDouble : S := FloatToStr(V); //Числовые данные. varDate : S := FormatDateTime('dd.mm.yyyy"-"hh.nn.ss.zzz', V); //Данные типа даты и времени. varEmpty : S := ''; //Пустое значение (из пустой ячейки). else S := '<?>'; //Данные незарегистрированного типа. end; //Читаем данные очередной ячейки на листе Excel //и записываем их в ячейку StringGrid1. Sg.Cells[C, R] := S; //Переход к следующему слобцу StringGrid1. Inc(C); end; // Переход к следующей строке StringGrid1. Inc(R); end; ExBook.Close; ExApp.Quit; end; |
#6
|
||||
|
||||
![]() Ну как и ожидалось, два вызова Execute.
Если я правильно понял, то вся эта чехарда затеяна для выбора существующего файла? Тогда вам просто надо сделать так: Код:
OpenDialog1.Options := OpenDialog1.Options + [ofFileMustExist]; if not OpenDialog1.Execute then Exit; // Далее идет ваш код для работы с выбранным файлом ПС: и еще один советик. Добавьте строчку: Код:
ExApp := Unassigned; Код:
ExApp.Quit; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 24.01.2015 в 21:56. |