Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Интернет: Образование, Работа и Бизнес" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Ноябрь 2005 → | ||||||
1
|
2
|
3
|
4
|
6
|
||
---|---|---|---|---|---|---|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
|
28
|
29
|
30
|
Статистика
-1 за неделю
Программирование на Delphi (выпуск 35)
Информационный Канал Subscribe.Ru |
Программирование на DELPHI |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Выпуск #35 (05 ноября 2005 г.) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Статусы экспертов и их возможности:
Примечание: Под форматированием текста понимается возможность оформлять ответы с использованием html-тегов. Если Вы хотите, чтобы Вашего имени (ника) не было в данной таблице, отправьте письмо по этой ссылке с зарегистрированного у нас адреса. В теле письма, пожалуйста, укажите причину удаления имени из таблицы. Нам важно ваше мнение. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Вопрос #180 (автор вопроса: wvw; вопрос отправлен: 23.10.2005 19:04): Подскажите пожалуйста! Работаю с реестром - необходимо создать программно двоичный параметр со значением 0A ff и пожалуйста пример кода. Заранее благодарен. [Ответить на вопрос] Вопрос #181 (автор вопроса: pena; вопрос отправлен: 24.10.2005 14:52): Как взять из Word картинку и вставить в мою базу данных? [Ответить на вопрос] Вопрос #182 (автор вопроса: l.yz; вопрос отправлен: 25.10.2005 16:10): Как сделать так, чтобы прога автоматически загружалась при включении компа? [Ответить на вопрос] Вопрос #183 (автор вопроса: Vitek; вопрос отправлен: 26.10.2005 21:13): Подскажите пожалуйста, как осуществить Drag&Drop файлов (и папок) в
TShellListView-ах между собой и извне (и наоборот, куда-то в папку). Вопрос #184 (автор вопроса: Ершов Денис; вопрос отправлен: 27.10.2005 14:48): Delphi 7. Использую ListView в режиме vsReport для отображения статистики. Необходимо организовать слежение за добавленными записями. Проблему решил скроллингом компонента на всю длину записей - методом Scroll, однако этот метод не имеет действия при запуске программы (ни в OnCreate, ни в OnShow) от него пользы нет. Как обеспечить скроллинг компонента при запуске? Есть что-нибудь изящнее, чем скроллировать по таймеру? [Ответить на вопрос] Вопрос #185 (автор вопроса: Ершов Денис; вопрос отправлен: 28.10.2005 13:27): В настройках Windows есть такая предательская настройка, как размер системного шрифта. В результате, если этот параметр у разработчика и пользователя имеет разное значение, это плачевно сказывается на внешнем виде формы. В одних случаях контролы наплывают друг на друга и уходят за край формы, что чревато ее скроллингом, в других - появляется много свободного места. Есть успешные решения данной проблемы? [Ответить на вопрос] Вопрос #186 (автор вопроса: Владимир Петрухин; вопрос отправлен: 28.10.2005 20:39): Здравствуйте! Пишу первую в жизни DLL. В ней функция заполняющая динамический массив случайными числами. В uses прописал ShareMem. Проблема - Не получается передать этот массив, точнее, указатель в программу. Объявление function masss(n:integer):array of integer; не проходит. подскажите что делать? Если можно с примером. [Ответить на вопрос] Вопрос #187 (автор вопроса: mk; вопрос отправлен: 31.10.2005 22:30): Кто знает методы, свойства и события компонента ShellListView на вкладке Samples и их описания подскажите пожалуйста. [Ответить на вопрос] Вопрос #188 (автор вопроса: Vitaly; вопрос отправлен: 02.11.2005 08:10): Помогите написать программу, которая подсчитывает трафик в ЛВС? Или подскажите как? Исходные данные: целью этого проекта является разработка программы для одного уникального узла, который не участвует в сетевых операциях, а контролирует и анализирует все кадры, передаваемые в сетевой среде. [Ответить на вопрос] Вопрос #189 (автор вопроса: dmn; вопрос отправлен: 02.11.2005 09:21): Как программно перехватить имя файла, если запускаешь его в меню "Открыть с помощью", или задать ассоциацию так, чтобы файл при двойном щелчке открывался именно твоей программой? [Ответить на вопрос]
Вопрос #90 (автор вопроса: Nanny_Jagg; вопрос отправлен: 17.03.2005 07:56): Как в DBGrid из библиотеки Ehlib 3.6 добавить Lookup-поле, чтобы оно действительно работало? Поле вроде сделано, но ключевое поле, оставленное рядом для контрола не меняется, по какому событию обработчик писать? [Ответить на вопрос] Вопрос #176 (автор вопроса: Тимур; вопрос отправлен: 12.10.2005 13:58): Нужно программно узнать температуру процессора. Мать Abit NF7-S (или любая другая) с микросхемой мониторинга Winbond W83627HF. [Ответить на вопрос]
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Вопрос #88: 1. [Отвечает: Матвеев И.В,, 24.10.2005 13:39]: Толком не понял, что значит "Как осуществить привязку указателя мыши к линии LineSeries?", возможно вам стоит переформулировать вопрос. По-поводу второго вопроса, в TSeries.XValues хранятся все X значения по оси X. Если у Вас стоит задача найти Y значение для времени, когда снимались показания, т.е. в серию была добавлена точка, Вам нужно просто произвести поиск по значениям TSeries.XValues, и взять результат из TSeries.YValues. Если же вам необходимо узнать Y значение для времени в общем случае, вам необходимо найти в TSeries.XValues ближайшие значения к искомому времени. Смотрите прикрепленный рисунок. Загрузить прикреплённый файл >> Файл пока недоступен, подробности в начале выпуска (прим. ред.) Оценка за ответ: 5.
Вопрос #149: 3. [Отвечает: Матвеев И.В., 24.10.2005 15:49]: Проследил RegMon'ом и нашел ключ HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg. Он содержит параметры электропитания компьютера, а в подключе PowerPolicies хранятся готовые схемы с описанием, это можно использовать для того, чтобы выяснить в каком формате хранится параметры электропитания. По-видимому в подключе GlobalPowerPolicy в Policies (тип REG_BINARY) хранятся все параметры электропитания. Вам остается только выяснить, где там время отключения монитора. Оценка за ответ: 5. Вопрос #169: 1. [Отвечает: Сергей,
23.10.2005 02:15]: Прямого ответа на Ваш вопрос я не знаю, но может эта
функция поможет Вам. Функция копирует файл FileName в файл FileNew, процесс
копирования показывается на ProgressBar. Оценка за ответ: 5. 2. [Отвечает: Садовников Владимир, 23.10.2005 22:22]: На мой взгляд, проще написать процедуру копирования файлов (а лучше даже оформить это в виде отдельной нити), и в ней менять значение прогресса. Например: unit CopyThread; interface uses Classes, ComCtrls, Windows, SysUtils; type TCopyThread = class(TThread) public constructor Create(FromF,ToF:string;Progr:TProgressBar); private { Private declarations } FProgr:TProgressBar; FA,FB:string; FFileSize:Integer; FCopied:Integer; procedure UpdateProgress; procedure SetupProgress; protected procedure Execute; override; end; implementation constructor TCopyThread.Create(FromF, ToF: string; Progr: TProgressBar); begin inherited Create(true); FProgr:=Progr; FA:=FromF; FB:=ToF; FCopied:=0; FFileSize:=0; Resume(); end; procedure TCopyThread.Execute; var A,B:THandle; MaxCopy:Integer; Hight:DWORD; Buffer:array of Integer; begin { Place thread code here } if (FileExists(FA)) then begin A:=FileOpen(FA,fmOpenRead); if (A<>0) then begin FFileSize:=GetFileSize(A,@Hight); Synchronize(SetupProgress); B:=FileCreate(FB); SetLength(Buffer,32768); if (B<>0) then begin while (FCopied<FFileSize) do begin MaxCopy:=(FFileSize-FCopied); if (MaxCopy>32768) then MaxCopy:=32768; FileRead(A,Buffer[0],MaxCopy); FileWrite(B,Buffer[0],MaxCopy); FCopied:=FCopied+MaxCopy; Synchronize(UpdateProgress); end; end; Buffer:=nil; end; end; end; procedure TCopyThread.SetupProgress; begin FProgr.Max:=FFileSize; end; procedure TCopyThread.UpdateProgress; begin FProgr.Position:=FCopied; end; end. Оценка за ответ: 5. 3. [Отвечает: Маренич Владимир, 24.10.2005 11:57]: CopyFile - Windows API функция, а ProgressBar - это компонент Delphi. Их связать никак нельзя. Если хотите показывать прогресс копирования, то нужно его реализовать самому: создаете два потока - один для чтения, второй для записи. Читаете кусками, например, по 32 кб и записываете во второй поток, показываете в ProgressBar'е. И так до конца файла. Оценка за ответ: 4. 4. [Отвечает: Dron, 24.10.2005 14:32]: Процедура CopyFile - системная процедура и контроллировать процесс её выполнения нельзя. В данном случае самым разумным способом будет использовать функции BlockRead и BlockWrite, т.е. чтение и запись файла фрагментами. Пример использования прикрепляю к ответу. Загрузить прикреплённый файл >> Файл пока недоступен, подробности в начале выпуска (прим. ред.) Оценка за ответ: 5. 5. [Отвечает: Матвеев И.В., 24.10.2005 15:49]: Вам необходимо реализовать свой CopyFile. Интерфейс может быть такой: type function XCopyFile(Source, Dest: string; ProgressProc: TProgressProc): Boolean; Функция XCopyFile копирует файл кусками определенного размера, возвращая управление в ProgressProc после копирования, скажем каждых 5 процентов. Оценка за ответ: 3. 6. [Отвечает: Антон Трапезников, 25.10.2005 17:21]: К CopyFile привязать Progressbar можно только при условии копирования файлов, размер которых, примерно, одинаков (увеличивать Progressbar после копирования очередного файла). Хотя, может, я чего-то не знаю... Проще использовать копирование методом файловых потоков. Например, увеличивать значение ProgressBar'а после копирование очередного блока: Протестировал все на D6. На форме две кнопки и ProgressBar. Button1 - копирование; Button2 - отмена. var CancelOperation:Boolean; // Глобальное объявление .......................... procedure TForm1.Button1Click(Sender: TObject); const begin TargetStream.CopyFrom(SourceStream,CopySize); Application.ProcessMESSAGES; end; Я тут подумал и хочу еще добавить, что в примере, который я послал выше, самое "узкое" место это скорость. Поэтому, все-таки лучше не использовать Aplication.ProcessMessages, а вставить код в отдельный поток и задать для него нужный приоритет. Еще один "потребитель" ресурсов, это сам ProgressBar, и если делать что-то вроде ProgressBar.Max:=SourceStream.Size, то эта инструкция может тормозить обработку файла. Может быть, стоит установить Progressbar.Max на любое число (например 100), и узнавать сколько процентов от общего размера файлов уже обработано. Короче, имеется большая почва для экспериментов... И напоследок, если скорость действительно важна, то стоит это все описать в .dll (на ассемблере), которую вызывать в отдельном потоке. Удачи! Оценка за ответ: 5. 7. [Отвечает: mvp, 27.10.2005 02:01]: Связать с copyFile не получится, можно использовать CopyFileEx или ReadBlock/WriteBlock или TStream. Пример взят с http://forum.sources.ru/index.php?showtopic=79211 c функцией CopyFileEx. Я только перевёл комментарии и совсем чуточку изменил входной параметр. Function CopyCallBack( TotalFileSize: LARGE_INTEGER; // Размер файла в байтах TotalBytesTransferred: LARGE_INTEGER; // Количество скопированных байт StreamSize: LARGE_INTEGER; // Размер буфера копирования StreamBytesTransferred: LARGE_INTEGER; // Количество байт в буфере dwStreamNumber: DWord; // номер буфера dwCallbackReason: DWord; // ?Reason for the call back. hSourceFile: THandle; // Хендл исходного файла hDestinationFile: THandle; // Хендл записываемого файла ProgressBar : TProgressBar // Параметр передаётся
при вызове ): DWord; far; stdcall; var EnCours: Int64; begin //Высчитываем позицию progressBar в процентах.
Используется тип Int64 во EnCours := TotalBytesTransferred.QuadPart*100 div
if ProgressBar<>Nil then ProgressBar.Position := EnCours; //Этот коллбэк должен определить, будет ли
продолжена копирование. В Result := PROGRESS_CONTINUE; Application.ProcessMessages; // Даём приложению
обработать end; Function FileCopy(Const SourceFn, TargetFn : String;
Bar : TProgressBar = Boolean; Var I : Integer; Retour: LongBool; begin Result:=True; // Результат по умолчанию - файл скопирован If (Win32Platform = Ver_Platform_Win32_NT) and (Bar <> nil) then begin { CopyFileEx работает только на WinNT, 2000 or XP } Bar.Visible:=True; // Показывать progressbar только
во время Retour := False; // ?NB CopyFileEx only works on WinNT,2k or XP.} if not CopyFileEx( PChar(SourceFn), // Исходный файл PChar(TargetFn), // Куда копировать @CopyCallBack, // Адрес коллбэка Bar, // ProgressBar, который будет показывать
состояние @Retour, // ?Address of Boolean tested to stop the copy // ?Don't specify "can be restarted" or
"only if then Result:=False; end else begin ---код, если нет progressBar. Можно тогда и обычный FileCopy применить--- end; end; Оценка за ответ: 5. 8. [Отвечает: dasha
ermakova, 30.10.2005 23:45]: procedure
TForm1.Button1Click(Sender: TObject); begin if RO = true then Оценка за ответ: 5. Вопрос #170: 1. [Отвечает: Антон Трапезников, 25.10.2005 09:35]: Здравствуйте, SHKoder! procedure TForm1.Button1Click(Sender:
TObject); Надеюсь, что помог. Удачи! Оценка за ответ: 5. Вопрос #171: 1. [Отвечает: VeroLom, 24.10.2005 01:25]: Самое простое - брать первые N (длина искомого) символов и сравнивать и искомой строкой. Если не подходит - перемещаться на 1 символ. Оценка за ответ: 3. 2. [Отвечает: Лучников А.И., 24.10.2005 14:41]: Не совсем ясны вопросы... 1. В мемо можно пользовать TMemo.Items - аналог (почти) TStringList. Вырезать значения (и манипулировать ими) можно как из Strings[n], так и из свойства Text. 2. Простое решение (но глупое) - перебор значений, второй вариант - сделать копию в (опять же) TStringList (временном), и искать по циклу функцией pos в свойстве Text, удаляя всё до найденного вхождения (или включая его). Копию можно сделать так: ListFile:=TStringList.Create; Далее - по контексту задачи. PS. Не забыть сделать ListFile.Free; CopyListFileFree; Оценка за ответ: 5. 3. [Отвечает: dasha ermakova, 24.10.2005 11:57]: 1) Не пойму в чем проблема. Если в том, чтобы порезать на куски нужного размера, то нужно поставить, например, специальные символы, по которым определять размер кусков, или по длине строки копировать. А для занесения данных в существующую таблицу пишем, например: Table1.Append; 2) Для этого есть функция: PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer; Offset - номер символа, с которого нужно начать поиск, по умолчанию первый. Оценка за ответ: 4. Вопрос #172: 1. [Отвечает: Матвеев И.В., 25.10.2005 02:41]: Я тоже искал ответ на этот вопрос, поскольку иногда нужно что-то удалить, но это что-то чем-то используется. Я нашел Process Explorer (www.sysinternals.com) - он умеет это делать. Если же Вам нужно реализовать это в своей программе, Вы должны исходить из того, что открытые и используемые кем-то папки/файлы имеют ручку THandle, полученную от CreateFileA/CreateFileW, которую, по-видимому, и следует искать. Извиняюсь, что далее пишу сырую информацию, быть может до выхода рассылки я решу эту проблему и автор исправит этот вариант. Отладчиком я выяснил, что Process Explorer использует функцию GetTokenInformation, в 7-ом аргументе передается указатель на проверяемую строку. Оценка за ответ: 4. Вопрос #173: 1. [Отвечает: Садовников Владимир, 23.10.2005 22:35]: Ну ты дал! Когда грузишь в/из файла, то обращай внимание на размеры операндов: WideString - не string, и состоит он из элементов WideChar, а не Char, а, как известно, в Win32 SizeOf(WideChar)=2<>SizeOf(Char)=1. Таким образом, в файл ты сливаешь только половину строки, а не всю: надо Length(WideString) на SizeOf(WideChar) умножать при записи. Вот, исправил: var
Stream:=TFileStream.Create('E:\test.txt',fmCreate); 2. [Отвечает: Ершов Денис, 27.10.2005 15:28]: По коду сразу видно ошибку. Функции Length и SetLength работают не с количеством байт, а с количеством символов WideChar, которые занимают 2 байта, в то время как стандартные потоки оперируют байтами. Поэтому нужно умножать на два количество данных при работе с потоком: Stream.Write(PWideChar(URL)^, 2 * Size); и Stream.Read(PWideChar(URL)^, 2 * Size); Однако при начальном коде мусор должен появляться лишь во второй половине строки (т.е. 'West*****'). Отсюда возникает вопрос: Правильно ли установлен Position потока? Возможно он установлен не в то же место, откуда начиналась запись. Оценка за ответ: 5. 3. [Отвечает: Igor, 27.10.2005 19:02]: Может быть я Вас неправильно понял, но URL у Вас - ЛОКАЛЬНАЯ переменная! Ведь load и save - это процедуры? Да Вы хоть какой тип переменной объявите (не обязательно WideString) - она будет принимать какие угодно значения, но только не те, которые необходимы... Выход?.. Объявите переменную URL как глобальную... Кстати, сам не раз пролетал из-за такой досадной ошибки! P.S. Ещё раз извиняюсь, если неправильно понял вопрос. Оценка за ответ: 4. Вопрос #174: 1. [Отвечает: Матвеев И.В., 24.10.2005 14:25]: Так как Вы думаете - никак. Выход я вижу в использовании собственного потомка от TSpeedButton, но такая кнопка не будет иметь фокуса. Если же вам важно, чтобы это был именно WinControl - Вы можете использовать сообщение CN_DRAWITEM. В любом случае пройдется писать свой компонент и рисовать текст вертикально вручную. Привожу пример, с которого вам стоит начать во-втором случае - это цветная кнопка. Измените обработчик TColorBtn.CNDrawItem под себя и получите то, что хотели. unit colorbtn; interface uses Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, type TColorBtn = class(TButton) procedure Register; implementation { TColorBtn } constructor TColorBtn.Create(AOwner: TComponent); destructor TColorBtn.Destroy; procedure TColorBtn.CreateParams(var Params:
TCreateParams); procedure TColorBtn.Set3DFrame(Value: boolean); procedure TColorBtn.SetButtonColor(Value:
TColor); procedure TColorBtn.WMLButtonDblClk(var Message:
TWMLButtonDblClk); procedure TColorBtn.SetButtonStyle(ADefault:
Boolean); procedure TColorBtn.CNDrawItem(var Message:
TWMDrawItem); procedure TColorBtn.CalcuateTextPosition(const
Caption: string; var TRC: TRect; procedure TColorBtn.DrawButtonText(const Caption:
string; TRC: TRect; State: procedure Register; end. Оценка за ответ: 5.2. [Отвечает: sattar, 24.10.2005 21:46: Bitbtn1.Caption:='Delphi'#13'C++'#13'Python'; Оценка за ответ: 3. 3. [Отвечает: dasha ermakova, 30.10.2005 01:08]: Поставь WordWrap = true. Потом пишешь букву, после нее ставишь пробелы, пока курсор не перейдет на новую строку, и так каждый символ. Оценка за ответ: 4. Вопрос #175: 1. [Отвечает: Садовников Владимир, 23.10.2005 22:43]: Начни со следующего: var А дальше всё по старинке: читаешь из файла, пишешь в файл, читаешь, пишешь и т.д. Оценка за ответ: 3.Вопрос #177: 1. [Отвечает: Антон Трапезников, 25.10.2005 10:34]: Здравствуйте, PWL. Мне кажется, что Вам нужно написать БД с blob-полем, В котором вы будете сохранять ваши jpeg-и. Например, Uses jpeg Базу данных будет намного проще сопровождать и обслуживать. Переносимость у БД намного выше, чем у Вашего метода, к тому же, нет никаких проблем с такими аспектами как добавление новых данных/защита/целостность и т.д. (в Вашем варианте за это отвечаете Вы, а в случае с БД – технология доступа к данным, например, BDE). Удачи! Оценка за ответ: 5. 2. [Отвечает: mvp, 27.10.2005 02:32]: Можно и в форме DLL. Если обеспечить некоторую универсальность, то программа будет опладать эдаким свойством плагиновости. Т. е. без перекомпиляции кода, добавлением одной лишь DLL программа её узнаёт и работает. Идея такова - найти все dll в нужном каталоге. У каждой Вашей DLL должна быть функция, например, getInfo, которая возвращает описание dll, например в текстовом виде. Ещё она должна имень функции, которые возвращают нужную Вам информации. Для ещё более универсальности, их имена тоже могут быть переданы в getInfo. Я делаю так: handles : array of integer; var В DLL функция выглядит примерно так: function GetProduct:String; stdcall; Можно конечно и с БД, но лично я выбрал бы этот вариант, т. к. являюсь противником всех этих глючных БД, а кроме того ещё мало ли какие файлы (компоненты для работы с БД) нужно будет с БД таскать, чтобы запустить на другой машине Оценка за ответ: 5. 3. [Отвечает: dasha
ermakova, 30.10.2005 01:11]: Все эти данные можно хранить в одной
таблице. Просто нужно установить нужный тип поля. Например, для картинок
ftGraphic, для текста ftString. А потом отображать их с помощью компонентов из
Data Controls. Table1.Edit; Оценка за ответ: 5. Вопрос #178: 1. [Отвечает: halk2, 23.10.2005 20:58]: Пример из справки: procedure TForm1.Button1Click(Sender: TObject); Примечание: Для работы необходимо подключить модуль - ClipBrd. Оценка за ответ: 5. 2. [Отвечает: Матвеев
И.В,, 24.10.2005 13:39]: Я не знаю, что вы имеете ввиду под
словами: Image1.Picture.Bitmap.LoadFromClipboardFormat(CF_BITMAP, ClipBoard.GetAsHandle(CF_BITMAP), 0); Оценка за ответ: 5. 3. [Отвечает: dasha
ermakova, 30.10.2005 01:12]: Насчет jpeg формата не знаю, но рисунок
из буфера (например, скриншот) можно загрузить так: Оценка за ответ: 5. Вопрос #179: 1. [Отвечает: Садовников Владимир, 23.10.2005 23:13]: Это можно Сделать так (словесная алгоритмическая формулировка): 1. Создаёшь функцию получения адреса записи вершины по её имени. Совет: вместо имён лучше использовать указатели - это уменьшит время обработки данных, так как не придётся заниматься постоянным сравнением строк, и пункт 1 отпадает, а пункты 2 и 3 переделываются подуказатели. Оценка за ответ: 5. 2. [Отвечает: mvp, 27.10.2005 03:02]: Вы бы привели всё-таки запись, объясняющую, как что записывается. Предположу следующее: имеется запись: rec1 = record Массив таких записей вы и храните (предположение :)) Что значит операторная вершина? Не совсем понятно. Если вы хотите построить граф, то примерно так (используется матрица инцедентности): var ver: array of rec1; procedure FindIt; Таким образом мы получили матрицу инцедентности графа. Если matrix[i][j] = true, то существует путь длины один из i в j. Но это вам видимо не подходит. Но из неё можно легко узнать путь, если таковой существует, к другой вершине. type RIsRoadResult = record function IsRoad(i : integer; j : integer) :
RIsRoadResult; begin end; Здесь не учитывается, что возможны циклы, но и это можно поправить. А в общем, это задача поиска пути. Я набросал схему упрощённую. Читайте литературу (того же Кнута) по поиску на графе. Оценка за ответ: 5. 3. [Отвечает: dasha ermakova, 01.11.2005 01:54]: Я думаю, что сохранять имена связанных вершин удобнее в массиве символов. Смысл в том, что после нахождения связанной вершины, процедура поиска вызывается рекурсивно уже для новой вершины, сохраняя все пройденные, и так, пока не находим конечную точку. Тогда заносим найденный путь в массив. ver = record Оценка за ответ: 5. Все вопросы и ответы на них Вы всегда можете найти на нашем сайте в
разделе "Эксперт": http://www.delphi.int.ru/modules/expert/. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Из-за технических проблем новых статей нет. Присылайте свои статьи по адресу info@delphi.int.ru с темой
'Articles' (без кавычек), и они будут опубликованы в ближайших выпусках рассылки и
на сайте. Также вы можете заполнить вот
эту форму. Большая просьба: статью оформляйте в -txt или -doc формате и
используйте -zip или -rar сжатие (без самораспаковки). |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Из данного раздела Вы можете скачать различные файлы: компоненты, plug-in'ы для Delphi, документацию по программированию, программы, игры, написанные на Delphi и всё остальное... Вы можете добавить свои файлы в данный раздел. Чтобы сделать это, пожалуйста, заполните форму на сайте. Новые файлы на сайте:
Чтобы перейти к разделу "Файловый архив" на сайте, нажмите на
эту
ссылку. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Здесь представлены ссылки на дружественные сайты нашего портала. Если вы тоже хотите стать нашим другом, разместите наш баннер на своём сайте. Подробнее о том, как это сделать, можно прочитать на странице данного раздела на нашем сайте. Узнать о всех наших друзьях более подробно вы сможете на той же странице... http://infomania2004.webhost.ru/ - Этот сайт создан для того, чтобы вы могли получить интересующую вас информацию с минимальными затратами сил и времени. Если вы не нашли здесь нужной информации, вы можете оставить заявку на ее поиск. Как только информация будет найдена, она появится на сайте, а вам сообщат об этом. http://www.visualbasic.noka.ru/ - Программирование на Visual Basic & Basic. На сайте Вы найдете множество примеров, статьи, исходники, ActiveX, а также многое другое! http://www.sashook.hut1.ru/ - Игры, коллекция флешек, обои и заставки, компьютерные приколы, картинки, тосты и алкогольные присказки, смешные истории и анекдоты. http://www.ssgroup.fatal.ru/ - Delphi 39. Ресурс для программистов. Статьи, исходники, компоненты, учебники, справочники, FAQ, программы и многое другое. http://www.hkdsoft.narod.ru/ - H.K.D. Soft - Программирование на Delphi, C/C++, Assembler, Pascal, Basic/VB/VBA/VBS. Компоненты, статьи, исходники, множество е-книг, форум. Бесплатный софт. Скачать программу GamesBase - базу данных по играм содержащую описания, скриншоты, коды, прохождения игр. Дружественные рассылки: |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Училка сынку программера: :)) Модем с бодуна снимает трубку:- Гав! Мяяуууу.. Каррр! Тьфу, пи-и-и-и-и-... :)) Микрософт поделят на три части, а Билла Гейтса клонируют, так что у каждого мелкого MS будет свой Гейтс... :)) Внимание, новый бесплатный
интеpнет-пpовайдеp! :)) У жены программиста спросили: :)) Если чрезмерная увлеченность вашего ребёнка компьютерными играми вызывает у вас беспокойство, постарайтесь приобщить его к более серьёзным и здоровым занятиям: картам, вину, девочкам... :)) - Алло! Барышня! Соедините меня с моей
женой. Анекдоты прислал: Масалов Андрей. Пожалуйста, присылайте свои анекдоты по этой ссылке: info@delphi.int.ru и они
обязательно будут опубликованы! Желательно на компьютерную тему.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Товарищи программисты! Проявляйте свою активность. Давайте помогать друг
другу! Если вы не нашли ответа на свой вопрос, не отчаивайтесь! Количество подписчиков постоянно растёт и, наверняка, найдётся тот человек, который поможет вам! На сегодня всё. До встречи через неделю! Ведущий рассылки, Ерёмин Андрей. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Вы можете оказать помощь нашему проекту через систему WebMoney: R379291065219, Z165075684614. Будем очень признательны! |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Наш сайт: http://www.delphi.int.ru/ E-mail: admin@delphi.int.ru; info@delphi.int.ru; expert@delphi.int.ru Страница рассылки: http://subscribe.ru/catalog/comp.soft.prog.delphifaq |
Subscribe.Ru
Поддержка подписчиков Другие рассылки этой тематики Другие рассылки этого автора |
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphifaq Архив рассылки |
Отписаться
Вспомнить пароль |
В избранное | ||