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

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

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

может я как-то нетак объяснил, надеюсь меня поймут
хотя вот zDIV писал что " адреса могут иметь обеспечивающее это свойство поля и методы, которые также могут быть недосягаемыми (private), в любом случае до их указателей добраться непросто" т.е. невозможно просто прочитать состояние CheckBox-a по указателю?
...
Рейтинг: 0 / 0
указатели . . .
    #32246968
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в библиотеке RxLib есть компонент, который все это делает TFormStorage
Юзай и наслаждайся. Блевотека так себе, глючат компоненты для БД в dll-ках, но этот клас работает безубойно. При том что писать он может какк в файл так и в реестр, а метод работы с ним не меняется. Шикарно вобщем.
а так... если надо адреса свойств, покопай в направлении MethodAddress у класса TObject, наследником которого являются все компонены дельфяка. У него очень любопытные методы есть
...
Рейтинг: 0 / 0
указатели . . .
    #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
указатели . . .
    #32247025
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Luchkin Dmitry
но это работает как-то :))
...
Рейтинг: 0 / 0
указатели . . .
    #32247286
Дмитрий Мыльников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, само свойство Checked, насколько я понимаю, не хранится в классе TCheckBox, а считывается из интерфейсного элемента WinAPI. Потому там и функции Getxxx и Setxxx.
Во-вторых, если речь идёт о работе с компонентами формы, то не факт, что указаетль будет всё время один и тот же.
В-третьих, я не совсем понял каким образом вы собираетесь сразу собирать все значения из записи через указатели? И что мешает вместо присвоения указателей написать собственно присвоение значений? Ведь в случае с указетелем всё равно не получится записать всю запись как один объект, а придётся писать отдельную строку для каждого поля записи.
Кстати, тем способом, который предполагалось использовать, насколько я понимаю, результат не достигается даже в случае, если указатели доступны. Вы получите в файле значения указетелей, а не значения переменных. В результате после считывания и попытки обращения по указателю программа скорее всего выдаст ошибку о недопустимом адресе, поскольку не факт, что указатели будут те же самые.
...
Рейтинг: 0 / 0
указатели . . .
    #32247747
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще посмотри в VCL sources TReader, много полезного узнаешь :-)
...
Рейтинг: 0 / 0
указатели . . .
    #32248359
guest on forum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to All : спасибо за консультацию . . .


to Mik Prokoshin : я что-то ненашел TReader в VCL sources - там много ссылок на объект, но описания его нет
...
Рейтинг: 0 / 0
указатели . . .
    #32248405
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TReader не совсем в VCL:
SOURCES\RTL\COMMON\CLASSES.PAS
...
Рейтинг: 0 / 0
указатели . . .
    #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
14 сообщений из 14, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / указатели . . .
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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