Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.02;
Скачать: CL | DM;

Вниз

Не рисует на канве   Найти похожие ветки 

 
Чертежник   (2006-02-27 05:50) [0]

Есть такой код

type

 TSupportPoint = class(TObject)
   ID          :     TColor;
   CoordOnEarth:     TCoordsOnEarth;
 end;
 
 TBranchPoint = class(TSupportPoint)
   Depth       :     extended;
   TypeWell    :     TTypeWell;
   function  NewBranchPoint(X,Y:integer):TBranchPoint;
   procedure MoveBranchPoint(x,y:integer);
   procedure DrawBranchPoint;
 end;

 TSegmentCommunicate = class(TObject)
   ID          :     TColor;
   DateCreate  :     TDate;
   TimeUse     :     word;
   BranchsSet  :     TList;
   procedure MoveSegCom(x,y:integer);
 end;

 TSegmentCommunicateRL = class(TSegmentCommunicate)
   Type_RL     :     TType_RL;
   Width       :     word;
   function  NewSegCom(X,Y,Width:integer):TSegmentCommunicateRL;
   procedure DrawSegRL(SegID:TColor);
 end;

...

var
 MapReal:TBitmap;
 MapMirror:TBitmap;

...

procedure TSegmentCommunicateRL.DrawSegRL(SegID:Tcolor);
var
 i:integer;
 BrnPnt:TBranchPoint;

begin
 BrnPnt:=self.BranchsSet.Items[0];

 MapReal.Canvas.Pen.Color:=clBlack;
 MapReal.Canvas.Brush.Color:=clBlack;
 MapReal.Canvas.MoveTo(round(BrnPnt.CoordOnEarth.x),round(BrnPnt.CoordOnEarth.y)) ;

 MapMirror.Canvas.Pen.Color:=SegID;
 MapMirror.Canvas.Brush.Color:=SegID;
 MapMirror.Canvas.MoveTo(round(BrnPnt.CoordOnEarth.x),round(BrnPnt.CoordOnEarth.y ));
 for i:=1 to self.BranchsSet.Count-1 do
 begin
   BrnPnt:=self.BranchsSet.Items[i];

   MapReal.Canvas.Pen.Color:=clBlack;
   MapReal.Canvas.Brush.Color:=clBlack;
   MapReal.Canvas.LineTo(round(BrnPnt.CoordOnEarth.x),round(BrnPnt.CoordOnEarth.y)) ;

   MapMirror.Canvas.Pen.Color:=SegID;
   MapMirror.Canvas.Brush.Color:=SegID;
   MapMirror.Canvas.MoveTo(round(BrnPnt.CoordOnEarth.x),round(BrnPnt.CoordOnEarth.y ));
 end;
end;
...

Далее по коду идет вызов метода DrawSegRL  и после вызова этого метода делаю следующее
 form2.Image1.Canvas.Draw(0,0,MapReal);
Вместо ожидаемого чертежа получаю белый холст.
Я попытался заменить в методе DrawSegRL все строки MapReal на form2.Image1 т.е. рисовать не через промежуточный Bitmap, а напрямую, и все заработало.
Но ведь, я уверен, через промежуточный Bitmap тоже должно работать и причем быстрее.
Что я делаю не так?


 
Джо ©   (2006-02-27 06:00) [1]

Навскидку (глаза слипаются) — какой режим пера установлен в MapReal.Canvas на момент вызова метода DrawSegRL? Может, psClear?
--
П.С. Код ужасный :)


 
Чертежник   (2006-02-27 06:14) [2]

Спасибо за преодоление сна!
Сейчас попробовал явно установить в psSolid - не помогло.

ЗЫ Чем же он ужасен. (конструктивно смотрю на критику).


 
Defunct ©   (2006-02-27 06:52) [3]

> var
> MapReal:TBitmap;
> MapMirror:TBitmap;

Размеры-то Bitmap"ам заданы? Если не задать размеры, то ниче рисоваться как раз и не будет.


 
Defunct ©   (2006-02-27 06:56) [4]

> П.С. Код ужасный :)

Ой ли так уж сильно ужастный ;>
надо полагать аффтар специально урезал часть описания классов, дабы нам было труднее ему помочь ;)


 
Джо ©   (2006-02-27 15:57) [5]

Помимо размеров битмапов, может, PenMode где-то меняется?

---
В мелочах ужасен, в мелочах :) А из-за мелочей выходит, зачастую, глюкодром:

1. Поля в классах лучше сделать свойствами с соответствующими методами доступа.
2. self.BranchsSet.Items[0];
 а) Self убрать
 б) Items следовало бы сделать default свойством и обращаться просто BranchsSet[0]
3. for i:=1 to self.BranchsSet.Count-1 do — нумерацию элементов с 0.
4. Дублирующийся код в DrawSegRL, лучше продумать логику и вынести повторяющиеся части в отдельные private-методы.
5. Оператор with не зря придумали :)
6. Зачем постоянно присвивается clBlack pen"у?
7. Зачем вообще устанавливаетсяBrush.Color?

и т.д и т.п... :)


 
Чертежник   (2006-02-27 15:59) [6]


> Defunct ©   (27.02.06 06:52) [3]

О, спасибо! Все заработало! А в каком то примере делфовском было без явного указания размеров Bitmap, вот я и по аналогии, видимо там я что-то недосмотрел.


> Джо ©   (27.02.06 06:00) [1]   П.С. Код ужасный :)

> Defunct ©   (27.02.06 06:56) [4]


Да, действительно большинство классов здесь вы не увидите, но они никак не касаются прорисовки.
И хватит меня уже расстравать пожалуйста. Если вы действительно считаете мой код ужасным, то укажите на явные ошибки, а там я сам соображу.
И спасибо за помощь.


 
Джо ©   (2006-02-27 16:03) [7]

> то укажите на явные ошибки, а там я сам соображу.

Свои замечания по коду я привел, см. [5]


 
Чертежник   (2006-02-27 16:07) [8]


> Джо ©   (27.02.06 15:57) [5]

Если не затруднит ответьте на вопросы.

1. А в чем разница?
2б. А как это сделать?
3. 0-вой элемент я вытягиваю из списка до цикла и делаю moveto, а затем делаю lineto до i-го в цикле. Здесь не должно быть ошибки. я сделал это сознательно.
4. 5. 6. 7. Спасибо, это от того что долго ковырял почему код не работал, вот и осталось


 
Джо ©   (2006-02-27 16:14) [9]

> [8] Чертежник   (27.02.06 16:07)

1. Нарушение инкапсуляции. И вообще, как правило, вместо классов, имеющих ТОЛЬКО данные (без методов) желательнее использовать записи (records). Или же включить данные этого класса в другой, "рабочий" класс с методами.

2б. См. реализацию любого контейнера, например TList (индексное свойство Items).

3. Да, я ошибся.


 
Чертежник   (2006-02-27 16:20) [10]


> Джо ©   (27.02.06 16:14) [9]

Спасибо огромное


 
Defunct ©   (2006-03-01 00:37) [11]

Джо ©   (27.02.06 16:14) [9]

по поводу 1.. Согласен, но я бы не был так категоричен, т.к. у него класс с одними только даннымим используется, как я понял, только для наследования. Вероятно он видоизменится позже.

PS: правильные имена классов и полей говорят о том, что автор кода "в танке" что к чему.



Страницы: 1 вся ветка

Текущий архив: 2006.04.02;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.046 c
6-1135108056
vladik
2005-12-20 22:47
2006.04.02
Tidftp + буква Я


2-1142599809
RomanH
2006-03-17 15:50
2006.04.02
Извлечение Jpeg из таблицы в Image


2-1142933624
Handle
2006-03-21 12:33
2006.04.02
Мозги высохли, помогите примерчиком


2-1142491738
Scavenger
2006-03-16 09:48
2006.04.02
Менять цвет шрифта на кнопочке


15-1141827843
Новичоккк
2006-03-08 17:24
2006.04.02
Можно как-нибудь это скачать?