Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Форма в качестве указателя... Передача формы в качестве параметра 
:(
    Опции темы
sergio_1982
Дата 11.9.2006, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.9.2006

Репутация: нет
Всего: нет



Здраствуйте Ув. знатоки ....

Вот появилась одна проблемка.
Значит идея состоит в том, что бы передать форму в качестве параметра в процедуру - и там выполнить определенные действия над формой.

У меня до этого работало все на обычных TWinControl компонентах ...

Что я делал ... 
Код

[B]type[/B]
 pWind  = ^TForm;
 ...
 procedure setWindowSize(form : pWind; ttType : TTableType; tpForm : Integer = 0); (*0 - справочник, 1 - окно редактирования *)

[B]implementation[/B]

procedure setWindowSize(form : pWind; ttType : TTableType; tpForm : Integer = 0); (*0 - справочник, 1 - окно редактирования *)
var
 pfx : String;
begin
 if tpForm = 0 then
  pfx := '_sprv'
 else
  pfx := '_frms';
 
  form.Width       := StrToInt(readFromReestr('WindowProp\'+TTypeToStr(ttType)+pfx,'Width','650'));
  form.Height      := StrToInt(readFromReestr('WindowProp\'+TTypeToStr(ttType)+pfx,'Height','480'));
  form.Top         := StrToInt(readFromReestr('WindowProp\'+TTypeToStr(ttType)+pfx,'Top','240'));
  form.Left        :=  StrToInt(readFromReestr('WindowProp\'+TTypeToStr(ttType)+pfx,'Left','295'));
  form.WindowState := TWindowState(StrToInt(readFromReestr('WindowProp\'+TTypeToStr(ttType)+pfx,'State','0')));
end;


Это код функции ...
Вызываю я ее в OnShow 

setWindowSize(@fSpravochnick,ttType);

При этом вылетает окошко - Ацес денат ....
Кто то сталкивался с такой штукой?
PM MAIL   Вверх
Yanis
Дата 11.9.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Интересно ты обращаешься к свойствам типизированого указателя.... Например form.Width я думаю нужно записать как form^.width smile Может в этом проблема?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Snowy
Дата 11.9.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



А зачем указатель?
Так и напиши:
procedure setWindowSize(form : TForm; ttType : TTableType; tpForm : Integer = 0); (*0 - справочник, 1 - окно редактирования *)
И вызов
setWindowSize(fSpravochnick, ttType);
PM MAIL   Вверх
sergio_1982
Дата 11.9.2006, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.9.2006

Репутация: нет
Всего: нет



Собственно говоря ни так ни так не прошло smile ...
В том то и дело - что работать должно ...
user posted image

А почему не работает не приложу ума ...
PM MAIL   Вверх
Alexeis
Дата 11.9.2006, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Может с ttType проблема?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 11.9.2006, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



А как вызываешь?
А ttType создан? 
PM MAIL   Вверх
Yanis
Дата 11.9.2006, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Snowy @  11.9.2006,  17:49 Найти цитируемый пост)
А ttType создан?  

А это разве не перечислимый тип?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
sergio_1982
Дата 11.9.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.9.2006

Репутация: нет
Всего: нет



ttType - это есть переменная, и она как бы не влияет на чтения параметров формы ...
он передается лишь для того, что бы в реестре создавалась ветка для передаваемого типа окна...

Код

type
 TTableType = (ttEdinicu,ttValuts,ttFirms);
 TTypeEnum  = (tpInt,tpStr,tpFlt);

 pGrid  = ^TDBGrid;
 pWind  = ^TForm;



Странно как то .. вот для pGrid  = ^TDBGrid; все работает ... и можна прочесть и записать данные в свойства грида ...
Чем же так отличается ФОРМА ... smile
PM MAIL   Вверх
Alexeis
Дата 11.9.2006, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



TTypeToStr - нет такой стандартной функции, хотелось бы взглянуть на ее код...


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Yanis
Дата 11.9.2006, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



А ещё покажи write\readFromReestr


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Snowy
Дата 11.9.2006, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(sergio_1982 @  11.9.2006,  17:01 Найти цитируемый пост)
Странно как то .. вот для pGrid  = ^TDBGrid
Ничего странного. Просто грид - он и есть грид. А форма наследуется. А работать с наследником через указатель - не очень хорошая идея.
PM MAIL   Вверх
sergio_1982
Дата 11.9.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.9.2006

Репутация: нет
Всего: нет



Код

procedure WriteToReestr(Path : String; Key : String; Val : String);
var
  Reg : TRegistry;
  str : String;
begin
  str := 'SOFTWARE\icsVSESVIT\'+Path;

  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_CURRENT_USER;
  Reg.OpenKey(str,true);

  try
   Reg.WriteString(Key,Val);
  finally
   Reg.CloseKey;
   Reg.Free;
  end;
end;

function readFromReestr(Path : String; Key : String;DefVal : String):String;
var
  Reg : TRegistry;
  str : String;
begin
 str := 'SOFTWARE\icsVSESVIT\'+Path;

 Reg := TRegistry.Create;
 Reg.RootKey := HKEY_CURRENT_USER;
 Reg.OpenKey(str,true);

 try
  Result := Reg.ReadString(Key);
  if Result = '' then
   Result := DefVal;
 finally
  Reg.CloseKey;
  Reg.Free;
 end;
end;

PM MAIL   Вверх
Snowy
Дата 11.9.2006, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(Snowy @  11.9.2006,  16:49 Найти цитируемый пост)
А как вызываешь?


PM MAIL   Вверх
Yanis
Дата 11.9.2006, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



sergio_1982,
А F7 не пробовал?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
sergio_1982
Дата 11.9.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.9.2006

Репутация: нет
Всего: нет



Цитата

Цитата(Snowy @  11.9.2006,  16:49 Найти цитируемый пост)
А как вызываешь?



Код

saveWindowSize(@fSpravochnick,ttType);


Добавлено @ 17:52 
Цитата

А F7 не пробовал?


Пробывал ....
Вылетает со строки 
Код

WriteToReestr('WindowProp\'+TTypeToStr(ttType)+pfx,'Width',IntToStr(form.Width));


Приэтом, даже если перед ней прописать приблизительно следующее:

Код

ShowMEssage(IntToStr(form.Width));

Именно на этой строке и вылетит ... т.е. дело скорее всего в form.Width.... Ну идею о том что форма не создалась еще - откинуть можна сразу .. потому, что вызываю процедуру я уже после создания формы (OnShow)...


PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0599 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.