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

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


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

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

Выпуск № 698
от 02.01.2007, 15:35

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


Вопрос № 68826: Проффесилналы, кто нибудь знает как работать с файловой системы NTFS. Нужно давать разрешения группе пользователей Everyone читать и писать в определенную (не системную) директорию и ее поддиректории....
Вопрос № 68838: Здравствуйте уважаемые!У меня вроде банальный вопрос,но что то в хелпе я его не нашёл.Допустим если у меня динамический массив SetLength(Mas,x); и мне надо циклом пройтись по числу элементов в массиве я пишу for i:=0 to Length(Mas)-1 do begin....end;...
Вопрос № 68852: Здравствуйте уважаемые эксперты и пользователи. Поздравляю всех с наступающим Новым годом. Желаю Вам в новом году счастья, здоровья, удачи и благополучия. Может у кого-то из Вас есть пример написание индикатора уровня сигнала с входов звуков...

Вопрос № 68.826
Проффесилналы, кто нибудь знает как работать с файловой системы NTFS. Нужно давать разрешения группе пользователей Everyone читать и писать в определенную (не системную) директорию и ее поддиректории.
Отправлен: 27.12.2006, 16:16
Вопрос задал: Костенко Игорь Викторович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Gh0stik
Здравствуйте, Костенко Игорь Викторович!

Советую Вам воспользоваться командой cacls.

А запускать энту самую команду мы будем старым добрым ShellExecute().

В приложении смотрите пример использования....

Немного поясню:
в переменной pth - храним путь к нужной папке,
в переменной user - имя пользователя или группы..

Будут вопросы обращайтесь!!!

Да и напоследок маленькая справка по команде cacls:

Просмотр и изменение таблиц управления доступом (ACL) к файлам
CACLS имяФайла [/T] [/E] [/C] [/G имя:доступ] [/R имя [...]]
[/P имя:доступ [...]] [/D имя [...]]

имяФайла Вывод таблиц управления доступом.

/T Замена таблиц управления доступом для указанных файлов
в текущем каталоге и всех подкаталогах.
/E Изменение таблицы управления доступом вместо ее замены.
/C Продолжение при ошибках отказа в доступе.
/G имя:доступ Определение разрешений для указанных пользователей.
"доступ": R Чтение
W Запись
C Изменение (запись)
F Полный доступ
/R имя Отзыв разрешений для пользователя (только вместе с /E).
/P имя:доступ Замена разрешений для указанного пользователя.
"доступ": N Отсутствует
R Чтение
W Запись
C Изменение (запись)
F Полный доступ
/D имя Запрет на доступ для указанного пользователя.
Для выбора нескольких файлов используются подстановочные знаки.

В команде можно указать несколько пользователей.

Сокращения:
CI - Наследование контейнерами (Container Inherit).
ACE будет унаследован папками.
OI - Наследование объектами (Object Inherit).
ACE будет унаследован файлами.
IO - Только наследованное (Inherit Only).
ACE не будет применим к текущему файлу/папке.


Good Luck!!!

Приложение:

---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.

Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 28.12.2006, 17:44


Вопрос № 68.838
Здравствуйте уважаемые!У меня вроде банальный вопрос,но что то в хелпе я его не нашёл.Допустим если у меня динамический массив SetLength(Mas,x); и мне надо циклом пройтись по числу элементов в массиве я пишу for i:=0 to Length(Mas)-1 do begin....end; ,а если массив двумерный SetLength(Mas,x,y); как пройтись циклами по нему.
И второй вопрос как удалить в процессе работы любой элемент динамического массива.
Отправлен: 27.12.2006, 18:32
Вопрос задал: Delphi-n (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Юрий Викторович
Здравствуйте, Delphi-n!
Как вариант цикл в цикле
SetLength(mas,x,y);
for i:=0 to x-1 do
for j:=0 to y-1 do
begin
....
end;
Ответ отправил: Юрий Викторович (статус: 1-ый класс)
Ответ отправлен: 27.12.2006, 19:08

Отвечает: Melamed
Здравствуйте, Delphi-n!
Я не уверен, что в Дельфи поддерживаются многомерные динамические массивы. Но если это так, то я воспользовалься функциями Low и High. Смотрите приложение.
А вообще то, мой совет вам, пересмотреть Ваш алгоритм и постораться избавиться от многомерных динамических массивов

Приложение:

Ответ отправил: Melamed (статус: 8-ой класс)
Ответ отправлен: 27.12.2006, 19:10

Отвечает: KiberZero
Здравствуйте, Delphi-n!

Динамические массивы тоже могут быть многомерными. Чтобы определить такой
массив, добавьте дополнительное описание array of для каждой дополнительной
размерности:
var
// Двумерный динамический массив целых чисел:
IA: array of array of Integer;
При выделении памяти для многомерного динамического массива функции
SetLength() следует передать дополнительный параметр:
begin
// IA будет массивом целых чисел размерностью 5 x 5
SetLength(IA, 5, 5);
Обращение к элементам многомерного динамического массива ничем не отлича
ется от обращения к элементам обычного массива:
IA[0,3] := 28;

В многомерных динамичнских массивах каждый элемент любого из n-1 измерений(n-количество измерений) представляет собой динамический массив и,следовательно нуждается в инициализации. Циклы в многомерных массивах используются так же, как и в одномерных.

Например,для трёхмерного массива код будет выглядеть так:

var
A:array of array of array of integer;
i,j:integer;
begin
SetLength(A,3);
for i:=0 to 2 do
begin
SetLength(A[i],3);
for j:=0 to 2 do
SetLength(A[i,j],3);
end;
и т.д.
end;
end.

Что же касается удаления,используется та же функция,что и для одномерных массивов Delete(var S: string; Index, Count: Integer).

Всё выше сказанное можно объединить:

Объявление
--------------------------------------------------------------------------------
Var

VarArray: array of array of array............
Установка длин
--------------------------------------------------------------------------------
SetLength (VarArray, Razmernost1); // У первого измерения

SetLength (VarArray[1], Razmernost2); // У второго измерения первой "строки"
SetLength (VarArray[2], Razmernost3); // У второго измерения второй "строки"
SetLength (VarArray[n], Razmernost4); // У второго измерения n-ной "строки"

SetLength (VarArray[1][1], Razmernost5); // У третьего измерения первой "строки" первого "столбца"
SetLength (VarArray[1][2], Razmernost6); // У третьего измерения первой "строки" второго "столбца"
SetLength (VarArray[n][m], Razmernost7); // У третьего измерения n-ной "строки" m-ного "столбца"

т.д.
Все можно изменять в процессе естественно.
Получение длин
--------------------------------------------------------------------------------
Razmernost1:=Length (VarArray); // У первого измерения (количество строк)

Razmernost2:=Length (VarArray[1]); // У второго измерения первой "строки" (количество столбцов)
Razmernost3:=Length (VarArray[2]); // У второго измерения второй "строки" (количество столбцов)
Razmernost4:=Length (VarArray[n]); // У второго измерения n-ной "строки" (количество столбцов)

Razmernost5:=Length (VarArray[1][1]); // У третьего измерения первой "строки" первого "столбца"
Razmernost6:=Length (VarArray[1][2]); // У третьего измерения первой "строки" второго "столбца"
Razmernost7:=Length (VarArray[n][m]); // У третьего измерения n-ной "строки" m-ного "столбца"
Обращение
VarArray[n][m][o][p][r]:=1; // :Integer // К элементу n-ной "строки",
m-ного "столбца",
// o-того "?",
p-того "?", r-того "?"
Обнуление (освобождение памяти)
--------------------------------------------------------------------------------
SetLength (VarArray, 0); // Всех сразу

Однако,хочу заметить,что не рекомендуется использовать параметры массива для функции SetLength более трёх.

Смотрите ещё один пример в приложении.

Удачи!

Приложение:

Ответ отправил: KiberZero (статус: 7-ой класс)
Ответ отправлен: 28.12.2006, 00:57

Отвечает: Sattar
Здравствуйте, Delphi-n!
Код в приложении.Думаю коментрариев не надо.

Приложение:

Ответ отправил: Sattar (статус: 3-ий класс)
Ответ отправлен: 31.12.2006, 15:27


Вопрос № 68.852
Здравствуйте уважаемые эксперты и пользователи. Поздравляю всех с наступающим Новым годом. Желаю Вам в новом году счастья, здоровья, удачи и благополучия.

Может у кого-то из Вас есть пример написание индикатора уровня сигнала с входов звуковой карты. В общем дуем в микрофон, а он «подпрыгивает».
Отправлен: 27.12.2006, 21:22
Вопрос задал: source (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: KiberZero
Здравствуйте, source!

Зачем что-то мудрить,если есть готовые компоненты.
Вот ссылки на два из них:

http://www.alcatech.de/download/mmtools/mmtool7.exe

http://www.un4seen.co.uk/files/bass20.zip

Удачи!
Ответ отправил: KiberZero (статус: 7-ой класс)
Ответ отправлен: 28.12.2006, 01: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.38 от 20.12.2006
Яндекс Rambler's Top100

В избранное