Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как изменить заголовок окна?


Страницы:   1 2

Sick ©   (2008-07-13 16:47:00) 

Из asm-блока?
Я пробовал

call TControl.SetText
call TControl.@SetText
call Controls.TControl.SetText
call Controls.TControl.@SetText

Компилятор ничего не пропускает.  
И где вообще взять документацию по подобным вещам?


Ляпа   (2008-07-15 15:40:00) [1]


> 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;
Вот только не пойму - ЗАЧЕМ это всё?


Sick   (2008-07-15 12:49:00) [2]

Удалено модератором


Ляпа   (2008-07-15 02:23:00) [3]


> Sick   (14.07.08 21:19) [23]


> > Тын-Дын ©   (13.07.08 20:43) [22]
>
> Не угадал(



> mov eax, [eax + 436]

А как это ещё назвать, кроме как грязный хак?


Sick   (2008-07-14 21:35:00) [4]

Удалено модератором


Johnmen   (2008-07-14 21:31:00) [5]


> Вот 2 варианта, кому интересно:

Никому не интересно. Оставь себе.


Sick   (2008-07-14 21:21:00) [6]


> Тын-Дын ©   (13.07.08 20:43) [22]

Не угадал(


Sick   (2008-07-14 21:19:00) [7]

Да, я смотрю, тут прямо сидят одни мастера ))
Вот 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;


Тын-Дын   (2008-07-13 20:43:00) [8]


> то конечно круто, но тогда, чтобы использовать другие свойства,
>  для каждого придётся писпть процедуру


Не занимайся грязным хаком - не надо будет писать процедуры.


Sick   (2008-07-13 20:37:00) [9]


> Игорь Шевченко ©   (13.07.08 19:13) [18]

В том-то и дело, что этот код не работает!
"H := Form1.Handle" преобразуется в "TWinControl.GetHandle", но если я пишу это в своей процедуре, это не работает


> Ляпа   (13.07.08 19:33) [19]

Это конечно круто, но тогда, чтобы использовать другие свойства, для каждого придётся писпть процедуру


Ляпа   (2008-07-13 19:34:00) [10]

ps

>  mov eax, Form1

Естественно, в окончательном варианте - без подобного моветона


Ляпа   (2008-07-13 19:33:00) [11]


> 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:13:00) [12]


> Ну так-то и я могу)))))) Вопрос в том, как сделать это на
> асме


открыть окно cpu и посмотреть, какой код сгенерирован, религия не позволяет ?


Sick   (2008-07-13 19:06:00) [13]

Renegat, будешь дома, посмотри, пожалуйста [6]


Sick   (2008-07-13 18:59:00) [14]


> Тын-Дын ©   (13.07.08 18:52) [15]

Но как-то же можно получить Handle внутри процедуры?


Тын-Дын   (2008-07-13 18:52:00) [15]


> И посмотри. Только там TWinControl.GetHandle, но это тоже
> не работает


См. Тын-Дын ©   (13.07.08 18:38) [12]


Sick   (2008-07-13 18:45:00) [16]


> С чего ты взял, что методы ты сможешь вызывать так просто
> через call?

А как по-твоему они вызываются? Набери
H:=Form1.Handle
И посмотри. Только там TWinControl.GetHandle, но это тоже не работает


Anatoly Podgoretsky   (2008-07-13 18:44:00) [17]

И лапшу на уши насчет статей вешает, все там есть, по крайней мере в одной описан метод оптимизации сгеренированого компилятором кода.


Тын-Дын   (2008-07-13 18:38:00) [18]

Да еще и приватный метод.


Тын-Дын   (2008-07-13 18:34:00) [19]


> Sick   (13.07.08 18:29) [10]
> > Ляпа   (13.07.08 18:20) [8] Ну так-то и я могу)))))) Вопрос
> в том, как сделать это на асме> Что такое TForm.Handle?call
> TForm.GetHandle тоже не работает


Реализуй свою функцию и вызывай. С чего ты взял, что методы ты сможешь вызывать так просто через call?


Sick   (2008-07-13 18:29:00) [20]


> Ляпа   (13.07.08 18:20) [8]

Ну так-то и я могу)))))) Вопрос в том, как сделать это на асме


> Что такое TForm.Handle?

call TForm.GetHandle тоже не работает


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо