RusFAQ.ru: Программирование на Delphi
Информационный Канал Subscribe.Ru |
/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi
Выпуск № 318
от 08.12.2005, 17:00
Администратор: | Калашников О.А. |
В рассылке: | Подписчиков: 259, Экспертов: 47 |
В номере: | Вопросов: 9, Ответов: 38 |
Вопрос № 30642: Здравствуйте! Помогите разобраться! Я только начнающий програмист. Подскажите как можно сделать чтоб подсказка хинт появлялась не по курсором мышки а конкретно где укажу. Например если кнопка то под кнопкой гдето так: ...
Вопрос № 30644: Как вставить готовый курсор через ресурс "metronom.ani". Не прописывая пути На подобе как wav файл через *.rc procedure TForm1.FormCreate(Sender: TObject); var hh:HCURSOR; // курсор begin hh:=LoadCursorFrom...
Вопрос № 30645: По поводу вопроса о теме на диплом. Я программист. По этой то причине я собственно вас и спрашиваю, а не кого-то другого. Понятно же, что если бы я был филолог я к вам бы и не лез с такими вопросами....
Вопрос № 30659: Здраствуйте! Как глобально обьявить процедуру или функцию?! Я делал так(см. приложение) не получается. ...
Вопрос № 30665: Как соединить два и более *.wav файла в один?...
Вопрос № 30669: Здравствуйте... На данную секунду у меня два(3) вопроса... Подскажите плизз... 1.как узнать место расположения каталога ( или каталогов, если не один диск ) System Volume Information (\_restore{xxxx-xxxx-xxx-xxxx-xxxx}) В Х...
Вопрос № 30674: Здраствуйте! Все еще мучает вопрос как исользовать процедуру(сложение двух чисел) из Unit2 в модуле Unit1(где осуществляется ввод данных). Никак не пойму, вроде все правильно делаю...но никак. Подскажите, что неверно. Программу прилагается. r...
Вопрос № 30686: Здравствуйте, эксперты! У меня следующая проблема. Необходимо реализовать инструмент "Магнитное лассо" как в фотошопе. Если кто встречал, алгоритмы или способы реализации, пришлите пожалуйста ссылочку....
Вопрос № 30702: Приветствую. Необходима одна вещь: создать массив типа integer, НО!!! вот так например я объявляю массив из 5 пунктов a:array[1..5] of integer; , а мне необходимо что бы первоначально массив не ограничивался размером, например a:array[1..n] of in...
Вопрос № 30.642 |
Здравствуйте! Помогите разобраться! Я только начнающий програмист. Подскажите как можно сделать чтоб подсказка хинт появлялась не по курсором мышки а конкретно где укажу. Например если кнопка то под кнопкой гдето так: Left:= Button1.Left; Top:= Button1.Top + Button1.Height; Заранее спасибо! |
Отправлен: 02.12.2005, 17:16 Вопрос задал: Vasiliy (статус: Посетитель) Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: Zubex Здравствуйте, Vasiliy! Смотри приложение: код взят один к одному из Kuliba. Думаю разберешься... Приложение: |
Ответ отправил: Zubex (статус: 3-ий класс) Отправлен: 02.12.2005, 18:57 Оценка за ответ: 5 |
Вопрос № 30.644 |
Как вставить готовый курсор через ресурс "metronom.ani". Не прописывая пути На подобе как wav файл через *.rc procedure TForm1.FormCreate(Sender: TObject); var hh:HCURSOR; // курсор begin hh:=LoadCursorFromFile('isound.cur'); // курсор Screen.cursors[1]:=hh; // курсор Form1.cursor:=1; // курсор |
Отправлен: 02.12.2005, 18:31 Вопрос задал: Serhik_z (статус: Посетитель) Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: Zubex Здравствуйте, Serhik_z! Сделайте то же самое, только вместо hh:=LoadCursorFromFile('isound.cur'); // курсор поставьте hh:=LoadCursor(hInstance,'MY_CURSOR'); // курсор --------- Если не знаешь что сказать - лучше промолчи... |
Ответ отправил: Zubex (статус: 3-ий класс) Отправлен: 02.12.2005, 18:51 |
Отвечает: Лучников Юрий Владимирович Здравствуйте, Serhik_z! В приложении описание нужной функции ... Приложение: |
Ответ отправил: Лучников Юрий Владимирович (статус: 3-ий класс) Отправлен: 03.12.2005, 02:49 |
Вопрос № 30.645 |
По поводу вопроса о теме на диплом. Я программист. По этой то причине я собственно вас и спрашиваю, а не кого-то другого. Понятно же, что если бы я был филолог я к вам бы и не лез с такими вопросами. |
Отправлен: 02.12.2005, 18:43 Вопрос задал: AlexB (статус: Посетитель) Всего ответов: 6 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: Ataman N. N. Здравствуйте, AlexB! За вопрос о теме, извините (я шутя). А в каком ВУЗе вы учитесь? И по какой специальности? |
Ответ отправил: Ataman N. N. (статус: 3-ий класс) Отправлен: 02.12.2005, 19:01 |
Отвечает: Golden Spider Здравствуйте, AlexB! И опять вы чего-то недоговариваете :). Програмисты ведь тоже бывают разные. Если не сложно то скажите на каком факультете вы учитесь. --------- Знания ничто! Хорошие знания Всё! |
Ответ отправил: Golden Spider (статус: 3-ий класс) Отправлен: 02.12.2005, 19:19 |
Отвечает: Lector Здравствуйте, AlexB! 1. Система "конспект" - выделение смысловых предложений из текста, составленного в естественном языке 2. Написание интернет-магазина с использованием баесовского метода определения группы пользователя 3. Программа "сессия" - доступ к оезультатам сессии студента с любого компьютера, подключённого к университетской локальной сети. 4. Написание компилятора R# по спецификации сайта rsdn.ru 5. Программа, которая проспамит все гостевухи на narod.ru. 6. Блокиратор сетевых сигналов, которые исходят от компьютера с заранее заданным ip (заглушка) Программистом может быть и филолог, если захочет написатьчто-то для себя. Скажите отрасль - тогда будут и темы. --------- Хочешь помочь старику - сделай вместо него. Хочешь помочь новичку - сделай вместе с ним. Хочешь помочь мастеру - отойди и не мешай, а хочешь помочь дураку - сам дурак. |
Ответ отправил: Lector (статус: Студент) Отправлен: 02.12.2005, 19:26 |
Отвечает: Архангельский Андрей Германович Здравствуйте, AlexB! Только прошу не обижатся. Ты не программист, а прослушал курс программирования. А это как говорят в Одессе - две большие разницы. Была такая история. Приходит к Моцарту начинающий композитор и спрашивает: "Как писать симфонии?" Моцарт отвечает: "А Вам еще рано писать симфонии" Начинающий композитор говорит: "Но Вы же написали первую симфонию в 9 лет" На что Моцарт отвечает: "Я не спрашивал как писать симфонии" |
Ответ отправил: Архангельский Андрей Германович (статус: Студент) Отправлен: 02.12.2005, 19:55 |
Отвечает: sir henry Здравствуйте, AlexB! Извините, но Вы не программист, а просто посещали учебное заведение ради корочек об образовании, если у Вас даже перед самым дипломом нет собственного интереса. Извините еще раз. Единственное, что Вам здесь можно посоветовать, это обратится к Вашему дипломному руководителю, поскольку он знает Ваш уровень, и он подберет Вам подходящую тему. |
Ответ отправил: sir henry (статус: Академик) Отправлен: 03.12.2005, 06:59 |
Отвечает: Vbhjndjhtw Здравствуйте, AlexB! Я работаю в двух местах: в НПО, где пишутся программы для процесоров и в библиотеке где пишутся программы для книгоучёта и книговыдачи. Согласитесь AlexB это абсолютно разные вещи. Мы ведь незнаем экономист Вы или системотехник, инженер-строитель или агроном. P.S.Знавал я одного студента политеха написавшего на радио факультете программу "Накладная", так он счас и работает в экономической отрасли(нафига он политех заканчивал). --------- Бороться и искать, найти и перепрятать! |
Ответ отправил: Vbhjndjhtw (статус: 5-ый класс) Отправлен: 03.12.2005, 08:42 |
Вопрос № 30.659 |
Здраствуйте! Как глобально обьявить процедуру или функцию?! Я делал так(см. приложение) не получается. Приложение: |
Отправлен: 02.12.2005, 21:18 Вопрос задал: chikanok (статус: Посетитель) Всего ответов: 8 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: Jadd Здравствуйте, chikanok! Ну, во-первых, из Вашего кода не явствует, что функция unparse глобальная. А что конкретно не получается? Пришлите код. Если допустить, что объявление класса закончилось до объявления прототипа функции, то не понятно что именно не получается. --------- Если в сердце дверь закрыта, нужно в печень постучаться |
Ответ отправил: Jadd (статус: Специалист) Отправлен: 02.12.2005, 21:28 |
Отвечает: Vitava Здравствуйте, chikanok! Предлагаю вам два пути: 1. можно описать функцию в отдельном модуле и подключать этот модуль. 2. можно создать *.dll с этой функцией и загружать ее оттуда. Удачи Вам. |
Ответ отправил: Vitava (статус: 5-ый класс) Отправлен: 03.12.2005, 00:16 |
Отвечает: Denisss Здравствуйте, chikanok! 1. type В этом случае функцию можно вызывать так: Form1.UnPhase(...); 2. function UnPhase(var Source: String): TStrings; В этом случае функцию надо вызывать так: UnPhase(...); В обоих случаях необходимо, чтобы модуль, содержащий функцию был прописан в uses модуля, в котором эта функция вызывается. |
Ответ отправил: Denisss (статус: Специалист) Отправлен: 03.12.2005, 00:19 |
Отвечает: sir henry Здравствуйте, chikanok! Вы ее объявили в шаблоне класса или вне его? И что у Вас именно не получается. объясните конкретно. |
Ответ отправил: sir henry (статус: Академик) Отправлен: 03.12.2005, 06:52 |
Отвечает: Каськов Артем Игоревич Здравствуйте, chikanok! Объявляй функцию в public и тогда она будет доступна везде, где добавлен модуль в котором она описана(uses) |
Ответ отправил: Каськов Артем Игоревич (статус: 4-ый класс) Отправлен: 03.12.2005, 07:58 |
Отвечает: Vadim Vitomsky Здравствуйте, chikanok! Во-первых, если функция является методом формы, то и соответственно описание тела функции будет соответственно выглядеть TForm1.unparse(var source : String) : TStrings; var ... begin .. end; Для того, чтобы использовать эту функцию, необходимо, конечно же, подключить модуль, где она описана и вызвать соответствующий метод формы. Если же функция описана не как метод формы, то см. приложение (измененный код). Но в любом случае необходимо подключать модуль, в котором эта функция описана. Приложение: |
Ответ отправил: Vadim Vitomsky (статус: 5-ый класс) Отправлен: 03.12.2005, 10:40 |
Отвечает: Schmak Здравствуйте, chikanok! В своём описании вы пропустили самое главное Вот как должно всё выглядеть. type form1=class (Tform1) ... private function unpase (var sourse:string):Tstrings; end; function Tform1.unpase (var sourse:string):Tstrings; var begin end; Обратите внимание на то что обращатьсмя к функции надо как Tform1.unpase(..) --------- Не всё то Windows, что висит! |
Ответ отправил: Schmak (статус: Студент) Отправлен: 03.12.2005, 11:11 |
Отвечает: Golden Spider Здравствуйте, chikanok! Вы не приписали функцию unpase к классу Tform1. Смотри пример и всё получится. Приложение: |
Ответ отправил: Golden Spider (статус: 3-ий класс) Отправлен: 03.12.2005, 14:43 |
Вопрос № 30.665 |
Как соединить два и более *.wav файла в один? |
Отправлен: 02.12.2005, 22:36 Вопрос задал: REFERI (статус: Студент) Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: Vbhjndjhtw Здравствуйте, REFERI! Попробуй склеить их FAR - менеджером. P.S. И не твоё дело какой у меня ник. Сдаётся мне я догадываюсь почему Вас некоторые бойкотируют - потому как Вы сударь зануда. --------- Бороться и искать, найти и перепрятать! |
Ответ отправил: Vbhjndjhtw (статус: 5-ый класс) Отправлен: 03.12.2005, 08:46 Оценка за ответ: 1 Комментарий оценки: Ответ из пяти слов, а не по теме в 5 раз больше! Замечательно! Может еще Sound Forge-м попробовать?! Вы пришли сюда догадываться неизвестно о чем или людям помогать?! |
Вопрос № 30.669 |
Здравствуйте... На данную секунду у меня два(3) вопроса... Подскажите плизз... 1.как узнать место расположения каталога ( или каталогов, если не один диск ) System Volume Information (\_restore{xxxx-xxxx-xxx-xxxx-xxxx}) В ХР, конечно если не функцией TSearchRec... + перебором 26 букв англ алфавита.. , это где нибудь прописано в реестре...?? 2.Есть программа Unlocker которая обрывает связи файла (я так думаю, а мож ещё чего), напр для того что бы его можно было удалить, или переместить, что бы не вылазило сообщение типа "Файл используется другим пользователем или программой, приходите завтра" , хотелось бы знать как это можно сделать в Delphi..... 3.Можно ещё спросить, где можно скачать компоненты TServerSocket и TClientSocket, почему то у меня в дельфи (7) их нет, хотя в дельфи(6) были... |
Отправлен: 03.12.2005, 00:30 Вопрос задал: Wlp (статус: Посетитель) Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: Denisss Здравствуйте, Wlp! 1. [HKEY_LOCAL_MACHINESYSTEMControlSet001ControlBackupRestoreFilesNotToBackup] "System Restore" (WinXP) Только не совсем понятно зачем Вам это... Все равно Windows блокирует эти папки от доступа. 2. Для того, чтобы "убить" процесс, занимающий файл придется сильно потрудиться. В UnLocker это сделанно с помощью собственного драйвера (UnlockerDriver4.sys) 3. Зайдите в Delphi в меню "Component"-"Install Packages...", Нажмите кнопку "Add..." и выберите файл "delphi7indclsockets70.bpl" - После этого на закладке "Internet" должны появиться два нужных Вам элемента |
Ответ отправил: Denisss (статус: Специалист) Отправлен: 03.12.2005, 11:12 Оценка за ответ: 5 Комментарий оценки: Спасибо за ответ, System Volume Information, что бы их очищать, - место занимают много (со временем ), там всё нормально удаляется, кроме "change.log" а переименовывать и перемещать _restore{} я не собирался |
Вопрос № 30.674 |
Здраствуйте! Все еще мучает вопрос как исользовать процедуру(сложение двух чисел) из Unit2 в модуле Unit1(где осуществляется ввод данных). Никак не пойму, вроде все правильно делаю...но никак. Подскажите, что неверно. Программу прилагается. rogram Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas'; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure sum; private { Private declarations } public { Public declarations } end; var Form1: TForm1; x,y:extended; implementation uses Unit2; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin x:=strtofloat(Edit1.Text); y:=strtofloat(Edit2.Text); sum; Label1.Caption:=floattostr(z); end; end. unit Unit2; interface Uses Unit1; Var z:extended; implementation procedure sum; begin z:=x+y; end; end. |
Отправлен: 03.12.2005, 01:37 Вопрос задала: Артемова Марина (статус: Посетитель) Всего ответов: 8 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: REFERI Здравствуйте, Марина! В приложении я привел вам исправленный листинг. Скажу кое-что, чтобы вам проще было разобраться и понять суть своей ошибки. В Unit1 не надо объявлять переменные x,y:extended; Это надо делать в процедуре, что в модуле Unit2 dvtcnt c z - var z,x,y: extended; В модуле Unit2 не обязательно писать Uses Unit1; Т.к. Unit2 ничего из Unit1 не использует. Надо в Unit2 после interface описать заголовок вашей функции procedure sum; Для того чтобы она была видна в Unit1. А в Unit1 вообще нинадо делать никаких упоминаний о процедуре SUM. Она у вас в другом модуле описана. Надеюсь помог! Удачи! Приложение: |
Ответ отправил: REFERI (статус: Студент) Отправлен: 03.12.2005, 02:19 Оценка за ответ: 5 |
Отвечает: Каськов Артем Игоревич Здравствуйте, Артемова Марина! Так программировать на Delphi нельзя- это ж елы-палы объектно ориентированный язык программирования. Я так понимаю вы где-то учитесь, препод ваш видимо не шарит в Delphi раз принимает подобные работы, мои препода за такой подход мне бы почки отсандалили(шутка). Начинать программирование надо с изучения хорошего стиля программирования в объектно ориентированных языках. |
Ответ отправил: Каськов Артем Игоревич (статус: 4-ый класс) Отправлен: 03.12.2005, 03:38 |
Отвечает: Tsechoev Bagaudin Здравствуйте, Артемова Марина! Прежде всего то что показано в этом коде называется не просто "плохим стилем программирования", а плохим программированием. Теперь несколько советов. 1. Никогда не и спользуйте глобальные переменные, там где их можно не использовать. В данном случае их просто можно передать через саму процедуру (смотрите приложение). 2. Если вызываемая процедура должна возвращать результат - используйте функцию. 3. Не выносите в отдельный модуль, процедуры или функции то, что можно реализовать с помощью одного или двух выражений (строк кода), тем более если этот код не отвечает за какую-то отдельную, решенную Вами небольшую задачу. 4. Всегда проверяйте вводимые пользователем данные или ограничивайте их, например не позволяйте вводить текстовые данные в поля, где должны быть только числовые. 5. Всегда обрабатывайте возможные исключения, к примеру деление на ноль, попытка сложить число с текстом и т.п. Вот в общем такие простые советы, которые помогут вам изначально не приучиться к "плохому и грязному программированию", на самом деле таких советов очень много, и про это написано немало книг. Если покажется ответ грубым, то не обессудьте, я подумал, что лучше человека предупредить на ранней стадии, чем потом Вы будете себя отучивать от привычек полученных в начале пути программирования. Поверьте отучиваться намного труднее, от плохих и вредных привычек намного сложнее отучиться. В приложении код, который является условно "правильным" для данной задачи. Удачи! Приложение: |
Ответ отправил: Tsechoev Bagaudin (статус: Студент) Отправлен: 03.12.2005, 04:10 |
Отвечает: sir henry Здравствуйте, Артемова Марина! 1. Я Вам уже писал, чтобы использовать процедуру из другого модуля, Вам нужно объявить этот модуль в строке Uses, а Вы этого не сделали. Почему? Unit1; Uses Windows, Messages, ... , Unit2; 2. Не надо объявлять процедуру с таким же названием в описании класса формы, этим Вы путаете и себя и компилятор, т.к. он, по умолчанию, в процедурах и функциях формы будет подставлять именно ее, а не ту что Вам нужно из другого модуля. 3. Вместо процедуры суммирования Вам нужно сделать функцию суммирования, потому что именно функция возвращает результат своей деятельности, а не процедура. Вот смотрите: Function Summ(x, y: integer): integer; Begin Result:=x+y; End; {Основная программа} Begin Label1.Caption:=IntToStr(Summ(StrToInt(Edit1.Text), StrToInt(Edit2.Text)); End. |
Ответ отправил: sir henry (статус: Академик) Отправлен: 03.12.2005, 06:28 |
Отвечает: Vitava Здравствуйте, Артемова Марина! Вы не правильно делаете. Если вы используете для ввода Edit, то зачем объявили переменные вне класа TForm1. Объявите их в разделе public. Переменную z тоже можно объявить там же, а в функцию передавать параметры - sum(Form1.x, Form1.y). Но и это только несколько советов, а не правильное решение задачи. Удачи вам. |
Ответ отправил: Vitava (статус: 5-ый класс) Отправлен: 03.12.2005, 09:42 |
Отвечает: Vadim Vitomsky Здравствуйте, Артемова Марина! Для того, чтобы функцию sum можно было использовать в других модулях, необходимо ее описание разместить в интерфейсной части модуля, в котором она описана (см. код) Приложение: |
Ответ отправил: Vadim Vitomsky (статус: 5-ый класс) Отправлен: 03.12.2005, 10:45 |
Отвечает: Schmak Здравствуйте, Артемова Марина! Во-первых не надо объявлять процедуру Sum в 1-ом модуле. Зато во 2-оим модуле в разделе interface явно не хватает объявления этой процедуры. (Для справки в разделе interface модуля объявляются переменные и подпрограммы, которые должны быть доступны из других модулей). В остальном вроде всё правильно. В приложении пример рабочей программы. И напоследок совет: переменные x,y лучше не объявлять глобальными, а передавать их как параметры процедуре Sum. Приложение: |
Ответ отправил: Schmak (статус: Студент) Отправлен: 03.12.2005, 11:11 |
Отвечает: Golden Spider Здравствуйте, Артемова Марина! Ошибки: 1. Вы не приписали процедуру sum к Tform2 2. В данном контексте лучше использовать функцию 3. Смотри пример Приложение: |
Ответ отправил: Golden Spider (статус: 3-ий класс) Отправлен: 03.12.2005, 14:39 |
Вопрос № 30.686 |
Здравствуйте, эксперты! У меня следующая проблема. Необходимо реализовать инструмент "Магнитное лассо" как в фотошопе. Если кто встречал, алгоритмы или способы реализации, пришлите пожалуйста ссылочку. |
Отправлен: 03.12.2005, 09:53 Вопрос задал: Danik Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: Vbhjndjhtw Здравствуйте, Danik! Не очень знаком с фотошопом. Что такое "Магнитное лассо"? Как я знаю фотошоп это работа с графикой, поэтому советую Вам поизучать канвас - canvas. --------- Бороться и искать, найти и перепрятать! |
Ответ отправил: Vbhjndjhtw (статус: 5-ый класс) Отправлен: 03.12.2005, 12:17 Оценка за ответ: 1 Комментарий оценки: За канвас я вкурсе. Ответ вообще не по существу! |
Отвечает: Jadd Здравствуйте, Danik! Есть книга Фень Юаня "Программирование графики для Windows". Там, правда, на C++ примеры, но важен принцип, как реализовывать. Есть ресурсы: www.codeproject.com и www.codeguru.com. Посмотри там. От себя скажу, что при реализации такого вида инструментов используются регионы (HRGN) и массивы точек. Про регионы читай msdn.microsoft.com. В приложении программка, которая показывает отрисовку тулзы (т.е. принцип как рисовать замкнутые линии), а как резать изображения - читай про регионы. Там есть такое понятие, как регионы отсечения (Clipping Regions). В регионы можно передать массив точек, сформированный по принципу из приложения и, в итоге, резать изображения произвольной формы. Читай и экспериментируй, там ничего сложного нету. Удачи. ЗЫ: если что не ясно, пиши на xlcoder@mail.ru Приложение: |
Ответ отправил: Jadd (статус: Специалист) Отправлен: 03.12.2005, 14:17 Оценка за ответ: 5 Комментарий оценки: Спасибо больщое |
Вопрос № 30.702 |
Приветствую. Необходима одна вещь: создать массив типа integer, НО!!! вот так например я объявляю массив из 5 пунктов a:array[1..5] of integer; , а мне необходимо что бы первоначально массив не ограничивался размером, например a:array[1..n] of integer; , а потом уже в ходе выполнения присваивалось значение переменной n. Есть какие-либо предложения? |
Отправлен: 03.12.2005, 13:36 Вопрос задал: CJ (статус: Студент) Всего ответов: 9 Мини-форум вопроса >>> (сообщений: 0) |
Отвечает: Маренич Владимир Здравствуйте, CJ! Есть такое понятие как динамический массив. Объявляется так: var a: array of integer; Когда нужно установить его длину, то пользуются процедурой SetLength: SetLength(a, n); Нужно не забывать его освобождать: SetLength(a, 0); или a:=nil; Тогда память, выделенная под элементы массива освободится. Индекс массива всегда начинается с 0. Приложение: |
Ответ отправил: Маренич Владимир (статус: 9-ый класс) Отправлен: 03.12.2005, 14:02 |
Отвечает: Каськов Артем Игоревич Здравствуйте, CJ! Надо использовать динамические массивы var MyFlexibleArray: array of integer Далее в процессе работы задать его длину SetLength(MyFlexibleArray, 100); 100-кол-во элементов от 0 до 99 |
Ответ отправил: Каськов Артем Игоревич (статус: 4-ый класс) Отправлен: 03.12.2005, 14:04 |
Отвечает: sir henry Здравствуйте, CJ! Здесь может быть только одно-единственное предложение - объявлять безразмерный массив: Var a: array of integer; Begin ... {После определения верхней границы массива, задаем его размер} SetLength(a, Количество_элементов); ... End; Естественно, при таком объявлении, нижний индекс будет равен 0, как и положено по всем канонам. |
Ответ отправил: sir henry (статус: Академик) Отправлен: 03.12.2005, 14:06 |
Отвечает: Jadd Здравствуйте, CJ! К вышесказанному скажу лишь, что проверить размерность такого массива можно функцией Length(MyaArray). Она вернет количество элементов массива. --------- Если в сердце дверь закрыта, нужно в печень постучаться |
Ответ отправил: Jadd (статус: Специалист) Отправлен: 03.12.2005, 14:29 |
Отвечает: Golden Spider Здравствуйте, CJ! Попробуйте не указывать разномерность массива при инициализации. a:array of integer; Теперь у вас будет динамический массив неограниченного размера. А перед использованием очистите (от всякой гадости) столько ячеек сколько вам надо. for i:= 1 to n do a[i]:=0; --------- Знания ничто! Хорошие знания Всё! |
Ответ отправил: Golden Spider (статус: 3-ий класс) Отправлен: 03.12.2005, 14:41 |
Отвечает: Ujin Antikvar Здравствуйте, CJ! Создайте динамический массив a: array of integer; Функцией SetLength(a, n); устанавливаете длину массива и в конце этой же функцией вы должны обнулить длину массива SetLength(a, 0); --------- "Будущее принадлежит тем, кто верен своей мечте" - Элеонора Рузвельт |
Ответ отправил: Ujin Antikvar (статус: 4-ый класс) Отправлен: 03.12.2005, 16:14 |
Отвечает: Schmak Здравствуйте, CJ! Динамические массивы вот что Вам надо. Объявляются они пости также как и обычные, просто не указываются границы массивов, при этом нумерация элементов начинается с 0: a:array of integer; возможны и многомерные динамические массивы. Например: array of array of array [1..5] of integer; Для того чтобы выделить установить длину массива используется процедура SetLength(a:array;count:integer); Например Setlength(a,5) устанавливает размер массива в 5, при этом будут доступны элементы 0..4 Но не стоит злоупотреблять динамическими массивами, так как работа с ними медленне чем с обыкновенными, особенно при постоянном изменении размера. Размер массива лучше увеличивать не на 1 а сразу в 1,5-2 раза. --------- Не всё то Windows, что висит! |
Ответ отправил: Schmak (статус: Студент) Отправлен: 03.12.2005, 18:51 |
Отвечает: Ерёмин Андрей Здравствуйте, CJ! Конечно! Динамические массивы! Вот пример: var myarr: array of integer; n,i: integer; ... n:=7; SetLength(myarr,n); for i:=1 to n do myarr[i]:=sqr(i); --------- Где найти кpяк под ковpик для однокнопочного мыша? |
Ответ отправил: Ерёмин Андрей (статус: Специалист) Отправлен: 03.12.2005, 22:33 |
Отвечает: Vadim Vitomsky Здравствуйте, CJ! Для этого необходимо использовать динамические массивы, которые появились в Delphi 4. ----------------------- var a: array of integer; ----------------------- Основные функции для работы с динамическим массивом: SetLength - устанавливает новый размер массива. Length - возвращает количество элементов в массиве. Low - индекс первого элемента в массиве (всегда 0 для динамических массивов). High - индекс последнего элемента в массиве. Copy - возвращает подмножество элементов массива. Slice - используется при передаче динамического массива в процедуры в качестве открытого массива (open arrays). |
Ответ отправил: Vadim Vitomsky (статус: 5-ый класс) Отправлен: 05.12.2005, 10:00 |
© 2001-2005, Портал RusFAQ.ru, Россия, Москва. Идея, дизайн, программирование: Калашников О.А. Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31 Авторские права | Реклама на портале |
|
Subscribe.Ru
Поддержка подписчиков Другие рассылки этой тематики Другие рассылки этого автора |
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus Архив рассылки |
Отписаться
Вспомнить пароль |
В избранное | ||