Главная страница
    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.47 MB
Время: 0.009 c
1-60198
Valeron
2003-06-05 09:52
2003.06.19
Как лучше реализовать векторные обьекты?


4-60457
tytus
2003-04-19 18:32
2003.06.19
Цвет заголовка формы


1-60217
VikOss
2003-06-05 13:46
2003.06.19
Вызов из DLL


14-60345
zeppelin
2003-06-02 12:22
2003.06.19
Отчет с помощью Rave


4-60476
lutik
2003-04-16 12:20
2003.06.19
Как сменить канву заголовка окна





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский