Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 516

/ вопрос решён /

Уважаемые эксперты! Дайте нескольких примеров динамической установки компонента не входящего в палитру (в идеале THeartMachine) без добавление в палитру компонентов. Пожалуйста комментируйте на уровне статей Ерёмина. Статья будет еще лучше!!!
Стива Тейксейра и Ксавье Пачеко не понимаю.
Ответа могу подождать до чемпионата мира по футболу...
За этот вопрос уже получал "отлуп" от самого Доктора наук min@y™
28 сентября 2013 . Я пока умнее не стал.

Примечание #1 (8 марта 2014, 19:15):
THeartMachine отменяется. Жду других примеров от экспертов "посетителей" до не выше 9 класса.

zvygin1964 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: zvygin1964 (статус: Посетитель)
Вопрос отправлен: 24 февраля 2014, 17:14
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 26; последнее сообщение — 11 марта 2014, 17:03; участников в обсуждении: 2.

Страницы: [1] [2] [Следующая »]

min@y™

min@y™ (статус: Доктор наук), 24 февраля 2014, 17:28 [#1]:

Цитата (zvygin1964):

Дайте нескольких примеров динамической установки компонента не входящего в палитру (в идеале THeartMachine) без добавление в палитру компонентов.

Ты хочешь установить компонент, не устанавливая компонент? Или я чойто не понимаю?

Цитата (zvygin1964):

Стива Тейксейра и Ксавье Пачеко не понимаю.

Найди книжку на русском языке, тогда поймёшь.

Цитата (zvygin1964):

За этот вопрос уже получал "отлуп" от самого Доктора наук min@y™ 28 сентября 2013 .

Где? Какой № вопроса?

Цитата (zvygin1964):

Я пока умнее не стал.

Какая жаль! Почему?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zvygin1964

zvygin1964 (статус: Посетитель), 24 февраля 2014, 17:50 [#2]:

Эту книжку на русском языке подарили мне вы. Вопрос # 6 478. Да ничего и с таким "чердаком" живу нормально.
min@y™

min@y™ (статус: Доктор наук), 24 февраля 2014, 18:24 [#3]:

На самый главный мой вопрос ты опять ответил игнором. Ну почему?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 24 февраля 2014, 19:56 [#4]:

Ну написал я тебе пример. Так сойдёт?

Скачать и посмотреть.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zvygin1964

zvygin1964 (статус: Посетитель), 3 марта 2014, 21:13 [#5]:

Да. Использовать не устанавливая в палитру.
Как например использовать ваш исходник:
{
HRT := THRTimer.Create;
HRT.StartTimer;  Сброс таймера в ноль
HRT.ReadTimer;   Возвращает отсчитанное время в миллисекундах
начиная со времени старта
}
 
unit HRTimer;
 
interface
 
uses Windows;
 
type
  // --------------------- Класс - высокоточный таймер -------------------------
  THRTimer = class(TObject)
    constructor Create;
    function StartTimer: Boolean; // Обнуление таймера
    function ReadTimer: Double;   // Чтение значения таймера в миллисекундах
  private
    StartTime: Double;
    ClockRate: Double;
  public
    Exists: Boolean;    // Флаг успешного создания таймера
  end;
 
var
  Timer: THRTimer; // Глобальая переменная. Создаётся при запуске программы
 
{ Фукнция высокоточной задержки.
 Delphi:
   Синтаксис: function HRDelay(const Milliseconds: Double): Double;
   Milliseconds: Double - задержка в миллисекундах (может быть дробной)
   Результат функции - фактически произошедшая задержка с погрешностью.
   Пример вызова функции: X:= HRDelay(100.0); или HRDelay(100.0);
 
 C++Builder:
   Синтаксис: double HRDelay(const double Milliseconds);
   Double Milliseconds - задержка в миллисекундах (может быть дробной)
   Результат функции - фактически произошедшая задержка с погрешностью.
   Пример вызова функции: double X = HRDelay(100.0); или HRDelay(100.0);}
function HRDelay(const Milliseconds: Double): Double;
 
implementation
 
function HRDelay(const Milliseconds: Double): Double;
begin
  Timer.StartTimer();
  repeat
    Result:= Timer.ReadTimer();
  until Result >= Milliseconds;
end;
 
{ THRTimer }
 
constructor THRTimer.Create;
var
  QW: LARGE_INTEGER;
begin
  inherited Create;
  Exists := QueryPerformanceFrequency(Int64(QW));
  ClockRate := QW.QuadPart;
end;
 
function THRTimer.StartTimer: Boolean;
var
  QW: LARGE_INTEGER;
begin
  Result := QueryPerformanceCounter(Int64(QW));
  StartTime := QW.QuadPart;
end;
 
function THRTimer.ReadTimer: Double;
var
  ET: LARGE_INTEGER;
begin
  QueryPerformanceCounter(Int64(ET));
  Result := 1000.0 * (ET.QuadPart - StartTime) / ClockRate;
end;
 
initialization
  Timer:= THRTimer.Create();
 
finalization
  Timer.Free();
 
end.
min@y™

min@y™ (статус: Доктор наук), 3 марта 2014, 21:49 [#6]:

Цитата (zvygin1964):

Да. Использовать не устанавливая в палитру.

Пример смотрел?

Цитата (zvygin1964):

Как например использовать ваш исходник

THRTimer - это не компонент, его на форму не положишь. Но, тем не менее, в самом модуле, который ты тут выложил, в комментариях я написал, как его использовать, ёмаё! К тому же, достаточно этот модуль прописать в uses в своём проекте, и тогда будет доступен один глобальный экземпляр таймера по переменной Timer: THRTimer; он создастся и удалится автоматически при старте и завершении работы приложения соответственно.

З.Ы. Кстати, идея таймера не моя, я просто собрал функции в класс, немного доработал напильником кое-что и сделал отдельный модуль для удобства.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zvygin1964

zvygin1964 (статус: Посетитель), 4 марта 2014, 21:54 [#7]:

Пример не посмотрел - http://zalil.ru/ не доступен.
"Скачать и посмотреть." видел. Я и без этого знал, что вы можете всё (но там вы использовали компонент уже установленный в палитру).
Оказывается меня интересует именно использование модулей.
unit form;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids, Menus, Buttons, HRTimer;
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Timer1: TTimer;
    Memo2: TMemo;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  TimInc: Integer;
 
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
 TimInc:=0;//присваиваю начальное значение
 Timer:= HRDelay(100.0);// Incompatible types: 'THRTimer' and 'Double'
 
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  TimInc:=TimInc+1; //увеличиваю на постоянное число
  Memo1.Lines.Add(IntToStr(TimInc));//вывожу результат
end;
end.


Выдало ошибки:
-Incompatible types: 'THRTimer' and 'Double'
пробовал FloatToStr не помогает, наверное нужно преобразовать types: 'THRTimer' в 'String' ?
-[Fatal Error] Timer.dpr(5): Could not compile used unit '..\..\25.12.13\test\form.pas' ,
а ведь в папку с проектом я положил HRTimer.pas
значит файл HRTimer.pas делал неправильно.


Где посмотреть создание файла *.pas (сформулируйте гугл запрос).
Пожалуйста!
min@y™

min@y™ (статус: Доктор наук), 4 марта 2014, 22:25 [#8]:

Цитата (zvygin1964):

Я и без этого знал, что вы можете всё

Это неправда!

Цитата (zvygin1964):

но там вы использовали компонент уже установленный в палитру

Это тоже неправда. Мои действия полностью соответствовали условию задачи:

Цитата (zvygin1964):

без добавление в палитру компонентов

То есть, я:

  1. создал новый проект с формой;
  2. взял модуль с компонентом и скопировал его в папку с проектом;
  3. переименовал модуль в uScopeMeter.pas;
  4. добавил этот модуль в раздел uses модуля главной формы;
  5. переименовал в модуле uScopeMeter.pas класс THeartMachine в TScopeMeter;
  6. положил на форму кнопку, в обработчике события OnClick которой сделал динамическое (во время выполнения приложения) создание компонента TScopeMeter на форме, а точнее - на панели (для красоты).

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 4 марта 2014, 22:29 [#9]:

Цитата (zvygin1964):

Пример не посмотрел - http://zalil.ru/ не доступен.

Надо заходить сюда почаще, ибо файлы в zalil.ru имеют срок хранения.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 4 марта 2014, 22:47 [#10]:

Цитата (zvygin1964):

Выдало ошибки: -Incompatible types: 'THRTimer' and 'Double'

Совершенно правильно компайлер ругнулся. Скажи, что ты хотел сделать этим присваиванием?
Timer:= HRDelay(100.0); // что за бред???!!!111

Цитата (zvygin1964):

а ведь в папку с проектом я положил HRTimer.pas

Молодец. Хотя это и не обязательно, ибо можно заставить компайлер подцеплять нужные модули из любой папки.

Цитата (zvygin1964):

значит файл HRTimer.pas делал неправильно.

Это абсолютно НЕ значит, что модуль сделан неправильно. Это значит, что ты его неправильно используешь, а также это значит, что ты вообще не понимаешь, что делаешь.

Цитата (zvygin1964):

Где посмотреть создание файла *.pas (сформулируйте гугл запрос). Пожалуйста!

Ну, в delphi 7, например, это делается вот так:

Вот тебе гугл-запрос.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zvygin1964

zvygin1964 (статус: Посетитель), 8 марта 2014, 13:15 [#11]:

"Timer:= HRDelay(100.0); // что за бред?",- я так хотел запустить таймер.
"Гугл-запрос" звучит как:"delphi модуль структура" (переписал его сюда, пока он не сломался).
Ваш урок о подключении модуля получился замечательным! Такого в Гугле даже близко ничего нет.
Все получилось:
-в бесконечном цикле из ваших таймер-задержек наблюдаю их окончание;
-вижу их действительную продолжительность с какой-то погрешностью (относительно свойств материнской платы)!!! Это здорово. Это можно потрогать и использовать.
unit form;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,    StdCtrls, ExtCtrls, Grids, Menus, Buttons,HRTimer;
type
  TForm1 = class(TForm)
    Memo1: TMemo;   {счетчик произошедших задержек HRDelay(  )}
    Button1: TButton;  //запускает бесконечный цикл задержек уважаемого  min@y™
    Button2: TButton;  //останавливает бесконечный цикл, нажать перед выходом из программы!!!
    Memo3: TMemo;     //фактически произошедшая задержка с погрешностью
 
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  TimInc: Integer;
  TimerMinayTM:String ;
  TimMinay:Double;
  Timer: THRTimer;
  Stop: Boolean = False;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
  TimInc:=1;//присваиваю начальное значение
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Button2.Enabled:=True;
  Button1.Enabled:=False;
  Stop:=False;
  while not(Stop) do
  begin
    TimMinay:= HRDelay(1000.0);
    TimerMinayTM:=FloatToStr(TimMinay);// а это уже можно увидеть
    TimInc:=TimInc+1; //увеличиваю на постоянное число
    Memo3.Lines.Add(IntToStr(TimInc));
    Memo1.Lines.Add(TimerMinayTM); //вывод полученной задержки
    Application.ProcessMessages
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  Stop:=True;
  Button2.Enabled:=False;
  Button1.Enabled:=True;
end;
end.
min@y™

min@y™ (статус: Доктор наук), 8 марта 2014, 13:30 [#12]:

var
  Form1: TForm1;
  TimInc: Integer;
  TimerMinayTM:String ;
  TimMinay:Double;
  Timer: THRTimer; // это лишнее, убери.
  Stop: Boolean = False;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 8 марта 2014, 19:21 [#13]:

Цитата (zvygin1964):

Жду других примеров от экспертов "посетителей" до не выше 9 класса.

А я-то чем не угодил?
unit Main;
 
interface
 
uses
  Windows, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, uScopeMeter,
  StdCtrls, ExtCtrls, ComCtrls;
 
type
  TMainForm = class(TForm)
    TestPanel: TPanel;
    CreateButton: TButton;
    Timer: TTimer;
    CountTrackBar: TTrackBar;
    CountLabel: TLabel;
    procedure CreateButtonClick(Sender: TObject);
    procedure TimerTimer(Sender: TObject);
    procedure CountTrackBarChange(Sender: TObject);
  private
    { Private declarations }
  public
    FMeter: TScopeMeter; // переименованный THeartMachine (модуль uScopeMeter.pas)
  end;
 
var
  MainForm: TMainForm;
 
implementation
 
{$R *.dfm}
{$R WindowsXP.res}
 
procedure TMainForm.CreateButtonClick(Sender: TObject);
begin
  // создание по кнопке сделал для наглядности процесса.
 
  // создаю компонент
  FMeter:= TScopeMeter.Create(Self);
 
  // устанавливаю некоторые свойства компонента
  FMeter.Parent:= TestPanel;
  FMeter.Align:= alClient;
  FMeter.ColorGrid:= clNavy;
  FMeter.HGridCount:= 11;
  FMeter.HTickCount:= 40;
  FMeter.ShowHint:= True;
 
  // запускаю рисование графика
  CreateButton.Enabled:= False;
  Timer.Enabled:= True;
end;
 
procedure TMainForm.TimerTimer(Sender: TObject);
var
  Index: Integer;
begin
  if not Assigned(FMeter)
    then Exit;
 
  for Index:= 0 to CountTrackBar.Position - 1 do
    FMeter.AddPoint(Index, Random(FMeter.Max) + 1, Format('График %d', [Index + 1]));
end;
 
procedure TMainForm.CountTrackBarChange(Sender: TObject);
begin
  CountLabel.Caption:= 'Графиков: ' + IntToStr(CountTrackBar.Position);
end;
 
end.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 8 марта 2014, 23:57 [#14]:

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zvygin1964

zvygin1964 (статус: Посетитель), 9 марта 2014, 22:18 [#15]:

Да всем угодили. Но для меня этот пример очень сложный.
Может какие школьники подбросят пример по проще?
Пока ищу как сделать в нем эти ...(наследники что-ли):
TestPanel: TPanel;
CreateButton: TButton;
Timer: TTimer;
CountTrackBar: TTrackBar;
CountLabel: TLabel; //.


А вчера, 22:57 [#14] это чего за штуковина?
min@y™

min@y™ (статус: Доктор наук), 9 марта 2014, 23:50 [#16]:

Цитата (zvygin1964):

Да всем угодили. Но для меня этот пример очень сложный. Может какие школьники подбросят пример по проще?

У меня плохие новости: этот пример САМЫЙ простой, проще некуда.

Цитата (zvygin1964):

Пока ищу как сделать в нем эти ...(наследники что-ли):

Какие нахрен наследники?! Это имена полей-переменных - компонентов, лежащих на форме, т.е. просто идентификаторы, которые могут быть, в принципе, любыми! Это я их так обозвал. Компилятору пофигу.

Цитата (zvygin1964):

А вчера, 22:57 [#14] это чего за штуковина?

А это QR-code. Расшифруй.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 9 марта 2014, 23:54 [#17]:

Блин, прям схема получилась. :)
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zvygin1964

zvygin1964 (статус: Посетитель), 10 марта 2014, 10:56 [#18]:

QR-code расшифровал. Но я не могу быстрее. Старый, ленивый, работаю по сменам (сплю-ем)...
А схема, типа метро в одном из городов, слишком мелкая, подробностей прочитать не могу.
zvygin1964

zvygin1964 (статус: Посетитель), 10 марта 2014, 12:16 [#19]:

Ура! Получилось с седьмого раза. Копилка для пива осталась с тем же номером (в ней есть цифры ...1299)?
min@y™

min@y™ (статус: Доктор наук), 10 марта 2014, 12:54 [#20]:

Цитата (zvygin1964):

Ура! Получилось с седьмого раза.

Чо получилось-то?

Цитата (zvygin1964):

Копилка для пива осталась с тем же номером (в ней есть цифры ...1299)?

Не, туда не надо. Щас у меня другие реквизиты. А что, хочешь угостить пивком? Не откажусь.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 26 февраля 2018, 06:26
Выполнено за 0.06 сек.
Рейтинг@Mail.ru