|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум 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 | |
|