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

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


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

РАССЫЛКИ ПОРТАЛА RUSFAQ.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
  TForm1 = class(TForm)
...
  public
    function
UnPhase(var Source: String): TStrings;
...
  end;
...
implementation
...
function UnPhase(var Source: String): TStrings;
begin
...
end;


В этом случае функцию можно вызывать так: Form1.UnPhase(...);

2.
function UnPhase(var Source: String): TStrings;
...
implementation
...
function UnPhase(var Source: String): TStrings;
begin
...
end;


В этом случае функцию надо вызывать так: 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.

Приложение:

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

Ответ отправил: 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


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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
Архив рассылки
Отписаться
Вспомнить пароль

В избранное