Форум: "Начинающим";
Текущий архив: 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]> И все же как программно прописать на динамически созданной
> кнопке, что она должна открыть какой-нибудь экзешник!
Назначить им обработчики нажатия…
← →
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