Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.19;
Скачать: [xml.tar.bz2];

Вниз

Как передать параметр в LineDDA функцию?   Найти похожие ветки 

 
Тфьу   (2003-06-05 11:37) [0]

Почему cl не передается в CMyDraw? Причем когда рботает, когда не работает... Судя по всему с ссылочной процедурой надо по особому работать? Как?


Procedure Draw;
Var
cl: TColor;
procedure CMyDraw(X,Y: integer; Canvas: TCanvas);stdcall;
begin
If Canvas.Pixels[X,Y]=cl then
Canvas.Pixels[X,Y]:=Canvas.Pen.Color;
end;
begin
cl:=clRed;
LineDDA(X,Y,X1,Y1,@CMyDraw,Integer(Canvas));
end;


 
Song   (2003-06-05 11:53) [1]

А как ты понял что она не передаётся?
Она у тебя в CMyDraw даже не используеся.


 
reonid   (2003-06-05 12:00) [2]

Так cl - локальная переменная. Она адресуется относительно
вершины стека.
А внутри LineDDA стек уже не тот.


 
Тфьу   (2003-06-05 12:59) [3]

reonid ©: А как можно ее адресовать? Когда я объявлял ее в private области объекта - вообще ошибку выдает при выполнении.

Song ©: Используеся, если повнимательнее посмотреть. Я ее выводил, и она отличалась от переданной.


 
Anatoly Podgoretsky   (2003-06-05 13:03) [4]

А передавать не TCanvas а свою структуру, где есть оба этих элемента


 
reonid   (2003-06-05 13:09) [5]

сделай её глобальной, например.


 
SVM (Perm)   (2003-06-05 13:29) [6]

А почему CMyDraw - локальная процедура???


 
reonid   (2003-06-05 13:35) [7]

SVM (Perm) (05.06.03 13:29)
Очевидно, потому что автор надеялся обратиться
в ней к локальным переменным процедуры Draw.


 
Anatoly Podgoretsky   (2003-06-05 13:40) [8]

Тажа ошибка при работе с ассемблерными локальными процедурами и переменными.


 
icWasya   (2003-06-06 11:10) [9]

в приведённом куске кода процедуры CMyDraw1и CMyDraw2 хоть и выглядят одинаково, но на самом деле вызываются(на уровне ASM) по разному.
При вызове процедуры CMyDraw2 ей неявно передаётся указатель на область локальных переменных процедуры MyDraw.
А когда она вызывается из LineDDA, то этого конечно не делается.
procedure CMyDraw1(X,Y: integer; Canvas: TCanvas);stdcall;
begin
//.......
end;

Procedure MyDraw;
Var C:TColor;
procedure CMyDraw2(X,Y: integer; Canvas: TCanvas);stdcall;
begin
//.......
end;
begin
//............
LineDDA(X,Y,X1,Y1,@CMyDraw1,Integer(Canvas));
LineDDA(X,Y,X1,Y1,@CMyDraw2,Integer(Canvas));
//............
end;



 
Kudatsky   (2003-06-06 11:47) [10]

Формат CMyDraw такой:
procedure CMyDraw(X,Y:Integer;Canvas:TCanvas);stdcall;
Всё остальное должно передаваться как глобальные переменные.



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

Форум: "Основная";
Текущий архив: 2003.06.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
1-60118
sirius
2003-06-06 11:57
2003.06.19
Вопрос по созданию компонент Delphi


1-60131
Silver_
2003-06-06 11:54
2003.06.19
как в чужую прогу вставить кнопку для запуска своей типа...


6-60312
vinnety
2003-04-15 22:43
2003.06.19
Текстовое сообщение через DcomConnection


3-60075
DeniM
2003-05-28 17:45
2003.06.19
работа с ADOQuery (+)


14-60423
Dr. Acid
2003-06-03 16:28
2003.06.19
Где взять Async Pro





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский