Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.01.2012, 16:09
Аватар для ~TB~
~TB~ ~TB~ вне форума
Начинающий
 
Регистрация: 17.02.2006
Адрес: Казахстан
Сообщения: 172
Версия Delphi: XE
Репутация: 1500
По умолчанию Как провернуть одну штуку с Pointer'ом и классом?

Помогите заставить работать примерно следующий код:
Код:
procedure TFormMain.FormCreate(Sender: TObject);
var
  p: Pointer;
  ps: ^string;
begin
  p := @FormMain.Caption;
  { TODO : Тут делаем всякие ужасные непотребства и т.д. }
  ps := p;
  FormMain.Caption := ps^;
end;

То что не получается сотворить - отмечено жирным и вызывает ошибку:
[DCC Error] UnitMain.pas(46): E2036 Variable required
Где я косячу?
__________________
00110001 00101100 00110110 00110001 00111000 00110000 00110011 00110011 00111001 00111000 00111000 00110111 00110100 00111001 00111000 00111001 00110100 00111000 00110100 00111000 00110010 00110000 00110100 00110101 00111000 00110110 00111000 00110011 00110100 00110011 00110110 00110101 00110110
Ответить с цитированием
  #2  
Старый 26.01.2012, 18:07
Zorkov Igor Zorkov Igor вне форума
Новичок
 
Регистрация: 28.07.2009
Сообщения: 85
Репутация: 50
По умолчанию

Код:
var
  p: Pointer;
  ps: string;
begin
  p := Pointer(Form1.Caption);
  { TODO : Тут делаем всякие ужасные непотребства и т.д. }
  ps := String(p);
  Form1.Caption := ps + 'COOL';
Ответить с цитированием
  #3  
Старый 26.01.2012, 18:18
Аватар для ~TB~
~TB~ ~TB~ вне форума
Начинающий
 
Регистрация: 17.02.2006
Адрес: Казахстан
Сообщения: 172
Версия Delphi: XE
Репутация: 1500
По умолчанию

Zorkov Igor,
Спасибо. Отлично работает!
__________________
00110001 00101100 00110110 00110001 00111000 00110000 00110011 00110011 00111001 00111000 00111000 00110111 00110100 00111001 00111000 00111001 00110100 00111000 00110100 00111000 00110010 00110000 00110100 00110101 00111000 00110110 00111000 00110011 00110100 00110011 00110110 00110101 00110110
Ответить с цитированием
  #4  
Старый 26.01.2012, 18:30
Аватар для ~TB~
~TB~ ~TB~ вне форума
Начинающий
 
Регистрация: 17.02.2006
Адрес: Казахстан
Сообщения: 172
Версия Delphi: XE
Репутация: 1500
По умолчанию

Поторопился я. Конечно так оно будет работать. Никак нельзя писать прямо по адресу FormMain.Caption?

Пробовал такое:
Код:
var
  p: Pointer;
  ps: ^string;
begin
 p := Pointer(FormMain.Caption);
 { TODO : Тут делаем всякие ужасные непотребства и т.д. }
 ps := p;
 ps^ := ps^ + 'COOL';
end;
И получаю ошибку кривого доступа к памяти...

Может кто знает как сделать что-то подобное? Только, чтобы работало.
__________________
00110001 00101100 00110110 00110001 00111000 00110000 00110011 00110011 00111001 00111000 00111000 00110111 00110100 00111001 00111000 00111001 00110100 00111000 00110100 00111000 00110010 00110000 00110100 00110101 00111000 00110110 00111000 00110011 00110100 00110011 00110110 00110101 00110110

Последний раз редактировалось ~TB~, 26.01.2012 в 18:33.
Ответить с цитированием
  #5  
Старый 27.01.2012, 07:27
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

http://www.delphisources.ru/forum/sh...ad.php?t=17828
у меня это бы выглядело так
PHP код:
var
  
pTFoo;
begin
 p 
:= TFoo.create(FormMain'Caption');
 
p.let(p.get '111'); // caption = 'FormMain111'
end

Последний раз редактировалось Pyro, 29.08.2012 в 14:11.
Ответить с цитированием
Этот пользователь сказал Спасибо Pyro за это полезное сообщение:
~TB~ (27.01.2012)
  #6  
Старый 27.01.2012, 09:42
Аватар для ~TB~
~TB~ ~TB~ вне форума
Начинающий
 
Регистрация: 17.02.2006
Адрес: Казахстан
Сообщения: 172
Версия Delphi: XE
Репутация: 1500
По умолчанию

Спасибо! Именно то, что нужно.
__________________
00110001 00101100 00110110 00110001 00111000 00110000 00110011 00110011 00111001 00111000 00111000 00110111 00110100 00111001 00111000 00111001 00110100 00111000 00110100 00111000 00110010 00110000 00110100 00110101 00111000 00110110 00111000 00110011 00110100 00110011 00110110 00110101 00110110
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter