Форум: "Прочее";
Текущий архив: 2012.02.05;
Скачать: [xml.tar.bz2];
ВнизХм, задачка... Найти похожие ветки
← →
Rouse_ © (2011-10-14 23:31) [0]Сия задача была озвучена в Августе 2004-го года в парке, находящимся рядом с кинотеатром Пушкинский, на скамейке, где сидели два, похмеляющихся после тяжкой работы, тела - Зотыч и Розыч :)
... и навеяло данной веткой: http://delphimaster.net/view/2-1318507172/
Задача выглядит просто, есть два варианта кода:
procedure TForm1.Button1Click(Sender: TObject);
var
DC: HDC;
S: String;
begin
DC := Canvas.Handle;
S := Memo1.Lines[0];
TextOut(DC, 10, 10, PChar(S), Length(S));
end;
procedure TForm1.Button2Click(Sender: TObject);
var
DC: HDC;
S: String;
begin
S := Memo1.Lines[0];
DC := Canvas.Handle;
TextOut(DC, 10, 10, PChar(S), Length(S));
end;
Нужно определить, какой из них отработает не верно и почему.
← →
Бездомный (2011-10-14 23:36) [1]DC := Canvas.Handle;
S := Memo1.Lines[0];
DC теперь недейстивтельный.
← →
Rouse_ © (2011-10-14 23:46) [2]
> Бездомный (14.10.11 23:36) [1]
> DC теперь недейстивтельный.
Ответ не полный, вопрос был: "Нужно определить, какой из них отработает не верно и почему."
← →
Jeer © (2011-10-14 23:47) [3]Другими словами - "слепок" с канвы действителен только до момента обращения к другим элементам на "канве".
Ибо он и был предназначен изначально лишь для целей вывода канвы на печать или в "изображение".
← →
Rouse_ © (2011-10-14 23:51) [4]
> Jeer © (14.10.11 23:47) [3]
>
> Другими словами - "слепок" с канвы действителен только до
> момента обращения к другим элементам на "канве".
Ответ не верный, наглядно это демонстрирует следующий код, где оба обработчика работают нормально:procedure TForm1.Button1Click(Sender: TObject);
var
DC: HDC;
S: String;
begin
DC := Canvas.Handle;
S := Button1.Caption;
TextOut(DC, 10, 10, PChar(S), Length(S));
end;
procedure TForm1.Button2Click(Sender: TObject);
var
DC: HDC;
S: String;
begin
S := Button2.Caption;
DC := Canvas.Handle;
TextOut(DC, 10, 10, PChar(S), Length(S));
end
← →
Jeer © (2011-10-14 23:52) [5]Оба отработают верно, но каждый - в своем контексте.
Если о "наблюдении вывода" - то второй.
← →
Rouse_ © (2011-10-14 23:54) [6]
> Jeer © (14.10.11 23:52) [5]
>
> Оба отработают верно, но каждый - в своем контексте.
> Если о "наблюдении вывода" - то второй.
Переведи...
← →
Jeer © (2011-10-14 23:55) [7]
> Ответ не верный,
"Верность" - понятие относительное.
Батоны - надстройка.
Мемо - принадлежность канве.
← →
Jeer © (2011-10-14 23:57) [8]Берем пэйнтбокс - это вообще часть канвы изначально, всего лишь crop ее части.
← →
Rouse_ © (2011-10-14 23:58) [9]
> Jeer © (14.10.11 23:55) [7]
>
>
> > Ответ не верный,
>
>
> "Верность" - понятие относительное.
> Батоны - надстройка.
> Мемо - принадлежность канве.
Сурово...
Ок, допустим, мемо каким боком к канве относится, особливо инстересно узнать с точки что туда баттон не подходит?
← →
Rouse_ © (2011-10-14 23:59) [10]
> Jeer © (14.10.11 23:57) [8]
>
> Берем пэйнтбокс - это вообще часть канвы изначально, всего
> лишь crop ее части.
Не ну это все понятно, а ответ то на вопрос будет?
← →
Jeer © (2011-10-15 00:02) [11]:)
Ну как - кнопка же выше канвы :)
Отрисовка своими силами.
P.S.
Да ладно, не бери в разум - я тут изгаляюсь после свадьбы дочки :)
← →
Rouse_ © (2011-10-15 00:06) [12]да я примерно так и понял - кстати еще раз поздравляю :)
ЗЫ: но ответ так и не дан пока что ни кем.
← →
Jeer © (2011-10-15 00:10) [13]
> ЗЫ: но ответ так и не дан пока что ни кем.
Ну так, использование мемо в данном примере принципиально же ?
Или подобных "вырезок" в канве ?
← →
Rouse_ © (2011-10-15 00:11) [14]
> Jeer © (15.10.11 00:10) [13]
> Ну так, использование мемо в данном примере принципиально
> же ?
> Или подобных "вырезок" в канве ?
Не принципиально, можно воспользоваться другими контролами...
← →
Германн © (2011-10-15 00:22) [15]
> Нужно определить, какой из них отработает не верно и почему.
Хм. Интересно будет в конце-концов узнать при чём тут современный ассемблер для Intel & AMD? Или не современный, а тот что Дельфийский компилятор использовал в 2004-м, когда вышеназванные опохмелялись "в парке, находящимся рядом с кинотеатром Пушкинский" :)
← →
Eraser © (2011-10-15 00:31) [16]Удалено модератором
← →
Rouse_ © (2011-10-15 00:38) [17]
> Хм. Интересно будет в конце-концов узнать при чём тут современный
> ассемблер для Intel & AMD?
Ну если ты хочешь увидеть задачу по асму, то их есть у меня.
Данный код выводит строчку "Test" на консоль от одного до нескольких раз.
Задача - выяснить сколько раз и почему, без компиляции.
Впрочем "сколько" я думаю и так понятно - полюбому скомпилите, тогда вопрос - как?program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
procedure tst;
begin
writeln("Test");
end;
begin
asm
call tst
lea eax, tst
lea ecx, @1
push ecx
push eax
push eax
call eax
ret
@1:
end;
Readln;
end.
← →
Eraser © (2011-10-15 00:38) [18]Удалено модератором
Примечание: Бинго...
← →
Rouse_ © (2011-10-15 00:56) [19]
> Eraser © (15.10.11 00:38) [18]
Абсолютно верный детект ошибки - мои респекты...
← →
Rouse_ © (2011-10-15 01:16) [20]
> Eraser © (15.10.11 00:38) [18]
Вторую задачку с 17-го поста одолеешь?
← →
Бездомный (2011-10-15 01:17) [21]Что за произвол?=))
← →
Rouse_ © (2011-10-15 01:21) [22]
> Бездомный (15.10.11 01:17) [21]
>
> Что за произвол?=))
>
В плане?
← →
Kerk © (2011-10-15 01:23) [23]Три раза по-моему. Мог сбиться, поздно уже.
Суть в том, что ret на выходе из функции берет адрес возврата из стэка. Дальше сами считайте :)
← →
Rouse_ © (2011-10-15 01:27) [24]
> Kerk © (15.10.11 01:23) [23]
Почти верно и стэк правильно озвучил...
← →
Kerk © (2011-10-15 01:30) [25]А, ну я call tst вначале прозевал :)
Про стэк - я ж в молодости вирусняками увлекался, там это азбука :)
← →
Rouse_ © (2011-10-15 01:33) [26]
> Kerk © (15.10.11 01:30) [25]
> А, ну я call tst вначале прозевал :)
Промахнулся :)
Там нюанс в изымании рет-калбэка вызываемой функцией, т.е. хинттрик на двойном RET-RET применяемом при переполнении стэка...
← →
Rouse_ © (2011-10-15 01:36) [27]блин, хреновый из меня партизан :)
← →
Kerk © (2011-10-15 01:41) [28]А разве этот ret вообще выполнится? Там же последний прыжок пойдет на ECX, который указывает на @1 после этого ret.
← →
Rouse_ © (2011-10-15 01:47) [29]
> Kerk © (15.10.11 01:41) [28]
>
> А разве этот ret вообще выполнится?
:)
← →
Kerk © (2011-10-15 01:49) [30]А, прости, туплю. Ведь этот ret и запускает всю цепочку.
Пойду спать, чтоб еще глупостей не нагородить :)
← →
Rouse_ © (2011-10-15 01:59) [31]Скажем инициирует, а не запускает - но вывод верный :)
← →
Бездомный (2011-10-15 03:06) [32]
call tst // 1 раз
lea eax, tst
lea ecx, @1
push ecx
push eax // "стек1"
push eax // "стек2"
call eax // второй раз
ret // тут заход на третий раз, а ret из tst сделает заход на 4 раз, т.к. будет думать что адрес возврата то, что в "стек1". ret из tst 4ого раза вернется на @1
@1:
правильно?
← →
Германн © (2011-10-15 03:07) [33]
> Ну если ты хочешь увидеть задачу по асму, то их есть у меня.
У меня тоже их есть. Только АСМ другой.
Вот думаю как 8-ми байтное число представить однозначно 13-ти значным десятичным числом. И понимаю что никак. :(
А куды тогда бедному крестьянину, пардон разработчику, податься? Если ему задали разработать преобразователь "микролан" -> штрихкод.
← →
Бездомный (2011-10-15 03:08) [34]"стек1" и "стек2" надо местами поменять =)
← →
Kerk © (2011-10-15 03:13) [35]
> Бездомный (15.10.11 03:06) [32]
У меня так и получается, но Розыч говорит, что не 4
← →
Rouse_ © (2011-10-15 03:17) [36]
> Бездомный (15.10.11 03:08) [34]
>
> "стек1" и "стек2" надо местами поменять =)
Правильно :)
> Германн © (15.10.11 03:07) [33]
> Вот думаю как 8-ми байтное число представить однозначно
> 13-ти значным десятичным числом.
Ну это действительно тяжко, бо восмибайтовое число представляется максимум в виде десятизначного без запятой, если о целочисленном типе речь ведется...
← →
Rouse_ © (2011-10-15 03:19) [37]
> Kerk © (15.10.11 03:13) [35]
> У меня так и получается, но Розыч говорит, что не 4
я сказал что ты чутка ошибся, а не о количестве :)
← →
Германн © (2011-10-15 03:19) [38]
> Германн © (15.10.11 03:07) [33]
>
>
И это нужно реализовать на самых "крошечных" процессорах :(
Ибо места для"больших" микросхем просто нет!
← →
Германн © (2011-10-15 03:27) [39]
> Rouse_ © (15.10.11 03:17) [36]
> > Германн © (15.10.11 03:07) [33]
> > Вот думаю как 8-ми байтное число представить однозначно
> > 13-ти значным десятичным числом.
>
> Ну это действительно тяжко, бо восмибайтовое число представляется
> максимум в виде десятизначного без запятой, если о целочисленном
> типе речь ведется...
>
Саш, а если посчитать?
Ну или ты меня не понял.
← →
Rouse_ © (2011-10-15 03:30) [40]Ну можно и посчитать: восемь байт FFFFFFFF вмещают в себя десять знаков 4294967295.
Страницы: 1 2 3 вся ветка
Форум: "Прочее";
Текущий архив: 2012.02.05;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.003 c