|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI |
|
Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI
|
![]() Обратный инженер Сообщения: 644 |
Итак,вопрос начинающего программиста заключается в следующем - имеется следующий текст кода:
Цитата:
Не мог бы кто-нибудь разъяснить это дело? P.S. Пример кода взят из книги Валерия Фаронова "Система программирования Delphi" . |
||
------- Отправлено: 17:41, 19-11-2004 |
![]() Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать DillerInc
увеличится размер выходного файла (при установке Range или Overflow Checking), но будешь узнавать о всех недосмотрах в коде программы |
Отправлено: 19:10, 01-01-2005 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Чего-то я запутался в следующем:
procedure TfmSubRip_Mod.bbOpenClick(Sender: TObject); {Открываем текстовый файл с титрами} begin OpenDialog1.Filter := 'Титры с расширением "srt"|*.srt'; if OpenDialog1.Execute and FileExists(OpenDialog1.FileName) then mmOutput.Lines.LoadFromFile(OpenDialog1.FileName); // Загружаем в многострочное поле текст из файла lbOutput.Caption := 'Нажмите "Пуск",чтобы начать исправление символов'; // Добавляем текст в метку В общем,попытка добавить в конец вышеуказанного кода слово else вызывает кучу всяких ошибок.Если добавить ещё один условный оператор if...then,то диалоговое окно открытия файла заставляет по два раза открывать нужный файл... |
------- Отправлено: 22:00, 03-01-2005 | #22 |
![]() Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать DillerInc
procedure TfmSubRip_Mod.bbOpenClick(Sender: TObject); {Открываем текстовый файл с титрами} begin OpenDialog1.Filter := 'Титры с расширением "srt"|*.srt'; if OpenDialog1.Execute then begin if FileExists(OpenDialog1.FileName) then begin mmOutput.Lines.LoadFromFile(OpenDialog1.FileName); // Загружаем в многострочное поле текст из файла lbOutput.Caption := 'Нажмите "Пуск",чтобы начать исправление символов'; // Добавляем текст в метку end else lbOutput.Caption := 'Файл не найден' end else lbOutput.Caption := 'Повторите операцию "Открыть файл" '; |
Отправлено: 22:08, 03-01-2005 | #23 |
![]() Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Savant
Ай да Savant - выручатель мой!Действительно получилось,как я хотел. Спасибо ![]() |
------- Отправлено: 22:37, 03-01-2005 | #24 |
![]() Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Доброго всем времени суток!
Это снова я...со своими вопросами.А именно,имеется вопрос по использованию переменных в подпрограммах. Код: unit FileDateU; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls, ExtCtrls, Mask; type TForm1 = class(TForm) Panel1: TPanel; bbOpen: TButton; OpenDialog1: TOpenDialog; Panel2: TPanel; lbOutput2: TLabel; Panel3: TPanel; lbOutput1: TLabel; edMaskInput: TMaskEdit; bbRun: TBitBtn; procedure bbOpenClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure bbRunClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin lbOutput2.Caption := 'Нажмите "Открыть",чтобы открыть файл и узнать дату его создания'; end; procedure TForm1.bbOpenClick(Sender: TObject); var FileHandle : Integer; Date : String; begin OpenDialog1.Filter := 'Все файлы|*.*'; if OpenDialog1.Execute then begin if FileExists(OpenDialog1.FileName) then begin FileHandle := FileOpen(OpenDialog1.FileName, fmOpenWrite or fmShareDenyNone); Date := DateTimeToStr(FileDateToDateTime(FileGetDate(FileHandle))); lbOutput1.Caption := Date; lbOutput2.Caption := 'Теперь введите новую дату в редактируемое поле и нажмите "OK",чтобы установить новую дату создания файла'; edMaskInput.SetFocus; end else lbOutput2.Caption := 'Файл не найден' end else lbOutput2.Caption := 'Повторите операцию открытия файла'; end; procedure TForm1.bbRunClick(Sender: TObject); var Date2 : String; begin Date2 := edMaskInput.Text; FileSetDate(FileHandle, (DateTimeToFileDate(StrToDateTime(Date2)))); end; end. ...мне почему-то не удаётся связать практику с теорией.По теории подпрограмме доступны те переменные,которые были уже объявлены и описаны в предшествующих подпрограммах.Получается,что подпрограмма TForm1.bbRunClick должна видеть переменную,объявленную и описанную в подпрограмме TForm1.bbOpenClick,но при прогоне программы компилятор,проверяя функцию FileSetDate,сообщает об ошибке "Undeclared Identifier"(FileHandle). Подскажите,пожалуйста,что я не так понимаю и как можно поправить ситуацию? |
------- Отправлено: 01:12, 20-01-2005 | #25 |
![]() Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать DillerInc
Цитата:
var TEST: Integer = 5; // объявляем глобальную переменную procedure a(SUPER: Integer); // заметим, что переменная SUPER является объявленной локально, // т.е. существует только внутри процедуры a; и вложенных в неё procedure b; begin inc( SUPER ); // super = 2+1 = 3 dec( TEST ); // test = 5-1 = 4 <-тут изменяем глобальную переменную TEST end; var TEST: Integer; // перекрываем глобальную переменную локальной procedure c; begin dec( SUPER ); // super = 3-1 = 2 inc( TEST ); // test = 2+1 = 3 <- а тут - локальную end; begin TEST := SUPER; b; WriteLn(TEST,' ',SUPER); // test=2!!! super=3 c; WriteLn(TEST,' ',SUPER); // test=3 super=2 end; begin a(2); WriteLn(TEST); // И наконец в подтверждение выводим глобальную переменную TEST // уменьшенную в процедуре b; на единицу ReadLn; end. |
|
Отправлено: 06:27, 20-01-2005 | #26 |
![]() Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать Ах да, еще спрашивалось, как подправить. Ну, думаю, это уже стало понятно - сделать FileHandle глобальной:
Правда, она не становится глобальной в общем смысле, а также есть некоторые особенности объявления переменных внутри interface и implementation. |
Отправлено: 06:37, 20-01-2005 | #27 |
![]() Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Savant
Спасибо,действительно начинает потихоньку мотаться на ус,только для меня теперь остаётся непонятным использование секции интерфейсных объявлений(interface) и секции реализаций(implementation),т.е. всегда ли можно объявлять глобальные переменные в секции реализаций и какие там есть особенности или можно также использовать т.н. поля класса - объявления переменных в следующем месте: private {Private declarations} ...? |
------- Отправлено: 17:14, 20-01-2005 | #28 |
![]() Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать 1. Переменная, объявленная внутри implementation будет доступна всему коду , расположенному ниже её объявления.
2. Переменная, объявленная внутри interface будет доступна всему коду , расположенному ниже её объявления, а также программе, которая использует данный unit. 3. Переменная, объявленная внутри секции private будет доступна только для внутренних вызовов из данного класса. |
Отправлено: 17:23, 20-01-2005 | #29 |
![]() Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Savant
Премного благодарю ![]() Теперь немного о функциях рассмотренного выше кода,а именно функции FileGetDate и FileSetDate - насколько я впоследствии понял,они орудуют датой последней модификации определённого файла.А я хотел,чтобы программка изменяла именно дату создания файла.Так вот вопрос: возможно ли такое "дельфийскими силами" и какие функции тогда использовать? |
------- Отправлено: 18:00, 20-01-2005 | #30 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[флейм] GGK и уголовная ответственность за использование нелицензионного ПО | SPB | Лицензирование продуктов Microsoft | 9 | 20-06-2007 12:38 | |
Delphi - WinApi||C++Builder(Delphi) SplashScreen в отдельном потоке? | XCodeR | Программирование и базы данных | 4 | 12-03-2007 19:51 | |
Delphi - Win32 API | Delphi | Странности с Winapi Timer | Mavlyudov | Программирование и базы данных | 4 | 14-11-2005 10:10 | |
Delphi - Delphi, WinAPI | Корректное завершение программы | fossil | Программирование и базы данных | 6 | 10-08-2005 14:52 | |
Delphi - *Решено* | Использование WinAPI под Delphi | Savant | Программирование и базы данных | 2 | 14-01-2005 21:40 |
|