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

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


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

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

Выпуск № 729
от 06.02.2007, 21:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 441, Экспертов: 87
В номере:Вопросов: 5, Ответов: 9


Вопрос № 73550: Здраствуйте Уважаемые эксперты, у меня появился еше один вопрос, как можно зделать чтобы размеры формы можно былобы изменять только до определенного размера, например чтобы ClientWidth моглобы принимать значения только до 530 и ClientHeight такж...
Вопрос № 73560: Добрый вечер!Подскажите как проверить приходит что-то на Com- порт или нет.Скачал в Инете несколько программ на Делфи для работы и проверки Com -портов и ни одна ни чего не видит, а с прибора должны идти данные. По подробнее пожалуйста объясните. ...
Вопрос № 73585: Здраствуйте, уважаемые эксперты! Вопрос такой: У меня на форме стоит TEdit и при открытии формы в него загружается первая строчка указанного текста! Как сделать чтобы загружалась вторая строка или как сделать что бы программа иск...
Вопрос № 73598: Здравствуйте!!! Вопрос всё таки по winapi, но всётаки я думаю эксперты должны знать. Да и обсуждалось, наверное не раз(и не два): Нужно чтобы приложение не отображалось на панели задач. У Фленова в книге делфи глазами хакера это делалось ...
Вопрос № 73629: Здравствуйте. Вопрос, скорее, по алгоритмам. Моя программа рекурсивно обходит папки на дисках и записывает имена папок и файлов в текстовый файл. Затем можно выполнить поиск файлов по имени или по части имени, имена выдаются в ListBox. Проблема в том...

Вопрос № 73.550
Здраствуйте Уважаемые эксперты,
у меня появился еше один вопрос, как можно зделать чтобы размеры формы можно былобы изменять только до определенного размера, например чтобы ClientWidth моглобы принимать значения только до 530 и ClientHeight также, и еще, как можно зделать чтобы при двоином нажатии на заголовок формы, форма не разворачивалась бы на весь экран, а просто ничего непроисходилобы.
Заранее Спасибо.
с уважением, Станислав.
Отправлен: 31.01.2007, 22:25
Вопрос задал: Станислав (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Gh0stik
Здравствуйте, Станислав!

Для того чтобы Ваша форма соответствовала Вашим требованиям необходимо настроить свойство Constraints в Диспетчере Объектов (Object Inspector) или написать соответствующий обработчик:


procedure TForm1.FormCreate(Sender: TObject);
begin
with Form1.Constraints do
begin
MaxHeight:=200; //максимальная высота формы (объекта)
MaxWidth:=200; //максимальная ширина формы (объекта)
MinHeight:=100; //минимальная высота формы (объекта)
MinWidth:=100; //минимальная ширина формы (объекта)
end;
end;


Good Luck!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 31.01.2007, 22:56
Оценка за ответ: 5
Комментарий оценки:
Спасибо


Вопрос № 73.560
Добрый вечер!Подскажите как проверить приходит что-то на Com- порт или нет.Скачал в Инете несколько программ на Делфи для работы и проверки Com -портов и ни одна ни чего не видит, а с прибора должны идти данные. По подробнее пожалуйста объясните.
Подскажите как работать с ini файлами, запись числа из Edit в ini файл и чтение из него в Edit? Нужно для работы.
Отправлен: 31.01.2007, 22:54
Вопрос задал: SIR (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Павлов Сергей Сергеевич
Здравствуйте, SIR!
Вот код для сохранения:

Var a:textfile;
b:string;
begin
b:=Edit1.Text;
AssignFile(a,'1.ini');
Rewrite(a);
Writeln(a,b);
CloseFile(a);
End;

Для открытия:
var c:textfile;
d:string;
begin
If FileExist('1.ini') then
begin
AssignFile(c,'1.ini');
Reset(c);
Readln(c,d);
Edit1.Text:=d;
CloseFile(c);
end;
end;
Ответ отправил: Павлов Сергей Сергеевич (статус: 1-ый класс)
Ответ отправлен: 01.02.2007, 00:22
Оценка за ответ: 4
Комментарий оценки:
Спасибо.Для общего развития пригодится.

Отвечает: Gladiator
Здравствуйте, SIR!
С предыдущим ответимшим я не согласен. То, что он привёл, используется для работы с текстовыми файлами. Для использования в своей программе ini-файлов имеется библиотека IniFiles.
Пример работы:

uses ..., IniFiles;

procedure <Запись в ini-файл>;
var IniPath: string;
begin
IniPath:=ExtractFilePath(Application.ExeName)+'program.ini');
Ini:=TIniFile.Create(IniPath);
try
Count:=10;
Ini.WriteInteger('Settings','Count',Count);
for i:=1 to Count do
begin
Ini.WriteString('Settings',IntToStr(i),'Poperties №'+IntToStr(i));
end;
finally
Ini.Free;
end;
end;

procedure <Чтение из ini-файла>;
var Count: integer;
i: cardinal;
S: string;
IniPath: string;
begin
IniPath:=ExtractFilePath(Application.ExeName)+'program.ini');
Ini:=TIniFile.Create(IniPath);
if not FileExists(IniPath) then
begin
FileCreate(IniPath);
Ini.Free;
Exit;
end;
Count:=Ini.ReadInteger('Settings','Count',0);
if Count = 0 then
begin
Ini.Free;
Exit;
end;
for i:=1 to Count do
begin
S:=Ini.ReadString('Settings',IntToStr(i),'');
if Length(S)=0 then Continue;
Memo1.Lines.Add(S)
end;
Ini.Free;
end;

Вот и всё.
Ответ отправил: Gladiator (статус: 7-ой класс)
Ответ отправлен: 02.02.2007, 08:21
Оценка за ответ: 5
Комментарий оценки:
Огромное СПАСИБО! Помогли здорово.


Вопрос № 73.585
Здраствуйте, уважаемые эксперты!
Вопрос такой:
У меня на форме стоит TEdit и при открытии
формы в него загружается первая строчка указанного текста!
Как сделать чтобы загружалась вторая строка или
как сделать что бы программа искала автоматически нужную строку
Например IP=192.168.0.2 при помощи слов IP
Вот как у меня сделана загрузка:

Приложение:

Отправлен: 01.02.2007, 06:38
Вопрос задал: Павлов Сергей Сергеевич (статус: 1-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Argyn.Durmagambetov
Здравствуйте, Павлов Сергей Сергеевич!

вы с INI файлами совсем не правильно работаете
для них в Delphi есть специальный класс TIniFile находится в модуле IniFiles
код примера в приложении

Приложение:

---------
Не говори мне СДЕЛАЙ и я не скажу куда тебе идти...спроси "Как сделать" и получишь ответ

Ответ отправил: Argyn.Durmagambetov (статус: 2-ой класс)
Ответ отправлен: 01.02.2007, 07:00
Оценка за ответ: 5
Комментарий оценки:
СПСБ Большое!
То что надо!

Отвечает: sir henry
Здравствуйте, Павлов Сергей Сергеевич!
Если Ваш INI-файл это обычный неструктурированый текстовый файл, то прочитать только вторую строчку можно добавлением второй команды ReadLN(a, b).
Если нужно организовать поиск конкретного значения, то придется делать цикл:
Var
i, p: integer;

Begin
...
p=0;
While (not Eof(a)) or (p=0) Do
Begin
ReadLn(a,b);
p:=Pos('IP=192.168.0.2', b);
End;
...
End;
Если же Ваш файл это правильный INI-файл, то работайте с ним как советовал предыдущий эксперт, это будет проще. Только надо предварительно его структуру хорошо продумать.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 01.02.2007, 08:32

Отвечает: Arvist
Здравствуйте, Павлов Сергей Сергеевич!
Присоединяюсь к мнению экспертов, но хочу добавить пару комментов:
1. У методов TIniFile.ReadXXX третьим аргументом устанавливается значение возвращаемое по умолчанию, т.е. если не удалось получить доступ к необходимому ключу ini-файла
2. Для записи в ini файлы используется метод WriteXXX(Секция, ключ, записываемое значение)
3. Если ini файл находиться в директории программы то лучше к нему обращаться указывая полный путь, то есть вместо AppIni := TIniFile.Create('app.ini') нужно применять AppIni := TIniFile.Create(extractfilepath(paramstr(0))+'app.ini')) это немного увеличит скорость работы с ini файлами, так как иначе программа будет сначала искать ини-файл в системных директориях и только потом в директории программы.
4. При установленных значениях по умолчанию нет необходимости использовать блок try finaly end, что также увеличить скорость работы с ини-файлами.


---------
В будущем определено одно - неопределенность будущего!
Ответ отправил: Arvist (статус: 3-ий класс)
Ответ отправлен: 01.02.2007, 09:04

Отвечает: Bouffon
Здравствуйте, Павлов Сергей Сергеевич!
при использовании readln указатель перемещаеться на следуущую строку, так что ее ты можешь загрузить если напишешь еще раз readln (это можнро использовать в цикле). для поиска н 091;жной строки делаешь цикл от while (not (eof(s))) or (pos(a,s)<>0), s - текстовый или другой файл. потом с помощью функции pos(a,s) (поиск подстроки в строке) a - подстрока (например 'IP='), s - файл твой...
она (функция)видает число - номер подстроки в строке если она найденна или 0 если нет.. а дальше делай проверку - найдена строка или нет. вот тебе извесен номер строки (счетч ик внутри цикла) которая тебе нужна.
Ответ отправил: Bouffon (статус: 2-ой класс)
Ответ отправлен: 01.02.2007, 21:17


Вопрос № 73.598
Здравствуйте!!!
Вопрос всё таки по winapi, но всётаки я думаю эксперты должны знать.
Да и обсуждалось, наверное не раз(и не два):
Нужно чтобы приложение не отображалось на панели задач. У Фленова в книге делфи глазами хакера это делалось следующим образом:

showwindow(handle,sw_hide);
showwindow(application.handle,sw_hide);

Если создать проект делфи и написать эти строчки, то, да, работает как надо. Но приложение написано на API компаненты создаются во время выполнения. И строчка Application.hadle не нравится компилятору(он ессно не знает что это такое).
Как быть? очень надо чтобы наши юзеры не знали про приложение.
Отправлен: 01.02.2007, 09:34
Вопрос задал: Prowler (статус: 6-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Павлов Сергей Сергеевич
Здравствуйте, Prowler!
попробуй записать так

Application.Initialize;
ShowWindow(Application.Handle,SW_Hide);
Form1:=TForm1.Create(nil);
Application.Run;
У меня работает прекрассно!
Ответ отправил: Павлов Сергей Сергеевич (статус: 1-ый класс)
Ответ отправлен: 01.02.2007, 10:14
Оценка за ответ: 4
Комментарий оценки:
Читайте внимательно вопрос. У меня uses только те модули которые необходмы для создания простого виндового приложения:
windows, messages, sysutils. Такие типы как application там не опрделены. А если подключать модуль form то размер увеличиться, кхе... раз в сто - мне этого не надо.
Просто жалко плохую оценку ставить.


Вопрос № 73.629
Здравствуйте. Вопрос, скорее, по алгоритмам. Моя программа рекурсивно обходит папки на дисках и записывает имена папок и файлов в текстовый файл. Затем можно выполнить поиск файлов по имени или по части имени, имена выдаются в ListBox. Проблема в том, что, если я ввожу для поиска, допустим, "Windows", то в ListBox получаю:

C:\Windows
C:\windows\файл1
C:\windows\файл2
...

Как избежать повторений имен папок?

С уважением,
Михаил.

Приложение:

Отправлен: 01.02.2007, 13:30
Вопрос задал: Михаил73 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: PaVeL_Ekt
Здравствуйте, Михаил73!

Я бы посоветовал Вам на стадии поиска в рекурсивную функцию добавить следующий код:

writeln(f, Path);
// нацало цикла поиска файлов
writeln(f, ExtractFileName(FileName);
// конец цикла поиска

Функция ExtractFileName возвращает имя файла без пути.

теоретически при выводе тоже можно воспользоваться этой функцией

var sstr,fstr:string;
f:textfile;
begin
sstr:=edit1.Text;
if sstr='' then exit;
assignfile(f,'C:filelist.txt');
reset(f);
ListBox1.Clear;
while not eof(f) do begin
readln(f,fstr);
if fileexists(fstr) then begin// Проверяем на наличие файла
if AnsiContainsText(ExtractFileName(fstr),sstr) then
ListBox1.Items.Add(ExtractFileName(fstr));
end else begin
if dirExists(fstr) then // возможно directoryExists, точно не помню. если директория то выводим полный путь.
if AnsiContainsText(fstr,sstr) then
ListBox1.Items.Add(fstr);
end;
end;
closefile(f);


---------
Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: Студент)
Ответ отправлен: 01.02.2007, 14:47


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

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

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

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

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


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


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

В избранное