Форум: "Начинающим";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];
ВнизКак изменить заголовок окна? Найти похожие ветки
← →
Sick (2008-07-13 16:47) [0]Из asm-блока?
Я пробовал
call TControl.SetText
call TControl.@SetText
call Controls.TControl.SetText
call Controls.TControl.@SetText
Компилятор ничего не пропускает.
И где вообще взять документацию по подобным вещам?
← →
Renegat (2008-07-13 17:06) [1]
PUSH Replace_String;
PUSH Form1.Handle;
CALL SetWindowText;
← →
Renegat (2008-07-13 17:08) [2]И воще, нафига вызывать высокоуровневые функции из ассемблерной вставки?
← →
Ляпа (2008-07-13 17:11) [3]http://www.podgoretsky.com/ftp/Docs/Delphi/Podgoretsky/BasmForBeginners-ru.doc
http://www.podgoretsky.com/ftp/Docs/Delphi/Podgoretsky/basmru.zip
← →
Sick (2008-07-13 17:14) [4]PUSH Form1.Handle
Inline assembler syntax error
← →
Sick (2008-07-13 17:19) [5]
> http://www.podgoretsky.com/ftp/Docs/Delphi/Podgoretsky/basmru.
> zip
Это я читал
> http://www.podgoretsky.com/ftp/Docs/Delphi/Podgoretsky/BasmForBeginners-
> ru.doc
Это нет, но моего случая там похоже нет
← →
Renegat (2008-07-13 17:24) [6]> [4] Sick (13.07.08 17:14)
Ну тогда что лиMOV EAX, Form1.Handle
PUSH EAX
?
У меня на компе Делфей сейчас нет, проверить не могу. С фига ли еррор - непонятно.
← →
Sick (2008-07-13 17:30) [7]MOV EAX, Form1.Handle
Inline assembler syntax error
> С фига ли еррор - непонятно
Вот мне тоже
ps. Delphi 2006 for win32
← →
Ляпа (2008-07-13 18:20) [8]
> Sick (13.07.08 17:30) [7]
Получи Form1.Handle в переменную -)
var
Replace_String:pchar;
hHandle:THandle;
begin
Replace_String:="123";
hHandle:=Form1.Handle;
asm
PUSH Replace_String
PUSH hHandle
CALL SetWindowText
end;
end;
← →
Ляпа (2008-07-13 18:23) [9]
> Renegat (13.07.08 17:24) [6]
> С фига ли еррор - непонятно.
Что такое TForm.Handle?
← →
Sick (2008-07-13 18:29) [10]
> Ляпа (13.07.08 18:20) [8]
Ну так-то и я могу)))))) Вопрос в том, как сделать это на асме
> Что такое TForm.Handle?
call TForm.GetHandle тоже не работает
← →
Тын-Дын © (2008-07-13 18:34) [11]
> Sick (13.07.08 18:29) [10]
> > Ляпа (13.07.08 18:20) [8] Ну так-то и я могу)))))) Вопрос
> в том, как сделать это на асме> Что такое TForm.Handle?call
> TForm.GetHandle тоже не работает
Реализуй свою функцию и вызывай. С чего ты взял, что методы ты сможешь вызывать так просто через call?
← →
Тын-Дын © (2008-07-13 18:38) [12]Да еще и приватный метод.
← →
Anatoly Podgoretsky © (2008-07-13 18:44) [13]И лапшу на уши насчет статей вешает, все там есть, по крайней мере в одной описан метод оптимизации сгеренированого компилятором кода.
← →
Sick (2008-07-13 18:45) [14]
> С чего ты взял, что методы ты сможешь вызывать так просто
> через call?
А как по-твоему они вызываются? Набери
H:=Form1.Handle
И посмотри. Только там TWinControl.GetHandle, но это тоже не работает
← →
Тын-Дын © (2008-07-13 18:52) [15]
> И посмотри. Только там TWinControl.GetHandle, но это тоже
> не работает
См. Тын-Дын © (13.07.08 18:38) [12]
← →
Sick (2008-07-13 18:59) [16]
> Тын-Дын © (13.07.08 18:52) [15]
Но как-то же можно получить Handle внутри процедуры?
← →
Sick (2008-07-13 19:06) [17]Renegat, будешь дома, посмотри, пожалуйста [6]
← →
Игорь Шевченко © (2008-07-13 19:13) [18]
> Ну так-то и я могу)))))) Вопрос в том, как сделать это на
> асме
открыть окно cpu и посмотреть, какой код сгенерирован, религия не позволяет ?
← →
Ляпа (2008-07-13 19:33) [19]
> Sick (13.07.08 18:59) [16]
> Но как-то же можно получить Handle внутри процедуры?
>
Ну, я пойду в обход... как все нормальные герои -)
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function GetHandle:THandle;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.GetHandle:THandle;
begin
Result:=Handle;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Replace_String:pchar;
begin
Replace_String:="123";
asm
mov eax, Form1
call GetHandle;
PUSH Replace_String
PUSH eax
CALL SetWindowText
end;
end;
end.
← →
Ляпа (2008-07-13 19:34) [20]ps
> mov eax, Form1
Естественно, в окончательном варианте - без подобного моветона
← →
Sick (2008-07-13 20:37) [21]
> Игорь Шевченко © (13.07.08 19:13) [18]
В том-то и дело, что этот код не работает!
"H := Form1.Handle" преобразуется в "TWinControl.GetHandle", но если я пишу это в своей процедуре, это не работает
> Ляпа (13.07.08 19:33) [19]
Это конечно круто, но тогда, чтобы использовать другие свойства, для каждого придётся писпть процедуру
← →
Тын-Дын © (2008-07-13 20:43) [22]
> то конечно круто, но тогда, чтобы использовать другие свойства,
> для каждого придётся писпть процедуру
Не занимайся грязным хаком - не надо будет писать процедуры.
← →
Sick (2008-07-14 21:19) [23]Да, я смотрю, тут прямо сидят одни мастера ))
Вот 2 варианта, кому интересно:
procedure p1;
asm
mov eax, 4
call System.@NewAnsiString
mov [eax], "txet"
MOV EDX, eax
MOV EAX, Form1
CALL TControl.SetTextBuf
end;
procedure p2;
asm
mov eax, "txet"
push 0
push eax
mov edx, esp
mov eax, [Form1]
mov eax, [eax + 436]
push edx
push eax
call SetWindowText
add esp, 8
end;
← →
Sick (2008-07-14 21:21) [24]
> Тын-Дын © (13.07.08 20:43) [22]
Не угадал(
← →
Johnmen © (2008-07-14 21:31) [25]
> Вот 2 варианта, кому интересно:
Никому не интересно. Оставь себе.
← →
Sick (2008-07-14 21:35) [26]Удалено модератором
← →
Ляпа (2008-07-15 02:23) [27]
> Sick (14.07.08 21:19) [23]
> > Тын-Дын © (13.07.08 20:43) [22]
>
> Не угадал(
> mov eax, [eax + 436]
А как это ещё назвать, кроме как грязный хак?
← →
Sick (2008-07-15 12:49) [28]Удалено модератором
← →
Ляпа (2008-07-15 15:40) [29]
> Sick (15.07.08 12:49) [28]
> Удалено модератором
Не знаю уж, что тут было...
Чтобы понять почему я так говорю - попробуй скомпилировать свой код в D6, а не в BDS 2006 и выполнить -)
var WndName,WndClass,Replace_String:pchar;
begin
WndName := "Form1";
WndClass := "TForm1";
Replace_String := "123-test";
asm
push WndName
push WndClass
call FindWindow
push Replace_String
push eax
call SetWindowText
end;
end;
Вот только не пойму - ЗАЧЕМ это всё?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.053 c