Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI

Ответить
Настройки темы
Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI

Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Итак,вопрос начинающего программиста заключается в следующем - имеется следующий текст кода:
Цитата:
// Показываем результат
lbOutput.Caption := Trim(edInput1.Text)+' '+cbSign.Items[cbSign.ItemIndex]+' '+
Trim(edInput2.Text)+' = ' ;
...для меня остаётся непонятным,по какому принципу выставляются знаки апострофа и плюса('+)в данном примере.
Не мог бы кто-нибудь разъяснить это дело?

P.S. Пример кода взят из книги Валерия Фаронова "Система программирования Delphi" .

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 17:41, 19-11-2004

 

Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


DillerInc
увеличится размер выходного файла (при установке Range или Overflow Checking), но будешь узнавать о всех недосмотрах в коде программы

Отправлено: 19:10, 01-01-2005 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить 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 := 'Нажмите "Пуск",чтобы начать исправление символов';  // Добавляем текст в метку
...это всё если OpenDialog1.Execute = True,а мне надо добавить сюда ещё обработчик события OpenDialog1.Execute = False(типа пользователь передумал открывать файл и нажал Cancel),который будет опять добавлять текст в метку,например:
Код: Выделить весь код
lbOutput := 'Повторите операцию "Открыть файл" ';
В общем,попытка добавить в конец вышеуказанного кода слово else вызывает кучу всяких ошибок.Если добавить ещё один условный оператор if...then,то диалоговое окно открытия файла заставляет по два раза открывать нужный файл...

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 22:00, 03-01-2005 | #22


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить 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


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Savant
Ай да Savant - выручатель мой!Действительно получилось,как я хотел.
Спасибо .

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 22:37, 03-01-2005 | #24


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить 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.
Вот насчёт переменной
Код: Выделить весь код
var
 FileHandle : Integer;
...мне почему-то не удаётся связать практику с теорией.По теории подпрограмме доступны те переменные,которые были уже объявлены и описаны в предшествующих подпрограммах.Получается,что подпрограмма TForm1.bbRunClick должна видеть переменную,объявленную и описанную в подпрограмме TForm1.bbOpenClick,но при прогоне программы компилятор,проверяя функцию FileSetDate,сообщает об ошибке "Undeclared Identifier"(FileHandle).
Подскажите,пожалуйста,что я не так понимаю и как можно поправить ситуацию?

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 01:12, 20-01-2005 | #25


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


DillerInc
Цитата:
По теории подпрограмме доступны те переменные,которые были уже объявлены и описаны в предшествующих подпрограммах
По теории подпрограмме доступны те переменные, которые объявлены в зоне её видимости. Т.е. глобальные переменные, объявленные вообще вне любой подпрораммы, а также еще в случае, когда одна процедура вложена в другую. Лучше наверно показать на довольно прикольном примере, который ща сочинил:
Код: Выделить весь код
program Project_test;
{$APPTYPE CONSOLE}
Код: Выделить весь код
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


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


Ах да, еще спрашивалось, как подправить. Ну, думаю, это уже стало понятно - сделать FileHandle глобальной:
Код: Выделить весь код
...........
implementation
 
{$R *.dfm}
 
var
  FileHandle : Integer;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
...........
Правда, она не становится глобальной в общем смысле, а также есть некоторые особенности объявления переменных внутри interface и implementation.

Отправлено: 06:37, 20-01-2005 | #27


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Savant
Спасибо,действительно начинает потихоньку мотаться на ус,только для меня теперь остаётся непонятным использование секции интерфейсных объявлений(interface) и секции реализаций(implementation),т.е. всегда ли можно объявлять глобальные переменные в секции реализаций и какие там есть особенности или можно также использовать т.н. поля класса - объявления переменных в следующем месте:
private
{Private declarations}
...?

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 17:14, 20-01-2005 | #28


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


1. Переменная, объявленная внутри implementation будет доступна всему коду , расположенному ниже её объявления.
2. Переменная, объявленная внутри interface будет доступна всему коду , расположенному ниже её объявления, а также программе, которая использует данный unit.
3. Переменная, объявленная внутри секции private будет доступна только для внутренних вызовов из данного класса.

Отправлено: 17:23, 20-01-2005 | #29


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Savant
Премного благодарю .
Теперь немного о функциях рассмотренного выше кода,а именно функции FileGetDate и FileSetDate - насколько я впоследствии понял,они орудуют датой последней модификации определённого файла.А я хотел,чтобы программка изменяла именно дату создания файла.Так вот вопрос: возможно ли такое "дельфийскими силами" и какие функции тогда использовать?

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 18:00, 20-01-2005 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[флейм] 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




 
Переход