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

Вниз

Как изменить заголовок окна?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.018 c
2-1215942865
Саша
2008-07-13 13:54
2008.08.17
Шифрование RSA.


1-1196705497
Dib@zol
2007-12-03 21:11
2008.08.17
PopUp Menu + Tray


15-1214647310
Alexandr
2008-06-28 14:01
2008.08.17
Чем отличается фильтрация от сортировки?


2-1216041467
JN
2008-07-14 17:17
2008.08.17
class function


15-1214983184
kaif
2008-07-02 11:19
2008.08.17
Как это называется?