Конференция "Основная" » private|public разделы для программно создаваемой формы [WinXP]
 
  • mufan (06.04.08 18:01) [0]
    доброго времени суток всем!
    проблема такая: программно создаю MDI-дочернюю форму...
    допустим так:

    var
     new_project: TForm;
    ...
    begin
     new_project:=TForm.Create(self);
     new_project.Width:=500;
     new_project.Height:=500;
     new_project.FormStyle:=fsMDIChild;
    ...



    и есть желание добавить к форме этой, например, Property типа Integer и с именем MyField... как это сделать не подскажете???
  • {RASkov} © (06.04.08 18:05) [1]
    > [0] mufan   (06.04.08 18:01)
    > добавить к форме этой, например, Property типа Integer и
    > с именем MyField... как это сделать не подскажете???

    Никак.
    Нужно зарание описать тип, в данном случае класс родительской формы, со всеми необходимыми полями(свойствами)...
  • Семеныч (06.04.08 18:25) [2]
    > mufan   (06.04.08 18:01)

    Свойства принадлежат классу формы, а не самой форме. Программа же создает саму форму, а ее класс программист должен описать заранее, со всеми нужными ему полями, свойствами и методами.
  • Leonid Troyanovsky © (06.04.08 18:31) [3]

    > mufan   (06.04.08 18:01)  

    > и есть желание добавить к форме этой, например, Property
    > типа Integer и с именем MyField...

    SetProp(new_project.Handle, 'MyField', Value)

    --
    Regards, LVT.
  • mufan (06.04.08 18:54) [4]
    =[

    если я вас правильно понял... я должен был сделать что-то типа:

    type
     Tfrm_childwindow = class(TForm)
     public
       { Public declarations }
     foo: integer;  
     end;

    ...

    var
    new_project: Tfrm_childwindow;
    ...
    begin
    new_project:=Tfrm_childwindow.Create(self);
    new_project.Width:=500;
    new_project.Height:=500;
    new_project.FormStyle:=fsMDIChild;



    ошибку пишет при исполнении:
    "Project prog.exe raised exception class EResNotFound with message 'Resourse Tfrm_childwindow not found'"
  • {RASkov} © (06.04.08 19:12) [5]
    > [4] mufan   (06.04.08 18:54)
    > ошибку пишет при исполнении:

    Для форм нужны ресурсные файлы *.dfm

    Попробуй вариант [3].
  • mufan (06.04.08 19:14) [6]

    > SetProp(new_project.Handle, 'MyField', Value)

    решило проблему!

    всем большое спасибо за оперативную помощь!!!
  • Семеныч (06.04.08 23:02) [7]
    > mufan   (06.04.08 19:14) [6]

    Только надо иметь в виду, что это будет свойство окна в терминах Windows, а не свойство формы в терминах Delphi. С ним можно работать через GetProp и SetProp, но нельзя работать с использованием концепций ООП.
  • tesseract © (07.04.08 00:18) [8]

    > Только надо иметь в виду, что это будет свойство окна в
    > терминах Windows, а не свойство формы в терминах Delphi.
    >  С ним можно работать через GetProp и SetProp, но нельзя
    > работать с использованием концепций ООП.


    Чего это ? заводишь свойство - ту туда свой Set/GetProp. Не путай тёплое с мягким.

    ЗЫ: TCustomForm уже списали ? pulished от Public только в DesignTime отличаеться.
  • Семеныч (07.04.08 00:26) [9]
    > tesseract ©   (07.04.08 00:18) [8]

    Э-э-э... извините за вопрос, но Вы ветку, собственно говоря, читали?
  • icWasya © (08.04.08 15:36) [10]
    если делаете так

    type
    Tfrm_childwindow = class(TForm)
    public
      { Public declarations }
    foo: integer;  
    end;


    и не создаёте DFM, то вместо

    new_project:=Tfrm_childwindow.Create(self);


    нужно

    new_project:=Tfrm_childwindow.CreateNew(self);

  • Barsuk (08.04.08 19:01) [11]
    А можно поизвращаться, создать новую форму, добавить нужные Property и вызывать по new_project:=Tfrm_childwindow.Create(self); никаких ошибок не будет, только нужно еще убрать ее из списка Auto-Create forms.
  • tesseract © (08.04.08 20:34) [12]

    > Э-э-э... извините за вопрос, но Вы ветку, собственно говоря,
    >  читали?


    Читал. Просто высказывание ваше бредово несколько звучит. "Термины ООП " особенно порадовали.
  • Семеныч (08.04.08 20:48) [13]
    > tesseract ©   (08.04.08 20:34) [12]

    > Читал.

    Значит, "играл, но не угадал ни одной буквы". Потому что в [8] именно Вы, извините, спутали, как Вы изволили выразиться, "теплое с мягким".

    > Просто высказывание ваше бредово несколько звучит. "Термины ООП "
    > особенно порадовали.

    То есть: если Вы некоего высказывания не поняли, то оно бредовое. Что ж, такое замечательное свойство действительно некоторым индивидуумам присуще, но если бы Вы дали себе труд хоть немного подумать над [3] и [6], а потом еще и заглянуть в Win32 SDK, то вполне возможно, что смогли бы понять и то, о чем шла речь в [7].

    А также то, что бред написали именно Вы, в [8]. Спутав теплое с мягким.
  • tesseract © (08.04.08 21:01) [14]

    > [6], а потом еще и заглянуть в Win32 SDK, то вполне возможно,
    >  что смогли бы понять и то, о чем шла речь в [7].


    Я неплохо знаю SDK, ООП и COM - я сказал, что в любой класс можно добавить и GETPop и SetPop.  И пользоваться всеми преимуществами ООП. Так лихо закрутить фразу - это надо суметь.


    > Свойства принадлежат классу формы, а не самой форме.


    Про классовые методы я знаю - а вот про классовые свойства слышу впервые.  И что "Класс" не являеться описанием формы, и объект уже не властен над своими методами.....
  • Семеныч (08.04.08 21:26) [15]
    > tesseract ©   (08.04.08 21:01) [14]

    > Я неплохо знаю SDK

    В этом есть ОЧЕНЬ большие сомнения. Иначе Вы бы поняли, о чем шла речь в [3], [6] и [7].

    Если человек:

    - не знает, что у окон Windows бывают свойства;
    - не знает функций WinAPI для работы со свойствами окон;
    - не видит, что это за SetProp использована в [3];
    - и даже то, что первым параметром передается некий загадочный хэндл, ему тоже ни о чем не говорит;
    - но при этом заявляет "Я неплохо знаю SDK",

    то есть очень серьезные основания очень несерьезно к такому заявлению отнестись.

    > я сказал, что в любой класс можно добавить и GETPop и SetPop.
    > Так лихо закрутить фразу - это надо суметь.

    И верно. Так сказать банальность - это надо суметь. Но было бы еще лучше слово ПОП прямо так и написать - по-русски. LOL.

    > а вот про классовые свойства слышу впервые.

    Как много Вам открытий чудных
    Готовит просвещенья дух...

    Увы... Вы не понимаете азов ООП. Знаете их - это да. Но не понимаете их сути.

    Дружище, если при создании экземпляра класса некое свойство АВТОМАТИЧЕСКИ становится атрибутом ЛЮБОГО такого экземпляра, то это означает, что либо это свойство взялось с потолка, либо является атрибутом САМОГО класса. Ну а поскольку с потолка свойства не берутся, то...

    ================

    Резюме: читать Петцольда и Конопку.
  • tesseract © (08.04.08 21:35) [16]

    > Увы... Вы не понимаете азов ООП. Знаете их - это да. Но
    > не понимаете их сути.


    Это ВЫ их не понимаете, срочно прочитать про VMT. Свойства что появились в памяти ?  Назвать свойства классовыми - и тем более, что их НЕТ в классической теории ООП - или вы лично путаете их с полями......


    > ПОП прямо так и написать - по-русски. LOL.


    Привык к автодополнению кода, быват :-)


    > - не знает функций WinAPI для работы со свойствами окон;
    > - не видит, что это за SetProp использована в [3];


    Я WinApi с 95 знаю. Мне ЧГ, до фонаря какая там что используеться, что к классам они отношения не имеют это факт, но то что эти функции оптимизированы для классовой изоляции - тоже факт.


    > Резюме: читать Петцольда и Конопку.


    Кнута для начала прочитать. А не листать.


    > - и даже то, что первым параметром передается некий загадочный
    > хэндл, ему тоже ни о чем не говорит;


    Дескриптор, у вас очень плохой перевод. Это к слову  о ПОП о пониманию SDK.
  • Семеныч (08.04.08 21:41) [17]
    Так... диагноз ясен: воинствующий.
  • tesseract © (08.04.08 21:41) [18]

    > Так... диагноз ясен: воинствующий.


    Взаимно :-)
  • app © (09.04.08 15:12) [19]
    > tesseract  (08.04.2008 21:41:18)  [18]

    Кончайте перепалку, в конце концов на сайте есть чат для этого.
 
Конференция "Основная" » private|public разделы для программно создаваемой формы [WinXP]
Есть новые Нет новых   [134484   +49][b:0][p:0.001]