Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1215701884
Light-blr
2008-07-10 18:58
2008.08.17
Как перевести русские символы в формат типа %D0?


2-1216032987
alexalex
2008-07-14 14:56
2008.08.17
печать


8-1184360340
MRAk
2007-07-14 00:59
2008.08.17
Выкл все(уровень звука)


2-1215890925
Mixail2
2008-07-12 23:28
2008.08.17
TTreeNode


15-1215015616
Галинка
2008-07-02 20:20
2008.08.17
iZEN нужна твоя помощь





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