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

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


Информационный Канал Subscribe.Ru

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

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

Выпуск № 305
от 25.11.2005, 14:24

Администратор:Калашников О.А.
В рассылке:Подписчиков: 245, Экспертов: 44
В номере:Вопросов: 3, Ответов: 15


Вопрос № 29815: При запуске программы Курсор находится на Edit. Если щелкнуть на форму то все равно он мигает в Edit. Как от этого избавиться....
Вопрос № 29825: Здравствуйте уважаемые эксперты. Суть вопроса: при задании файлового атрибута faDirectory в функции FindFirst должны быть найдены все подкаталоги (или я не прав?), но почему - то выявляются не только подкаталоги но и все др. файлы лежащие в заданной ...
Вопрос № 29834: Создаю массив. Допустим на n записей. Так вот, как мне заполнить массив из n записей числами от 1 до n, где n-число значений. Например n=5, то значения должны быть не A[1]=1; A[2]=2; A[3]=3; A[4]=4; A[5]=5;, а например A[1]=5; A[2]=4; A[3]=1; A[4]=2;...

Вопрос № 29.815
При запуске программы Курсор находится на Edit. Если щелкнуть на форму то все равно он мигает в Edit. Как от этого избавиться.
Отправлен: 19.11.2005, 17:51
Вопрос задал: REFERI (статус: 4-ый класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Татьяна
Здравствуйте, REFERI!
Ну во-первых можно с помощью процедуры SetFocus устнановить при запуске курсор на другой объект, например, Button1.setfocus, либо, если у вас на форме нет других обектов, установить свойство TabStop эдита в false.
Желаю удачи!
---------
Нет ничего невозможного!!!
Ответ отправила: Татьяна (статус: 8-ой класс)
Отправлен: 19.11.2005, 19:18
Оценка за ответ: 5
Комментарий оценки:
Очень приятно слышать ответ от девушки, Причем хороший ответ! Спасибо!

Отвечает: Warrior
Здравствуйте, REFERI!
У каждого компонента есть свойство - TabOrder. Это порядок обхода по компонентам на форме (по группе) при нажатии на ТАБ. И при старте программы курсор станет на тот компонент, на котором TabOrder=0
Ответ отправил: Warrior (статус: 2-ой класс)
Отправлен: 19.11.2005, 19:32
Оценка за ответ: 5
Комментарий оценки:
Спасибо, начальный эксперт! Я ведь тоже только в 1-ом классе! Братан :)

Отвечает: Vitava
Здравствуйте, REFERI!
В компонента Edit есть свойство TabStop. Установите это свойство в False. Это свойство отвечает устанавливать или не устанавливать фокус для элемента.

Удачи Вам!
Ответ отправил: Vitava (статус: 3-ий класс)
Отправлен: 19.11.2005, 19:36
Оценка за ответ: 5
Комментарий оценки:
Дельное предложение. Спасибо!

Отвечает: Маренич Владимир
Здравствуйте, REFERI!
Нужно установить фокус на другой контрол:
1. ActiveControl := Button1
2. Button1.SetFocus
Ответ отправил: Маренич Владимир (статус: 6-ой класс)
Отправлен: 20.11.2005, 00:48

Отвечает: Schmak
Здравствуйте, REFERI!
Установите свойство Edit1.tabstop в false. Недостаток в том, что после нельзя будет получить доступ к едиту по нажатию Tab

---------
Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: 10-ый класс)
Отправлен: 20.11.2005, 10:24


Вопрос № 29.825
Здравствуйте уважаемые эксперты. Суть вопроса: при задании файлового атрибута faDirectory в функции FindFirst должны быть найдены все подкаталоги (или я не прав?), но почему - то выявляются не только подкаталоги но и все др. файлы лежащие в заданной папке (за исключением скрытых), т.е. получается что faDirectory равносилен faAnyFile и чтобы определить подкаталог ли найден все равно придется использовать конструкцию {if (SearchRec.Attr and faDirectory) = SearchRec.Attr} ?

Приложение:

Отправлен: 19.11.2005, 20:31
Вопрос задал: Teapot (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Архангельский Андрей Германович
Здравствуйте, Teapot!

В приложении код предложенный Ксавье Пачеко
Я делал по нему и все работает

Приложение:

Ответ отправил: Архангельский Андрей Германович (статус: 9-ый класс)
Отправлен: 19.11.2005, 20:40

Отвечает: REFERI
Здравствуйте, Teapot!

Надо добавить
...
f sr2.Attr=FaDirectory then
Memo2.Lines.Add(sr2.Name)
until FindNext(sr2)>0
...
Полный код смотрите в приложении.
Удачи в кодинге!

Приложение:

---------
Не судите, да не судимы будете...

Ответ отправил: REFERI (статус: 4-ый класс)
Отправлен: 19.11.2005, 22:41

Отвечает: sir henry
Здравствуйте, Teapot!
Да, как ни странно, но так оно и есть. :)
Мне, если честно, тоже непонятно, зачем так делать. Но, тем не менее, если посмотреть в хелпе на описание этого параметра, то там можно найти такую строку:
"The Attr parameter specifies the special files to include in addition to all normal files"
или по-русски говоря:
"Параметр Attr ДОБАВЛЯЕТ заданый Вами аттрибут к аттрибуту 'нормальный файл'" (т.е. не системный и не скрытый).
Можете для эксперимента вместо faDirectory поставить 0 ( т.е. без дополнительных аттрибутов) и тогда в списке Вы увидите те самые "нормальные файлы". :)
Ответ отправил: sir henry (статус: Академик)
Отправлен: 20.11.2005, 08:32
Оценка за ответ: 5
Комментарий оценки:
Спасибо за полный ответ


Вопрос № 29.834
Создаю массив. Допустим на n записей. Так вот, как мне заполнить массив из n записей числами от 1 до n, где n-число значений. Например n=5, то значения должны быть не A[1]=1; A[2]=2; A[3]=3; A[4]=4; A[5]=5;, а например A[1]=5; A[2]=4; A[3]=1; A[4]=2; A[5]=3;, тоесть в произвольном порядке. Плиз, очень надо.
Отправлен: 19.11.2005, 21:34
Вопрос задал: CJ (статус: Студент)
Всего ответов: 7
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Татьяна
Здравствуйте, CJ!
ну первое, что пришло на ум. См. приложение

Я сделала перестановки в том же цикле, хотя конечно, их можно было сделать и в отдельном

Приложение:

---------
Нет ничего невозможного!!!

Ответ отправила: Татьяна (статус: 8-ой класс)
Отправлен: 19.11.2005, 22:02
Оценка за ответ: 5
Комментарий оценки:
Если была возможность поставить 10 баллов, как у нас в белоруссии, я бы бы сделал это с нетерпением. Спасибо боьшое Танюша, вы очень мне помогли. Пусть не обижаються другие эксперты, просто я первое нашел это решение, оно 100% подошло, умно и компактно. Спасибо.

Отвечает: Warrior
Здравствуйте, CJ!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
label metka1;
var ran, i, j:integer;
ar: array of integer;
begin
Memo1.Clear;
if Edit1.Text<>'' then
begin
randomize;
SetLength(ar, StrToInt(Edit1.Text)+1); //установка размерности массива от 0 и до StrToInt(Edit1.Text)
i:=1;
repeat
ran:=random(StrToInt(Edit1.Text)+1);
for j:=1 to i do
if ar[j]=ran then goto metka1;
ar[i]:=ran;
Memo1.Lines.Add(IntToStr(i)+' '+IntToStr(ar[i]));
inc(i);
metka1:
until i=StrToInt(Edit1.Text)+1;
{Memo1.Lines.Add(IntToStr(High(ar))); //наибольшее значение в массиве
Memo1.Lines.Add(IntToStr(Low(ar))); } //наименьшее значение в массиве
end
else MessageDlg('Необходимо ввести'+#13+'начальные данные!', mtInformation, [mbOk], 0);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key<'0') or (Key>'9') then Key:=#0;
end;

end.

Ответ отправил: Warrior (статус: 2-ой класс)
Отправлен: 19.11.2005, 22:17

Отвечает: Master135
Здравствуйте, CJ!
Const n=5
A:array of integer;
i:integer;
//************************************
SetLength(A,n); //в динамических массивах нумерация начинается с нуля
randomize;
for i:=0 to Length(A) do
A[i]:=random(n); // функция генерации случайных числе с помощью системных часов
A:=nil; //освободить место занимаемое под массив А

---------
И пусть кто-то скажет что я не прав....
Ответ отправил: Master135 (статус: Студент)
Отправлен: 19.11.2005, 22:40

Отвечает: REFERI
Здравствуйте, CJ!

Нужно воспользоваться функцией random.
Random(11) будет генерировать случайные числа от 0 до 10.
Но генерируемые данной функцией числа являются псевдослучайными , и при каждом новом запуске вашего приложения будет вырабатываться одна и таже последовательность чисел . Если это недопустимо , надо рандомизировать генератор чисел, т.е. задавать ему каждый раз новое случайное исходное число. Рандомизацию осуществляет функция randomize Достаточно вставить где-нибудь в тексте программы (например, в событие OnCreate формы) оператор randomize; чтобы при каждом запуске приложения генерировалась новая последовательность чисел.
В приложении полный рабочий код консольного приложения. Сохраните с расширением .DPR и посмотрите как это работает. И как будет работать без randomize;
Удачи в кодинге!

Приложение:

---------
Не судите, да не судимы будете...

Ответ отправил: REFERI (статус: 4-ый класс)
Отправлен: 19.11.2005, 23:37

Отвечает: Маренич Владимир
Здравствуйте, CJ!
for i:=1 to n do A[i] := Random(n)+1;
Ответ отправил: Маренич Владимир (статус: 6-ой класс)
Отправлен: 20.11.2005, 00:50

Отвечает: sir henry
Здравствуйте, CJ!
Значит Вам надо использовать генератор псевдослучайных чисел - связку Randomize <-> Random(n). Если нужно чтобы числа не повторялись, тогда организуете дополнительный поиск в массиве сгенерированного числа. В принципе ничего сложного. Если не знаете как реализовать, то напишите дополнительно и я Вам черкну функцию.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 20.11.2005, 08:40

Отвечает: Schmak
Здравствуйте, CJ!
Генерировать числа можно при помощи Random(max) выводит псевдослучайное число из промежутка 0..max. Чтобы запоминать уже использованные числа можно завести ещё один массив Boolean.
Пример с объяснением смотрите в приложении.

Приложение:

---------
Не всё то Windows, что висит!

Ответ отправил: Schmak (статус: 10-ый класс)
Отправлен: 20.11.2005, 10:24


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

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

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

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

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


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


© 2001-2005, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Яндекс Rambler's Top100 hotlog_js="1.0"; hotlog_r=""+Math.random()+"&s=314124&im=101&r="+escape(document.referrer)+"&pg="+ escape(window.location.href); document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N"); hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2"; hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+ (((navigator.appName.substring(0,3)=="Mic"))? screen.colorDepth:screen.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; document.write("HotLog")

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Архив рассылки
Отписаться
Вспомнить пароль

В избранное