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

Ответить
Аватара пользователя
DillerInc

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

Сообщение DillerInc »

Итак,вопрос начинающего программиста заключается в следующем - имеется следующий текст кода:


Цитата:



// Показываем результат

lbOutput.Caption := Trim(edInput1.Text)+' '+cbSign.Items[cbSign.ItemIndex]+' '+

Trim(edInput2.Text)+' = ' ;



...для меня остаётся непонятным,по какому принципу выставляются знаки апострофа и плюса('+)в данном примере.

Не мог бы кто-нибудь разъяснить это дело?



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

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

Сообщение shurikan »

DillerInc



Это просто:





Код:

Код: Выделить всё

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

Изображение
Аватара пользователя
DillerInc

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

Сообщение DillerInc »

Это опять я со своими вопросами.

Итак,вот ситуация:

имеется текстовый файл(как в примере выше),содержащий текст.В этом тексте есть две определённые ошибки,встречающиеся часто на протяжении всего текста.

Так вот как сделать так,чтобы создаваемая программка открывала этот файл,читала его(типа всё как в примере выше),а затем находила эти определённые(неправильные)символы и заменяла их опять-таки определёнными,но уже правильными символами?Возможно ли такое?Если что,пожалуйста,с комментариями.
Аватара пользователя
Savant

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

Сообщение Savant »

DillerInc

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

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

Сообщение Savant »

Можно так (используя WinAPI):



Код:

Код: Выделить всё

program Project_test;
uses Windows, SysUtils; // Необходимые модули
var
  CreateTime,   // Дата создания
  LastAccess,   // Дата последнего доступа
  LastWrite     // Дата последней записи в файл
  : PFileTime;
  SystemTime: _SystemTime;
  FileHandle: THandle;
begin
  New(CreateTime);  // Создаем переменную под хранение даты/времени
  LastAccess:=nil;  // Не изменять эту дату/времени
  LastWrite:=nil;   // Не изменять эту дату/времени
  // Открываем некоторый файл
  FileHandle:=FileOpen('Project_test.dpr', fmOpenWrite or fmShareDenyNone);
  // Произошла ошибка - выводим диагностическое сообщение
  if FileHandle < 1 then MessageBox(0,'Не могу открыть файл','Ошибка',0);
  try
    GetSystemTime(SystemTime); // Получаем текущее системное время
    // Преобразовываем переменную к сжатому виду
    SystemTimeToFileTime(SystemTime,CreateTime^);
    // Устанавливаем дату и время для файла FileHandle
    SetFileTime(FileHandle,CreateTime,LastAccess,LastWrite);
  finally
    FileClose(FileHandle); // Закрываем дескриптор (файл)
    Dispose(LastWrite);    // Уничтожаем переменную под хранение даты/времени
  end;
end.
Аватара пользователя
DillerInc

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

Сообщение DillerInc »

Savant

Спасибо,попробую это теперь осмыслить и как-нибудь применить Изображение .



...код переварил,и то,что вышло,прикрепил в файле Изображение .

Вроде работает,но всё равно так и не смог придумать нормальную схему условных операторов в обработчике события OnCloseQuery,поэтому пришлось идти немного обходным путём.

Дело в том,что мне необходимо в этом обработчике проверить не только наличие изменений в открытом документе,но и то,сохранил ли пользователь уже этот документ или нет.И с последним пунктом у меня как раз и возникает загвоздка.
Вложения
SubRip_Mod_files.zip
(3.88 КБ) 0 скачиваний
SubRip_Mod_files.zip
(3.88 КБ) 0 скачиваний
Аватара пользователя
Savant

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

Сообщение Savant »

Ну нет ничего проще, чем заглянуть в папку .\vcl\source\ и хорошенько там покопаться. Итогом может стать например это:



Код:

Код: Выделить всё

function GetLine(hwnd: Cardinal; Index: Integer): String;
// Получает строку под номером Index из контрола с Handle = hwnd
var
  Text: array[0..4095] of Char;
begin
  Word((@Text)^) := SizeOf(Text);
  SetString(Result, Text, SendMessage(hwnd, EM_GETLINE, Index, Longint(@Text)));
end;
procedure ReplaceLine(hwnd: Cardinal; Index: Integer; const S: String);
// Заменяет строку под номером Index в контроле hwnd на строку S
var
  SelStart: Integer;
begin
  SelStart := SendMessage(hwnd, EM_LINEINDEX, Index, 0);
  if SelStart >= 0 then begin
    SendMessage(hwnd, EM_SETSEL, SelStart, SelStart + SendMessage(hwnd, EM_LINELENGTH, SelStart, 0));
    SendMessage(hwnd, EM_REPLACESEL, 0, Longint(PChar(S)));
  end;
end;
procedure AddToLine(hwnd: Cardinal; Index: Integer; what: String);
// Добавляет к строке под номером Index строку what
begin
  ReplaceLine(hwnd, Index, GetLine(hwnd, Index) + what);
end;

>>Т.к. если послать сообщение классу STATIC...[/i]

Замечу, что TMemo относится к "классу" (точнее, типу) EDIT
Аватара пользователя
serg700

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

Сообщение serg700 »

DillerInc

Спасибо , попробую ; надеюсь сработает ! Изображение
Аватара пользователя
DillerInc

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

Сообщение DillerInc »

shurikan

Спасибо,конечно,за ответ.

Признаюсь,долго ломал голову над вышенаписанным.Но постараюсь как-нибудь разобраться.Правильно ли я понял,что


Цитата:



Trim(edInput1.Text)+' // это первая складывающаяся строка

'+cbSign.Items[cbSign.ItemIndex]+' // это вторая складывающаяся строка

'+Trim.edInput2.Text)+' // это третья складывающаяся строка

// и между ними стоит везде пробел



...или нет?
Аватара пользователя
Новичёк

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

Сообщение Новичёк »

DillerInc, нет, совсем не правильно Изображение

Строк тут шесть:

Trim(edInput1.Text) //1-ая

' ' //2-ая, содержит один-единственный пробел для //разделения

cbSign.Items[cbSign.ItemIndex] // 3-я

' ' // 4-я, опять только пробел

Trim(edInput2.Text) // 5-я

' = ' // символ "=" с пробелами - разделителями

Ты, как я понял, решил, что знаки конкатенации ("+") надо заключать вместе со строкой в апострофы? Если нет, то извини, зря я шум поднял Изображение, а если нет... Вобщем, плюсы ЗА апострофами, просто строка тута такая, что можно запутаться Изображение
Ответить

Вернуться в «Программирование и базы данных»