Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 427
от 29.03.2006, 02:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 293, Экспертов: 74
В номере:Вопросов: 6, Ответов: 18


Вопрос № 38284: Здравствуйте, уважаемые эксперты! Вопрос: Как реализовать парольную схему в программе? У меня в программе есть строка ввода(TEdit) и две кнопки (TButton). Первая кнопка очищает экран, вторая - потверждение того, что ты ввёл в строку ввода. ...
Вопрос № 38287: Уважаемые эксперты возможно ли в Gridу изменять высоту каждой строки отдельно. Есть база данных с полем Memo. Хотелось бы, чтобы при выводе Grid высота для каждой строки вычислялась в зависимости от размера содержимого мемо поля, т.е. например 1 стро...
Вопрос № 38304: Здравствуйте. Такой вопрос: У меня стоит Delphi6. Вчера установил для него компонент ThemeManager. Но он почему-то не работает, т.е. кидаешь его на форму и никакого эффекта. В чем может быть проблема? Спасибо, заранее....
Вопрос № 38332: Здраствуй народ. Работай на Delphi. Как запустить процесс системного копирования файла под windows с окном процесса копирования, как сама windows это делает?...
Вопрос № 38345: Здравствуйте!!! У компонента TEdit есть свойства width и height. Когда я изменяю их так как мне нужно в режиме разработки ширина и длина меняется, но когда запускаю программу на выполнение то его размеры опять становятся какими были по умолча...
Вопрос № 38364: Здравствуйте, Уважаемые эксперты! Как сравнить 2 текстовых файла между собой посимвольно и если есть различия вывести какое-нибудь сообщение, показывать различия не нужно. Убедительная просьба привести пример. ...

Вопрос № 38.284
Здравствуйте, уважаемые эксперты!
Вопрос: Как реализовать парольную схему в программе?
У меня в программе есть строка ввода(TEdit) и две кнопки (TButton). Первая кнопка очищает экран, вторая - потверждение того, что ты ввёл в строку ввода. При нижеуказанной схеме вылетает "Try again" при как бы ты пароле не нажимал ок'ей, даже при правильном.
Как это исправить?

Приложение:

Отправлен: 23.03.2006, 08:51
Вопрос задал: Дружилин Алексей Викторович (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сидоров Андрей
Здравствуйте, Дружилин Алексей Викторович!

Все правильно. При первом сравнении если пароль правильный Edit1.Text у тебя меняется на Good и при втром сравнении уже проходит как не правильный.
В твое случае лучше использовать конструкцию If then else

if Edit1.Text = Password
then Edit1.Text:='Good'
esle Edit1.Text:='Try again';
Ответ отправил: Сидоров Андрей (статус: 1-ый класс)
Ответ отправлен: 23.03.2006, 09:18

Отвечает: Cheater76
Здравствуйте, Дружилин Алексей Викторович!
procedure TForm1.Button2Click(Sender: TObject)
var Password: String;
begin
Password:= 'Hkjsdhfu';
If Edit1.Text = Password then Edit1.Text:= 'Good' !!!
else Edit1.Text := 'Try again'; !!!
end;

Приложение:

Ответ отправил: Cheater76 (статус: 3-ий класс)
Ответ отправлен: 23.03.2006, 09:31

Отвечает: sir henry
Здравствуйте, Дружилин Алексей Викторович!
К паролям это не имеет никакого отношения. Дело в том, что у Вас идут последовательно два условия проверки Edit1. Если Вы ввели пароль правильно, то в Edit'е появляется надпись Good. Далее Вы это же поле проверяете на неравенство паролю. Естественно никакго пароля там уже нет, поэтому неравенство подтверждается и появляется Try again. Т.е. на лицо грубейшая логическая ошибка. Нужно сделать так, чтобы пароль проверялся только один раз, например так:
f Edit1.Text = Password then
Edit1.Text:= 'Good'
Else
Edit1.Text := 'Try again';
Понимаете?
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 23.03.2006, 10:29

Отвечает: Ataman N. N.
Здравствуйте, Дружилин Алексей Викторович!
Ошибка елементарная, Вы сначала проверяете пароль, если пароль правильный заносите в Edit1 другой текст, а потом снова проверяете правильность пароля. Чтобы все работало правильно нужно использовать не два оператора if then, а один оператор if then else.
Password:= 'Hkjsdhfu';
If Edit1.Text = Password then
Edit1.Text:= 'Good'
else
Edit1.Text := 'Try again';
Ответ отправил: Ataman N. N. (статус: 10-ый класс)
Ответ отправлен: 23.03.2006, 16:40

Отвечает: Malysh
Здравствуйте, Дружилин Алексей Викторович!
procedure TForm1.Button1Click(Sender: TObject);
var
Password: String;
begin
Password:= 'Hkjsdhfu';
If CompareStr(Edit1.Text,Password)=0 then
Edit1.Text:= 'Good'
else
Edit1.Text := 'Try again';
end;
Ответ отправил: Malysh (статус: Практикант)
Ответ отправлен: 24.03.2006, 23:29


Вопрос № 38.287
Уважаемые эксперты возможно ли в Gridу изменять высоту каждой строки отдельно. Есть база данных с полем Memo. Хотелось бы, чтобы при выводе Grid высота для каждой строки вычислялась в зависимости от размера содержимого мемо поля, т.е. например 1 строка - высотой 2 строки, 2 строка - 1.
Посмотрел компоненты - везде можно менять, но только всех строк одновремено.
Отправлен: 23.03.2006, 09:00
Вопрос задал: Сидоров Андрей (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Timoshin A.B.
Здравствуйте, Сидоров Андрей!
Стандартными средствами это не реализовать, придётся чуть-чуть переписать Grid под себя.
Ответ отправил: Timoshin A.B. (статус: 9-ый класс)
Ответ отправлен: 23.03.2006, 10:29


Вопрос № 38.304
Здравствуйте.
Такой вопрос:
У меня стоит Delphi6. Вчера установил для него компонент ThemeManager. Но он почему-то не работает, т.е. кидаешь его на форму и никакого эффекта. В чем может быть проблема?
Спасибо, заранее.
Отправлен: 23.03.2006, 12:21
Вопрос задал: AlexB (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сидоров Андрей
Здравствуйте, AlexB!
Какая версия ThemeManager. Если 6.0 - то это для настройки шрифтов своих визуальных компонентов Edit и т.д. если что пиши у меня стоит версия 6.0 объесню как с ней работать
Ответ отправил: Сидоров Андрей (статус: 1-ый класс)
Ответ отправлен: 23.03.2006, 12:49

Отвечает: Лучников Ю.В.
Здравствуйте, AlexB!

Кроме того, как кинуть сам компонент Theme Manager на форму, вам нужно подлинковать в ресурсы проекта так называемый Manifest файл.

К ответу прикрепляю скомпилированный (winxp.res) файл манифеста.
В своем проекте просто жмете Project - Add To Project... и выбираете файл winxp.res.

Успехов!

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.

Ответ отправил: Лучников Ю.В. (статус: Практикант)
Ответ отправлен: 23.03.2006, 22:35


Вопрос № 38.332
Здраствуй народ. Работай на Delphi. Как запустить процесс системного копирования файла под windows с окном процесса копирования, как сама windows это делает?
Отправлен: 23.03.2006, 17:19
Вопрос задал: Карасев Алексей Александрович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Карасев Алексей Александрович!
Вот пример:

uses ShellApi;



function WindowsCopyFile(FromFile, ToDir : string) : boolean;

var F : TShFileOpStruct;

begin

  F.Wnd := 0; F.wFunc := FO_COPY;

  FromFile:=FromFile+#0; F.pFrom:=pchar(FromFile);

  ToDir:=ToDir+#0; F.pTo:=pchar(ToDir);

  F.fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION;

  result:=ShFileOperation(F) = 0;

end;


// Пример копирования:

procedure TForm1.Button1Click(Sender: TObject);

begin

if not WindowsCopyFile('C:UTILARJ.EXE', GetCurrentDir) then

   ShowMessage('Copy Failed');

end;


---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 23.03.2006, 18:37

Отвечает: sir henry
Здравствуйте, Карасев Алексей Александрович!
В модуле ShellAPI есть очень хорошая функция SHFileOperation(), которая позволяет проводить множество файловых операций - копирование, переименование, удаление в корзину и т.п. Конкретное действие и флаги задаются в структуре TSHFileOpStruct. Пример смотрите в приложении.

Приложение:

Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 24.03.2006, 08:06


Вопрос № 38.345
Здравствуйте!!! У компонента TEdit есть свойства width и height. Когда я изменяю их так как мне нужно
в режиме разработки ширина и длина меняется, но когда запускаю программу на выполнение
то его размеры опять становятся какими были по умолчанию (до изменения). Как это исправить????
Отправлен: 23.03.2006, 20:22
Вопрос задал: Rewer8 (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгения
Здравствуйте, Rewer8!
mozhete naprimer izmenit' razmer programmno: Edit1.width:=34; Edit1.height:=20; naprimer.
Ответ отправила: Евгения (статус: 2-ой класс)
Ответ отправлен: 23.03.2006, 22:23

Отвечает: Лучников Ю.В.
Здравствуйте, Rewer8!

Все просто;)
В инспекторе объектов поставте свойство Edit1.AutoSize равным false.

Успехов!
Ответ отправил: Лучников Ю.В. (статус: Практикант)
Ответ отправлен: 23.03.2006, 22:45

Отвечает: Leshiy2006
Здравствуйте, Rewer8! Поставьте свойство AutoSize=False-это свойство определяет автоматическое определение размеров компонента.
Удачи!
Ответ отправил: Leshiy2006 (статус: 6-ой класс)
Ответ отправлен: 23.03.2006, 23:15

Отвечает: Ataman N. N.
Здравствуйте, Rewer8!
У Edit'a есть свойство AutoSize. Попробуйте установить его в false.
Ответ отправил: Ataman N. N. (статус: 10-ый класс)
Ответ отправлен: 24.03.2006, 17:15

Отвечает: Malysh
Здравствуйте, Rewer8!
У меня никаких проблем не возникает:
Edit1.Width:=150;
Edit1.Height:=150;
и все нормально!!!
Ответ отправил: Malysh (статус: Практикант)
Ответ отправлен: 24.03.2006, 23:30


Вопрос № 38.364
Здравствуйте, Уважаемые эксперты!

Как сравнить 2 текстовых файла между собой посимвольно и если есть различия вывести какое-нибудь сообщение, показывать
различия не нужно. Убедительная просьба привести пример.
Отправлен: 24.03.2006, 00:40
Вопрос задал: Solovej (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Лучников Ю.В.
Здравствуйте, Solovej!

Для этого можно использовать объект TStringList.
Представив файлы как большой массив байтов, сравнить их одноименные байты.

В приложении приведена функция CompareFiles() с комментариями, которая возвращает true если сравниваемые файлы одинаковы; false - если файлы различны. Там же приведен пример использования этой функции.

Успехов;)

Приложение:

Ответ отправил: Лучников Ю.В. (статус: Практикант)
Ответ отправлен: 24.03.2006, 03:18

Отвечает: sir henry
Здравствуйте, Solovej!
Нужно открыть оба файла, как файл символов, считывать символы и сравнивать.
Var
f1: fail of char;
f2: file of char;
c1: char;
c2: char;
i: integer;
Begin
i:=0;
AssignFile(f1, 'Имя_файла1');
AssignFile(f2, 'Имя_файла2');
Reset(f1);
Reset(f2);
While (not Eof(f1)) or (not Eof(f2)) do
Begin
Read(f1, c1);
Read(f2, c2);
If c1<>c2 Then
Inc(i);
End;
WriteLn('Выявлено несовпадений символов: ', i);
CloseFile(f1);
CloseFile(f2);
End.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 24.03.2006, 08:20

Отвечает: Leshiy2006
Здравствуйте, Solovej!
Примерно так
Readln(f1,s1);
ReadLn(f2,s2);
if Length(s1)=Length(s2) then begin
for i:=0 to Length(s1)-1 do begin
if Copy(s1,i,1)= Copy(s2,i,1) then res:=True;
else begin
res:=False;
Break;
end;
end;
end;
if not res then ShowMessage('Файлы различны');
Удачи!

Ответ отправил: Leshiy2006 (статус: 6-ой класс)
Ответ отправлен: 24.03.2006, 22:33


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.20 (beta) от 17.03.2006
Яндекс Rambler's Top100

В избранное