Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / указатели . . . / 14 сообщений из 14, страница 1 из 1
25.08.2003, 10:37
    #32245843
guest on forum
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатели . . .
как можно объявить указатель на TCheckBox.Checked ?

пишу
var
pChecked: ^boolean;
begin
pChecked:=@cbOnLine.Checked;

неработает, объявить указатель на TCheckBox.Checked тоже неполучается
вразумите плиз ламера
...
Рейтинг: 0 / 0
25.08.2003, 11:01
    #32245873
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатели . . .
начнем с того что адрес таким способом не получишь...
а потом, зачем тебе указатель на логический тип?
и тем более на свойство класса?
есть конечно варианты... хотя я не уверен что они отработают, ты лучше скажи зачем? может есть лучше способ решить твою проблему?
...
Рейтинг: 0 / 0
25.08.2003, 11:28
    #32245920
Alexey Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатели . . .
Может, разумнее использовать указатель на класс.
var
pChecked: TCheckBox;
begin
pChecked:= cbOnLine;
...
Рейтинг: 0 / 0
25.08.2003, 11:31
    #32245924
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатели . . .
а смысл?
разве переменная класса не есть суть указатель?
...
Рейтинг: 0 / 0
25.08.2003, 11:34
    #32245929
zDIV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатели . . .
Теоритически (принципиально) - свойство класса (и конкретного объекта) не имеет адреса, поэтому замысел не осуществим (практически...), адреса могут иметь обеспечивающее это свойство поля и методы, которые также могут быть недосягаемыми (private), в любом случае до их указателей добраться непросто. Самый лучший вариант - объяснить проблему с целью изменить решение.
...
Рейтинг: 0 / 0
26.08.2003, 07:31
    #32246950
guest on forum
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатели . . .
собственно чего я хотел добиться:
есть форма с опциями программы
сейчас чтоб загружать/сохранять настройки проги у меня создан рекорд с из всех пропертей, из него идет запись на диск и чтение в него а затем каждыйй раз при изменении рекорда нужно все эти опции раскидывать по форме, а перед сохранением - собирать с формы . . .
я хотел создать что-нить вроде рекорда каждый элемент которого есть указатель на опцию - тогда можно сразу читать из опции и записывать туда

может я как-то нетак объяснил, надеюсь меня поймут
хотя вот zDIV писал что " адреса могут иметь обеспечивающее это свойство поля и методы, которые также могут быть недосягаемыми (private), в любом случае до их указателей добраться непросто" т.е. невозможно просто прочитать состояние CheckBox-a по указателю?
...
Рейтинг: 0 / 0
26.08.2003, 08:11
    #32246968
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатели . . .
в библиотеке RxLib есть компонент, который все это делает TFormStorage
Юзай и наслаждайся. Блевотека так себе, глючат компоненты для БД в dll-ках, но этот клас работает безубойно. При том что писать он может какк в файл так и в реестр, а метод работы с ним не меняется. Шикарно вобщем.
а так... если надо адреса свойств, покопай в направлении MethodAddress у класса TObject, наследником которого являются все компонены дельфяка. У него очень любопытные методы есть
...
Рейтинг: 0 / 0
26.08.2003, 08:36
    #32246984
Luchkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатели . . .
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
type
   TMyObject = class(TObject)
        private
            FMySuperField : Boolean;
            procedure SetMyField(Value : Boolean);
            function GetMyField : Boolean;
        published
            Checked : Boolean read GetMyField write SetMyField default False;
   end;

procedure TMyObject.SetMyField(Value : Boolean);
begin ...... end;

function TMyObject.GetMyField : Boolean;
begin ....... end;


приблизительно так описано большинство таких вещей, как TCombobox.Checked

вопрос. На что ты пытаешься получить указатель?!!
Если при попытке считать - вызывается одна процедура, записать - другая.
указатель имеет значение только на FMySuperField, но до него добраться - убиться можно, т.к. он, помимо всего прочего, может быть не в этом классе, а у одного из родителей объявлен...
...
Рейтинг: 0 / 0
26.08.2003, 09:26
    #32247025
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатели . . .
Luchkin Dmitry
но это работает как-то :))
...
Рейтинг: 0 / 0
26.08.2003, 11:56
    #32247286
Дмитрий Мыльников
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатели . . .
Во-первых, само свойство Checked, насколько я понимаю, не хранится в классе TCheckBox, а считывается из интерфейсного элемента WinAPI. Потому там и функции Getxxx и Setxxx.
Во-вторых, если речь идёт о работе с компонентами формы, то не факт, что указаетль будет всё время один и тот же.
В-третьих, я не совсем понял каким образом вы собираетесь сразу собирать все значения из записи через указатели? И что мешает вместо присвоения указателей написать собственно присвоение значений? Ведь в случае с указетелем всё равно не получится записать всю запись как один объект, а придётся писать отдельную строку для каждого поля записи.
Кстати, тем способом, который предполагалось использовать, насколько я понимаю, результат не достигается даже в случае, если указатели доступны. Вы получите в файле значения указетелей, а не значения переменных. В результате после считывания и попытки обращения по указателю программа скорее всего выдаст ошибку о недопустимом адресе, поскольку не факт, что указатели будут те же самые.
...
Рейтинг: 0 / 0
26.08.2003, 15:36
    #32247747
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатели . . .
А еще посмотри в VCL sources TReader, много полезного узнаешь :-)
...
Рейтинг: 0 / 0
27.08.2003, 07:42
    #32248359
guest on forum
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатели . . .
to All : спасибо за консультацию . . .


to Mik Prokoshin : я что-то ненашел TReader в VCL sources - там много ссылок на объект, но описания его нет
...
Рейтинг: 0 / 0
27.08.2003, 09:00
    #32248405
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатели . . .
TReader не совсем в VCL:
SOURCES\RTL\COMMON\CLASSES.PAS
...
Рейтинг: 0 / 0
27.08.2003, 14:08
    #32248914
CrazyMihey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
указатели . . .
Можешь ещё пробежаться по всем TControl ам на форме и, в зависимости от их типа, сохранить соответствующие Property и, скажем, в TStringList для последующиго сохранения в файл:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 Function SaveProp( Const F: TForm; Const L: TStrings ): Boolean;
  Var
   i: Integer;
  BEGIN                      { SaveProp }
   Try
    For i :=  0  to Pred( F.ControlCount ) do
     IF F.Controls is TCheckBox
      then L.Values[ F.Controls[i].Name ] := BoolToStr( ( F.Controls[i] as TCheckBox ).Checked, True )
      else
       IF F.Controls[i] is TEdit
        then L.Values[ F.Controls[i].Name ] := ( F.Controls[i] as TEdit ).Text
        else ;
    Result := True;
   Except
    on E: Exception do Result := False;
   End ;
  END ;                      { SaveProp }


[i]Изящно
и довольно универсально , возможно, не очень быстро, но не миллион же у Тебя Control ов на форме. Аналогично можно пихать и в Реестр, но для себя Я разработал класс, свойства которого автоматически сохраняются в Реестр в почётном (иерархическом) виде и использую переменную этого класса для хранения всех пераметров программы - немного коряво эти свойства описывать, зато потом никаких проблем. Там используется RTTI потомка TPersistent .
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / указатели . . . / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]