Отправляет email-рассылки с помощью сервиса Sendsay

Delphi для профессионалов

  Все выпуски  

Delphi для профессионалов - Вопрос-ответ


Информационный Канал Subscribe.Ru


eServer.ru :: Хостинг без ограничений!

Рассылка: Delphi для профессионалов

Количество подписчиков: 3113
Рассылка 'Delphi для профессионалов'

Выберите действие:
Заглавие (одной строкой) :
Содержание :

От кого :
Не показывать мой e-mail другим пользователям


Раздел "Вопрос-ответ"

 

Результаты

Вопрос №10: Многострочный CheckBox
Подскажите, как можно отобразить в стандартном CheckBox-е более одной строки текста? Где-то такое встречал в продуктах MS.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Ответ №1 (Антон): Сильно сомневаюсь что при написании своего софта в Мелкософте используют Delphi.
Для переноса на другую строку вообще то делают так: 'Line 1'#13#10'Line 2' (из хелпа),
но в checkbox так не работает, работает, например в tlabel, но они имеют разных предков.
tLabel рисует текст сам DrawText(Canvas.Handle, PChar(Text), Length(Text), Rect,Flags),
а tCheckBox, tButton так if Msg = WM_SETTEXT then SendDockNotification(Msg, WParam, LParam), то есть через api.
Так что проще написать свой компонент, или найти готовый..

Вопрос №12: Глобальные переменные
У меня такой вопрос как и где описать переменную чтобы сней можно было работать во всех формах. С Уважением Александр.
Предполагаемое решение
: Я делал следующим образом: создаем новый модуль UConsts.pas, например, опысываем там все ГЛОБАЛЬНЫЕ переменные и посе этого используем его во всех формах.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Ответ №1 (Прохоров Владимир Викторович): Я обычно делаю модуль Type.pas, куда помещаю глобальные переменные, константы, типы и процедуры..

Ответ №2 (agility@vologda.ru): Обычно я делаю следующим образом: описываю переменные в разделе PUBLIC главной формы. В этом случае переменные являются полями этой формы и к ним нужно обращаться следующим образом: например, Form1.i:=5;
P.S. от ведущего: А если нужно делать вызов из дочернего окна? И если добавляя модуль Unit***.pas возникает рекурсия? Первый вариант лучше.

Ответ №3 (vi): Можно создать новую форму "Глобальную", в которой заводить глобальные переменные, затем во всех остальных формах ссылаться на "Глобальную", должно получаться.

Вопрос №15: Массив объектов
Скажите пожалуйста, как создать массив объектов во время выполнения программы? Например, мне нужно создать n кнопок на форме, где n указывает пользователь. Эти кнопки по одной создавать получается, но вот в массиве - уже нет...
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Ответ №1 (Boris Semenko): Создавать кнопки по одной, а потом класть их в TObjectList.

Ответ №2 (Антон): Ну например так:

var
  Form1: TForm1;
  a:array of tbutton;
  x:integer;
procedure TForm1.FormCreate(Sender: TObject);
begin
  setlength(a,10);
  for x:=0 to 9 do begin
    a[x]:=tbutton.create(form1);
    a[x].Parent:=form1;
    a[x].Left:=10;
    a[x].Top:=x*30;
    a[x].Caption:='aaaa';
    a[x].OnClick:=button1click;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  for x:=0 to 9 do
    if (sender as tbutton)=a[x] then label1.Caption:=inttostr(x);
end;

Ответ №3 (Alexandr Belayev): Лучше создавать не массив, а список используя при этом класс TList. Функция создаёт необходимо кол-во кнопок, список fButtons:TList определён в секции private формы:

procedure Form1.CreateButtons(const ABtnsCount:integer);
var
  i:integer;
  lBtn:TButton;
begin
  for i:=0 to ABtnsCount-1 do
    begin
      lBtn:=TButton.Create(Self);
      fButtons.add(lBtn);
      lBtn.Parent:=self;
      // Тут должны идти настройки необходимых свойств созданной
      // кнопки.
    end;
end;

p.s. Если будут вопросы - пиши.

Ответ №4 (Хлынов Олег Викторович): Создай динамический массив с указателями на объекты.

Ответ №5 (Serega): Работает безотказно:

procedure TForm1.Button1Click(Sender: TObject);
var
  x, i   : Integer;
  Button : TButton;
begin
  x := strtoint(Edit1.Text);

  for i:=1 to x do begin
    Button := TButton.Create(nil);
    with Button do begin
      Parent := Application.MainForm;
      Caption := 'Кнопка' + inttostr(i);
      Top := i*30;
      Left := 10;
    end;
  end;
end;

Ответ №6 (Serega): Данный код создает по нажатии на Button1 новую Label. Используется динамический массив. Код легко адаптировать и, например, для TButton.

unit Unit1;


interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;


type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormDblClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    DynamicLabels:array of TLabel;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 SetLength(DynamicLabels,High(DynamicLabels)+2);
 DynamicLabels[High(DynamicLabels)]:=TLabel.Create(self);
 DynamicLabels[High(DynamicLabels)].Parent:=self;
 with DynamicLabels[High(DynamicLabels)] do
  begin
    Caption:=IntToStr(High(DynamicLabels)+1);
    Show;
    if High(DynamicLabels)= 0 then
      begin
        Left:=10;
        Top:=10;
      end else
      begin
        Left:=DynamicLabels[High(DynamicLabels)-1].Left;
        Top:=DynamicLabels[High(DynamicLabels)-1].Top+DynamicLabels[High(DynamicLabels)-1].Height+2;
      end;
    if Top+height>Form1.ClientHeight then
      begin
      left:=left+DynamicLabels[High(DynamicLabels)-1].width+2;
      top:=10;
    end;
    UpDate;
  end;
end;

procedure TForm1.FormDblClick(Sender: TObject);
begin
  timer1.Enabled:=not timer1.enabled;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Button1Click(self);
end;

end.

 

Новые вопросы

Вопрос №16: Работа с LPT как портом ввода/вывода
Как организовать ввод и вывод данных через LPT?
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №17: Blob-поля в базе MDB (Access)
Как правильно делать insert для blob полей в mdb базу?
Провайдер у меня Microsoft.Jet.OLEDB.4.0. Пробовал так
var energ:array [0..127]of byte;
begin
ADOTable1.Insert;
ADOTable1.FieldByName('user_id').asinteger:=12;
ADOTable1.FieldByName('number').asinteger:=1;
ADOTable1.FieldByName('spectr').SetData(@energ,true);
ADOTable1.Post;
end;
Если energ динамический массив, то ADOTable1.FieldByName('spectr').SetData(energ,true);
Ошибки он не выдает, но при чтении выдается абракадабра.
Читаю так же:
ADOTable1.FieldByName('spectr').GetData(energ,true);
Подскажите кто знает.
И еще, как выполнять не select запросы к ADO чтобы не выскакивала ошибка, что он ничего не возвращает, типа EOleException и EDatabaseError - ... not return result set.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №18: Вопрос о компонентах
Как можно добавить свойство к уже существующему компаненту?
Предполагаемое решение
: на основе оригинального компонента написать клон.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №19: Перетаскивание окна без рамки
Как перетаскивать окна без рамки (т. е. с Borderstyle="bsNone)."
Предполагаемое решение
: При нажатии кнопки мыши - если она находится на форме отправлять Windows сообщение, что под мышкой - заголовок окна.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №20: Обращение к динамически создаваемым кнопкам
Подскажите, можно ли создать массив кнопок т.е. на форме они размещаются в виде таблицы, и обращение к ним идет как к элнментам массива.?
Предполагаемое решение: Думаю, нет смысла повторяться: см. ответы на Вопрос №15 выше.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №21: Включение в Delphi-project другого exe-файла
Как можно включить в разрабатываемый проект готовый exe-файл?
Предполагаемое решение
: Вставить его в ресурс и откомпилить компилятором ресурсов. Далее читать из ресурса своего EXE-файла.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №22: ReadOnly аттрибут файлов?
Я сделал тест(опросник) для проверки студентов , но есть проблема не подключаются фаилы с вопросами если установить атрибут ReadOnly (чтоб не потерли). В институте WinNT4 если это важно.
Предполагаемое решение
: Если проблема именно в аттрибутах файлов, в чем я очень сомневаюсь, то потробуй поработать с переменной FileMode.
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №23: Как отобразить html документ на форме
Имеется html документ, например в текстовом файле. Как отобразить его на форме?
Предполагаемое решение
: А компонент TWebBrowser не подходит?
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №24: Отображение адреса значения в элементе типа TEdit
Как перевести адрес переменной в строчное представление? Видел, что в некоторых программах (omatic, например) указывается какое-либо значение, находящееся в памяти, и адрес этого значения. Так вот, хотелось бы видеть этот адрес не как указатель, а как строку. Подскажите, please!?
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).

Вопрос №25: Пример экспертов на Delphi
Не могли бы Вы написать пример Экспертов на Delphi! Мне очень интересно как они пишуться!
Предполагаемое решение: На этот вопрос есть поговорка: експерт не думает,- он знает! Как для меня - я не хотел бы быть экспертом, я хотел бы ДУМАТЬ - это самая лучшая тренировка для мозгов и путь к развитию. Да и вообще можешь наблюдать коды тех, кто пишет ответы на вопросы - там и найдешь профессионалный подход. Или это была просто ухмылка?
Предложить свой вариант решения можно здесь или воспользовавшись формой обратной связи (для HTML-формата).


Все вопросы присылайте по адресу: delphi-ask@igp.org.ua
Все ответы присылайте по адресу: delphi-reply@igp.org.ua
Все подсказки присылайте по адресу: delphi-hint@igp.org.ua

Со всем списком советов можно познакомиться по адресу: http://igp.org.ua/delphine/.
Наш проект Delphine можно найти по следующей ссылке: http://igp.org.ua/products/delphine/.

Заходите в наш форум: Форум Delphi-профессионалов. Адрес: http://igp.org.ua/cgi-bin/yabb/yabb.pl.
Здесь Вы найдете ответы на все Ваши вопросы!

Выберите действие:
Заглавие (одной строкой) :
Содержание :

От кого :
Не показывать мой e-mail другим пользователям



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное