Вопрос № 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!
В приложении код предложенный Ксавье Пачеко
Я делал по нему и все работает
Надо добавить
...
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% подошло, умно и компактно. Спасибо.
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