Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2014, 19:24   #1
zaira001002
Форумчанин
 
Аватар для zaira001002
 
Регистрация: 13.09.2012
Сообщений: 122
По умолчанию Удаление всех точек в Image (Delphi)

Я задала цикл удаления , но у меня удаляет не все, отрывками, и какие-то точки в конечном итоге вообще остаются на графике, выдает ошибку, но не знаю, что не так. Писала исходя из удаления одной точки, кусок программы, который работал правильно:
Код:
procedure TForm2.BtnDeletePointClick(Sender: TObject);
var
  S, SDeleted: String;
  Num: Boolean;
  I,X,Y: Integer;
begin
  if Num = False then
  begin
    if CheckBoxPoint.Checked = True  then
    begin
      // Удаляем нумерацию точек в ListBox
      for I := 0 to ListboxCoordinatesPoints.Items.Count - 1 do
      begin
        S:= ListboxCoordinatesPoints.Items.Strings[I];
        Delete(S,1,2);
        ListboxCoordinatesPoints.Items.Strings[I]:=S;
      end;
      with ListBoxCoordinatesPoints do
      if ItemIndex <>-1 then
      begin
        SDeleted:=Items.Strings[ItemIndex];
        Items.Delete(ItemIndex);
        // Находим координаты удаленной точки
        Delete(SDeleted,Pos('X: ',SDeleted),3);
        Delete(SDeleted,Pos(' Y: ',SDeleted),4);
        S:=SDeleted;
        Delete(SDeleted,Pos(';',SDeleted),(length(SDeleted)-(Pos(';',SDeleted)-1)));
        X:=StrToInt(SDeleted);
        Delete(S,1,Pos(';',S));
        Y:=StrToInt(S);
        // Пронумеровываем список после изменений
        for I := 0 to ListboxCoordinatesPoints.Items.Count - 1 do
        begin
          ListboxCoordinatesPoints.Items.Strings[I]:=IntTostr(I+1)+'.'+ListboxCoordinatesPoints.Items.Strings[I];
        end;
        //Удаление точки в график Image
        with Image1.Canvas do
        begin
          Canvas.Pen.Color := clWhite;
          Image1.Canvas.Pixels[X,Y]:=clWhite;
        end;
      end
      else ShowMessage('Выберите точку из списка')
    end
  else
  if CheckBoxAllPoints.Checked = True then
  begin
    // Удаляем нумерацию точек в ListBox
    for I := 0 to ListboxCoordinatesPoints.Items.Count - 1 do
    begin
      S:= ListboxCoordinatesPoints.Items.Strings[I];
      Delete(S,1,2);
      ListboxCoordinatesPoints.Items.Strings[I]:=S;
    end;

    for I := 0 to ListBoxCoordinatesPoints.Items.Count - 1 do
    with ListBoxCoordinatesPoints do
    begin
      SDeleted:=Items.Strings[I];
      Items.Delete(I);
      // Находим координаты удаленной точки
      Delete(SDeleted,Pos('X: ',SDeleted),3);
      Delete(SDeleted,Pos(' Y: ',SDeleted),4);
      S:=SDeleted;
      Delete(SDeleted,Pos(';',SDeleted),(length(SDeleted)-(Pos(';',SDeleted)-1)));
      X:=StrToInt(SDeleted);
      Delete(S,1,Pos(';',S));
      Y:=StrToInt(S);
      // Пронумеровываем список после изменений
     // for I := 0 to ListboxCoordinatesPoints.Items.Count - 1 do
      //begin
      //  ListboxCoordinatesPoints.Items.Strings[I]:=IntTostr(I+1)+'.'+ListboxCoordinatesPoints.Items.Strings[I];
      //end;
      //Удаление точки в график Image
      with Image1.Canvas do
      begin
        Canvas.Pen.Color := clWhite;
        Image1.Canvas.Pixels[X,Y]:=clWhite;
      end
    end
  end
  else ShowMessage('Выберите, что хотите удалить');
  Num := True;
  end;
end;
zaira001002 вне форума Ответить с цитированием
Старый 15.04.2014, 20:33   #2
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

А зачем все так жутко усложнять ) храни отдельно массив из координат точек, тогда не придется заниматься этим лютым шаманством со строками.
Son Of Pain вне форума Ответить с цитированием
Старый 15.04.2014, 20:51   #3
zaira001002
Форумчанин
 
Аватар для zaira001002
 
Регистрация: 13.09.2012
Сообщений: 122
По умолчанию

Ну раз затеяла эту суету))) скажи все- таки))) что не так с циклом))))? вот этим
Код:
if CheckBoxAllPoints.Checked = True then
  begin
    // Удаляем нумерацию точек в ListBox
    for I := 0 to ListboxCoordinatesPoints.Items.Count - 1 do
    begin
      S:= ListboxCoordinatesPoints.Items.Strings[I];
      Delete(S,1,2);
      ListboxCoordinatesPoints.Items.Strings[I]:=S;
    end;

    for I := 0 to ListBoxCoordinatesPoints.Items.Count - 1 do
    with ListBoxCoordinatesPoints do
    begin
      SDeleted:=Items.Strings[I];
      Items.Delete(I);
      // Находим координаты удаленой точки
      Delete(SDeleted,Pos('X: ',SDeleted),3);
      Delete(SDeleted,Pos(' Y: ',SDeleted),4);
      S:=SDeleted;
      Delete(SDeleted,Pos(';',SDeleted),(length(SDeleted)-(Pos(';',SDeleted)-1)));
      X:=StrToInt(SDeleted);
      Delete(S,1,Pos(';',S));
      Y:=StrToInt(S);
      // Пронумеровываем список после изменений
     // for I := 0 to ListboxCoordinatesPoints.Items.Count - 1 do
      //begin
      //  ListboxCoordinatesPoints.Items.Strings[I]:=IntTostr(I+1)+'.'+ListboxCoordinatesPoints.Items.Strings[I];
      //end;
      //Удаление точки в график Image
      with Image1.Canvas do
      begin
        Canvas.Pen.Color := clWhite;
        Image1.Canvas.Pixels[X,Y]:=clWhite;
      end
    end
end
zaira001002 вне форума Ответить с цитированием
Старый 15.04.2014, 21:28   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я... Эм... Глупый вопрос задам - TChart уже не в моде?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.04.2014, 22:48   #5
zaira001002
Форумчанин
 
Аватар для zaira001002
 
Регистрация: 13.09.2012
Сообщений: 122
По умолчанию

ну я вообще никогда не сталкивалась с этим компонентом)по ходу да)))
zaira001002 вне форума Ответить с цитированием
Старый 15.04.2014, 22:53   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так может пора попробовать?
Он ведь специально предназначен для построения и управления графиками.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.04.2014, 23:09   #7
zaira001002
Форумчанин
 
Аватар для zaira001002
 
Регистрация: 13.09.2012
Сообщений: 122
По умолчанию

ну у меня по условию задачи так: Задано множество точек и множество треугольников) Необходимо найти ломаную линию из двух звеньев , пересекающую наибольшее множество треугольников))) то есть я смогу выполнить данное условие в TChart))) я уже 3 сутки делаю эту программу)))) не уж то все придется полностью переделывать)? хотя нет)))) только ту часть) где обращаемся к рисованию, так ?))) ну и что ты хотел сказать насчет этого компонента))) какие рекомендации))?
zaira001002 вне форума Ответить с цитированием
Старый 16.04.2014, 08:26   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
то есть я смогу выполнить данное условие в TChart
Этот компонент призван рисовать графики а не рассчитывать их.
Собсно он уберет из твоего кода всю отрисовку.
Однако поиск ломанной придется тебе оформлять самостоятельно.
Вот если я ниче не путаю такой код:
Код:
const
   tri:array[1..1,1..3] of TPoint=(
     ((x:10;y:1),(x:20;y:20),(x:5;y:2))
   );
var j,i:integer; sr:TLineSeries;
begin
 for i:=Low(tri) to high(tri) do begin
  sr:=TLineSeries.Create(Chart1);
  Chart1.AddSeries(sr);
  sr.XValues.Order:=loNone;
  for j:=low(tri[i]) to high(tri[i]) do sr.AddXY(tri[i,j].x,tri[i,j].x);
 end;
end;
поможет построить тебе столько треугольников сколько укажешь в массиве tri.
Поменяй только тип sr на тип того что у тебя Chart понимает, у меня в Лазаре он так называется, в Делфи будет по другому.
Но смысл остается таким же.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.04.2014, 08:26   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
то есть я смогу выполнить данное условие в TChart
Этот компонент призван рисовать графики а не рассчитывать их.
Собсно он уберет из твоего кода всю отрисовку.
Однако поиск ломанной придется тебе оформлять самостоятельно.
Вот если я ниче не путаю такой код:
Код:
const
   tri:array[1..1,1..3] of TPoint=(
     ((x:10;y:1),(x:20;y:20),(x:5;y:2))
   );
var j,i:integer; sr:TLineSeries;
begin
 for i:=Low(tri) to high(tri) do begin
  sr:=TLineSeries.Create(Chart1);
  Chart1.AddSeries(sr);
  sr.XValues.Order:=loNone;
  for j:=low(tri[i]) to high(tri[i]) do sr.AddXY(tri[i,j].x,tri[i,j].x);
 end;
end;
поможет построить тебе столько треугольников сколько укажешь в массиве tri.
Поменяй только тип sr на тип того что у тебя Chart понимает, у меня в Лазаре он так называется, в Делфи будет по другому.
Но смысл остается таким же.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение всех возможных прямоугольников из массива точек (любой язык) sancho123 Помощь студентам 6 29.04.2012 23:35
матризы определить индексы всех ее седловых точек Sylar9 Общие вопросы C/C++ 2 06.01.2012 16:09
Задаnm n точек. Найти m=3,4... точек и построить на них m-угольник: количество точек , лежащих внутри и вне его мин. различается L.Rain Помощь студентам 0 11.12.2011 22:19
Как случайным образом нарисовать 200 точек на Image SnowSin Общие вопросы Delphi 3 11.11.2009 18:46
Координаты всех точек в в фигуре 5naip Мультимедиа в Delphi 5 21.12.2008 18:13