Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];

Вниз

Создание кнопки программно   Найти похожие ветки 

 
Mariya   (2007-10-02 15:27) [0]

Подскажите мне, пожалуйста, как создать динамически визуальный компонент (кнопку) на форме в Delphi.


 
clickmaker ©   (2007-10-02 15:30) [1]

Btn := TButton.Create(Self);
Btn.Parent := Self;
Btn.Left :=
Btn.Top :=
Btn.Caption := "Click me";
Btn.Visible := true;


 
clickmaker ©   (2007-10-02 15:31) [2]

ах да... еще

Btn.OnClick := ButtonClick;

procedure TForm1.ButtonClick(Sender: TObject);
begin

end;


 
Германн ©   (2007-10-02 15:35) [3]


> clickmaker ©   (02.10.07 15:31) [2]
>
> ах да... еще
>
> Btn.OnClick := ButtonClick;
>
> procedure TForm1.ButtonClick(Sender: TObject);
> begin
>
> end;
>

Тогда уж лучше
procedure TForm1.ButtonClick(Sender: TObject);
begin
 //
end;

а то после Ctrl+S процедура исчезнет :)


 
Mariya   (2007-10-02 15:45) [4]

Спасибо огромное! Получилось!


 
evvcom ©   (2007-10-02 16:01) [5]


> а то после Ctrl+S процедура исчезнет :)

Это если декларация в published. Я обычно даже обработчики, если не в design-time назначаю, помещаю в private, опять же если другие надобности не возникают. Тогда ничего не исчезает. :)


 
Германн ©   (2007-10-02 21:49) [6]


> evvcom ©   (02.10.07 16:01) [5]
>
>
> > а то после Ctrl+S процедура исчезнет :)
>
> Это если декларация в published.

Эээ. Это если декларация там, где она по умолчанию создаётся. Там, кстати, слова published нет. ;-(


 
korneley ©   (2007-10-02 23:31) [7]


>Германн ©
> ...Там, кстати, слова published нет

 так и не надо. По моему, это все таки public. Или нет?


 
Германн ©   (2007-10-03 00:07) [8]


> korneley ©   (02.10.07 23:31) [7]
>
>
> >Германн ©
> > ...Там, кстати, слова published нет
>
>  так и не надо. По моему, это все таки public. Или нет?
>

Нет. public там в другом месте. И явно указан.

Но ес-но в том месте, где обработчик создается по умолчанию подразумевается published, поскольку всё что там есть доступно через ИО.


 
korneley ©   (2007-10-03 00:16) [9]


> Германн ©

>  ...доступно через ИО...
Аргумент, однако... Пошел сделаю себе пару-тройку харакири...


 
Германн ©   (2007-10-03 00:26) [10]


> Пошел сделаю себе пару-тройку харакири...
>

"Достаточно одной таблэтки" (с)


 
korneley ©   (2007-10-03 00:42) [11]


> > Пошел сделаю себе пару-тройку харакири...> "Достаточно
> одной таблэтки" (с)
Да это я харакири с хачапури перепутал :) Но вот почему в дельфи секция published явно не прописывается - непонятно. Сиди, гадай по косвенным признакам (хотя, всего и один раз). При создании компонент(ов) понятно: хочешь видеть  свойство в ИО - помещай в published. Но! Они все в левой части! А то, что навешивается - в правой. Кроме дочерних (сыновьих?) компонент(ов). Они вообще сверху. Но вот так, с ходу, ни могу припомнить ни одной книги, в которой говорилось, что верхняя, неименованая секция - published.


 
Юрий Зотов ©   (2007-10-03 01:20) [12]

> korneley ©   (03.10.07 00:42) [11]

> Сиди, гадай по косвенным признакам

Или не гадай, а прочитай доку.

Для классов, откомпилированных с директивой {$M+} и их наследников дефолтная секция - published, для остальных - public.


 
Германн ©   (2007-10-03 01:20) [13]


> Но вот почему в дельфи секция published явно не прописывается
> - непонятно.

Так она предназначена именно для компонент, имхо. Для проекта она избыточна. Опять же имхо.

> Но вот так, с ходу, ни могу припомнить ни одной книги, в
> которой говорилось, что верхняя, неименованая секция - published.
>

Ну раз дядя Борланд её так не именует, значит и ни в какой книге (Флёнов идёт лесом) этого не прочитаешь! :-)


 
Германн ©   (2007-10-03 01:31) [14]


> Юрий Зотов ©   (03.10.07 01:20) [12]
>
> > korneley ©   (03.10.07 00:42) [11]
>
> > Сиди, гадай по косвенным признакам
>
> Или не гадай, а прочитай доку.
>
> Для классов, откомпилированных с директивой {$M+} и их наследников
> дефолтная секция - published, для остальных - public.
>

А какую доку, Юр?
Справка из Д6 говорит о..., но не объясняет ничего:
"The $M switch directive controls generation of runtime type information (RTTI). When a class is declared in the {$M+} state, or is derived from a class that was declared in the {$M+} state, the compiler generates runtime type information for fields, methods, and properties that are declared in a published section. If a class is declared in the {$M-} state, and is not derived from a class that was declared in the {$M+} state, published sections are not allowed in the class. Note that if a class is forward declared, the first declaration of the class must be declared with the $M switch.

Note: The TPersistent class defined in the Classes unit of the VCL and CLX is declared in the {$M+} state, so any class derived from TPersistent will have RTTI generated for its published sections. The VCL/CLX uses the runtime type information generated for published sections to access the values of a component"s properties when saving or loading form files. Furthermore, the IDE uses a component"s runtime type information to determine the list of properties to show in the Object Inspector.

There is seldom, if ever, any need for an application to directly use the $M compiler switch."


 
Юрий Зотов ©   (2007-10-03 01:39) [15]

> Германн ©   (03.10.07 01:31) [14]

У Конопки это есть точно. Видел где-то еще, но где - не помню.


 
korneley ©   (2007-10-03 01:40) [16]


> Германн ©

> А какую доку, Юр?
Вот я и говорю, что как-то... невнятно, что ли. И это при том, что Паскаль = однозначность толкования на этапе трансляции (ну, или предполагается, что так)


 
Германн ©   (2007-10-03 01:48) [17]


> Юрий Зотов ©   (03.10.07 01:39) [15]

Посмотрю завтра в книге Рэя. Сейчас уже лень искать в хардкопи. :)
Ну нет у меня Конопки  в эл -формате. :-(


 
Юрий Зотов ©   (2007-10-03 02:01) [18]

Справка D7, раздел Delphi Language Reference / Visibility of class members:

Members at the beginning of a class declaration that don"t have a specified visibility are by default published, provided the class is compiled in the {$M+} state or is derived from a class compiled in the {$M+} state; otherwise, such members are public.


 
Германн ©   (2007-10-03 02:09) [19]


> Юрий Зотов ©   (03.10.07 02:01) [18]
>
> Справка D7,

Ну нет  у меня Д7! Максмум - это Д6!
А BDS установлен в другой ОС :)


 
korneley ©   (2007-10-03 02:18) [20]


> Юрий Зотов ©  [18]
Ок, нашел. Картина мира опять приобрела несвойственную ей гармоничность ;-)


 
Mariya   (2007-10-03 09:18) [21]

Подскажите, а как создать программно Label? Задать шрифт, размер? Расположение?


 
Ega23 ©   (2007-10-03 09:25) [22]


> Подскажите, а как создать программно Label? Задать шрифт,
>  размер? Расположение?


Аналогично как и TButton


 
clickmaker ©   (2007-10-03 09:48) [23]


> [21] Mariya   (03.10.07 09:18)

Огласите весь список, пожалста


 
Mariya   (2007-10-03 10:32) [24]

lbl:=TLabel.Create(Form1);
Lbl.Parent:=Form1;
lbl.Caption:=Ini.ReadString("Label", "lbl1", "Добро пожаловать!");
lbl.Font.Size:=20;
lbl.Font. (должен быть жирный, не знаю как правильно написать!)

Как правильно задать, чтобы было в центре сверху формы (типа aligned:=center; top? не знаю, в общем заголовок!)
lbl.Left:=?
lbl.Top:=?
lbl.Height:=?
lbl.Width:=?


 
Palladin ©   (2007-10-03 10:37) [25]

lbl.Font.Style:=[fsBold];

lbl.Left:=0;
lbl.Top:=0;
lbl.Width:=ClientWidth;
lbl.Height:=по вкусу


 
clickmaker ©   (2007-10-03 10:37) [26]


> чтобы было в центре сверху формы

элементарная арифметика

> должен быть жирный, не знаю как

lbl.Font.Style := [fsBold];


 
Mariya   (2007-10-03 12:44) [27]


> clickmaker


> lbl.Font.Style := [fsBold];

работает, спасибо.


 
{RASkov} ©   (2007-10-03 13:18) [28]

> чтобы было в центре сверху формы

Выставить метке Align = alTop и Alignment = taCenter


 
Palladin ©   (2007-10-03 13:38) [29]


> {RASkov} ©   (03.10.07 13:18) [28]

Не знаю как в остальных Delphi, но в D6 TLabel таким свойством не обладает


 
Mariya   (2007-10-03 14:16) [30]


> D6

Пишу в D6 пришлось высчитывать математически, получилось. Все встало на место. Кнопки я динамически создала, как прописать в них правильно:
ShellExecute(handle, nil, "WINWORD.EXE", NiL, NiL, SW_SHOWNORMAL);
в bottone если создавать его с панели, то так, а как в динамически созданном?


 
Сергей М. ©   (2007-10-03 14:25) [31]


> высчитывать математически


Мдя..

Вычерчивать геометрически
Выпекать кулинарически
Вырождаться генеалогически
..
)


 
Плохиш ©   (2007-10-03 14:33) [32]


> Mariya   (03.10.07 14:16) [30]

Может, ну его нафик, это программированние?
Наймите программиста...


 
Mariya   (2007-10-03 16:05) [33]


> Наймите программиста...


Ох, нелегкая жизнь :((, я им сейчас здесь и являюсь!!!


 
Dib@zol ©   (2007-10-03 16:25) [34]

> Наймите программиста...

Наймите меня!!! гыгыгы...

Создать свою оконную процедурку для кнопок, через SetWindowLong повесить её поверх основной и по BM_CLICK делать то что надо.


 
Dib@zol ©   (2007-10-03 16:25) [35]

эт я в смысле ответил на [30].


 
Mariya   (2007-10-03 16:52) [36]

И все же как программно прописать на динамически созданной кнопке, что она должна открыть какой-нибудь экзешник!


 
Kolan ©   (2007-10-03 17:01) [37]

> И все же как программно прописать на динамически созданной
> кнопке, что она должна открыть какой-нибудь экзешник!

Назначить им обработчики нажатия&#133


 
Dib@zol ©   (2007-10-03 17:07) [38]

function Obrabotcik_dinamiceskoi_knopki_Button1(hWnd: HWND; Msg: LongInt; wParam, lParam: Longint): longInt; stdcall;
begin
 if Msg = BM_CLICK then begin
   Zapusk_kakoynibud_progi;
 end;
 Result:=CallWindowProc(Pointer(Button1.Tag), hWnd, Msg, wParam, lParam);
end;

...

Button1.Tag:=SetWindowLong(Button1.Handle, GWL_WNDPROC, LongInt(@Obrabotcik_dinamiceskoi_knopki_Button1));


 
Юрий Зотов ©   (2007-10-03 18:38) [39]

> Dib@zol ©   (03.10.07 17:07) [38]

Скажите, а нет ли способа попроще? Может быть, есть? И, может быть, даже намного проще?


 
Zeqfreed ©   (2007-10-03 18:39) [40]

> Dib@zol ©   (03.10.07 17:07) [38]

Ой, мамочки.



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.04 c
2-1191918318
Riply
2007-10-09 12:25
2007.10.28
Внутренняя механика работы NtOpenFile.


11-1174582796
ElectriC
2007-03-22 19:59
2007.10.28
Collapse


2-1191423908
Kolan
2007-10-03 19:05
2007.10.28
Как поймать клик по Табу в TabControl е?


3-1182311007
O.O
2007-06-20 07:43
2007.10.28
Исправить ХП из программы


2-1191309484
Alex7
2007-10-02 11:18
2007.10.28
Desc - сортировка ADODataSet используя IndexFieldNames





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский