Вопрос № 98544: Доброго время суток! :) Недавно встала задача следующего содержания. Имеется набор линий и, соответственно, набор точек, определяющих отрезки этих точек (см. пример в приложении). Естественно эти линии/отрезки ограничивают некоторые полигоны в опреде...Вопрос № 98573: Здравствуйте!
Скажите пожалуйста, как с помощью указателей редактировать свойства объекта?
Заранее спасибо....Вопрос № 98615: Здравствуйте, уважаемые эксперты! Проблема вот в чем. Не получается в TcxGrid редактировать данные в ячейках. Что нужно сделать что бы ячейки были доступны для редактирования?...
Вопрос № 98.544
Доброго время суток! :) Недавно встала задача следующего содержания. Имеется набор линий и, соответственно, набор точек, определяющих отрезки этих точек (см. пример в приложении). Естественно эти линии/отрезки ограничивают некоторые полигоны в определенной области. Нужно написать функцию, на вход которой подается набор этих отрезков, а на выходе получаем все полигоны (например, задаваемые координатами вершин в порядке их следования). Даже не имею предположения с чего начать :( Может подскажете идейку какую?
:)
А у вас есть гарантия, что линии не пересекаются (у вас на картинке именно так)? Если есть, то можно предложить алгоритм обхода с двойной пометкой ребер (фиксируем что будем обходить против часовой стрелки, а также дополним его "периметром" по граничным точкам (ваш пунктир) - чтобы обеспечить единообразие и замкнутость полигонов).
1. Берем любое ребро на котором нет двух пометок, добавляем его в новый полигон и помечаем, запоминаем начальную точку А. Если таковых ребер нет (на всех по две пометки), то полигонов больше нет.
2. Для конечной точки ребра ищем среди всех исходящих ребер кроме текущего, ребро с минимальным углом от текущего и добавляем его в полигон и помечаем.
3. Проверяем не является ли конечная точка нового ребра точкой А, если нет, то повторяем шаг 2, если да, то полигон собран и можно переходить к шагу 1 (искать следующий).
Надеюсь вам это поможет как "идейка" :).
Ответ отправил: PGM (статус: 9-ый класс)
Ответ отправлен: 15.08.2007, 23:06 Оценка за ответ: 5 Комментарий оценки: Да-да... неплохая мысль :) Спасибо ;) P.S. Линии действительно могут и пересекатся.
Вопрос № 98.573
Здравствуйте!
Скажите пожалуйста, как с помощью указателей редактировать свойства объекта?
Заранее спасибо.
Отправлен: 16.08.2007, 03:31
Вопрос задал: _porodox_ (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 10)
Отвечает: Delph
Здравствуйте, _porodox_!
На основе дополнительных сведений, которые Вы сообщили на минифоруме, и подытоживая всё сказанное участниками обсуждения, рекомендую написать:
1) В библиотеке, меняющей свойство неизвестного объекта:
type TEditMethod = procedure(value: integer) of object; stdcall;
procedure MyEditor(EditProc: TMethod); stdcall; export;
var EditMethod: TEditMethod;
begin
EditMethod := TEditMethod(EditProc);
EditMethod(_значение_);
end;
2) в приложении:
Пусть для определённости редактирующий метод определён так:
procedure SetValue(var value: integer);
Тогда мы можем передать его в библиотеку:
type TSetValue = procedure(var value: integer);
procedure X;
var Editor: TSetValue;
begin
Editor := SetValue;
// Вызов метода из библиотеки для передачи ссылки
MyEditor(TMethod(Editor));
end;
------------------------------
Я указал лишь простейшие примеры. Вы же можете подстроить логику процедур под свою задачу (например, сохранить где-то в библиотеке ссылку на редактирующий метод и затем использовать её по своему усмотрению)
Ответ отправил: Delph (статус: 7-ой класс)
Ответ отправлен: 17.08.2007, 15:19
Вопрос № 98.615
Здравствуйте, уважаемые эксперты! Проблема вот в чем. Не получается в TcxGrid редактировать данные в ячейках. Что нужно сделать что бы ячейки были доступны для редактирования?
Отправлен: 16.08.2007, 13:43
Вопрос задал: Radik (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 4)
Отвечает: Проходящий Мимо
Здравствуйте, Radik!
Во-первых, для DBTableView нужно разрешить свойства:
DBTableView.OptionsData.Inserting := true;
Appending := true;
.Deleting := true;
.Editing := true;
.Inserting := true;
Во-вторых, для нужных столбцов разрешить редактирование (програмно или в инспекторе обьектов):
TableViewColumn1.Properties.ReadOnly:=false;
Также нужно не забыть разрешить редактирование на уровне DataSource.
Удачи.
--------- Carpe diem!
Ответ отправил: Проходящий Мимо (статус: 9-ый класс)
Ответ отправлен: 16.08.2007, 14:13 Оценка за ответ: 5 Комментарий оценки: Спасибо, но все эти параметры выставлены правильно. а ячейка все равно не редактируется
Отвечает: Владик
Здравствуйте, Radik!
Для того чтобы редактировать данные в ячейке необходимо два раза щелкнуть по таблице, появится Editing TcxGrid.Columns. и в свойствах колонок ставишь ReadOnly значение False. Если нет колонок то жмешь на кнопку Add All Fields
Ответ отправил: Владик (статус: 1-ый класс)
Ответ отправлен: 16.08.2007, 15:44