Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2011, 03:45   #11
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
но все-таки интересно, почему так происходит?
почему стандартные компоненты не хотят реагировать на мои изменения?
Потому что папка \Lib с .dcu лежит в путях поиска компилятора, и папка \Source с .pas - нет.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 16.09.2011, 04:05   #12
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
надо сделать некий компонент, который бы реагировал на сообщения,
присылаемые приложению. не ему лично, а вообще приложению.

требования:
1. кидать на форму с помощью MyComponent.Create(Form1).
2. возможность создать несколько таких компонентов (все должны работать).
3. они могут не знать друг о друге.

какие будут идеи?
от чего будете наследоваться?
Такой компонент уже есть TApplicationEvents (вкладка Additional).

Если аналогичная функциональность нужна в моём компоненте - я просто воспользуюсь агрегацией (композицией).

Цитата:
а уж версию делфи я врят-ли сменю. уж больно она мне нравится.
у меня Delphi 10 lite. минус в том что в ней нету 80% компонентов, которые есть например в делфи7,
Сначала строим себе заборы, а потом сами же героически их преодолеваем. Чего бы не поставить нормальную версию со всеми компонентами?

Цитата:
допустим вы кидаете на форму две кнопки.
каждая из них должна будет изменять свое положение исходя из размеров формы.
Откройте для себя якоря (Anchors) или хотя бы код, специально предназначенный для контроля размеров:
Код:
    procedure AdjustClientRect(var Rect: TRect); virtual;
    procedure AdjustSize; override;
    procedure AlignControls(AControl: TControl; var Rect: TRect); virtual;
    procedure ArrangeControl(AControl: TControl; const ParentSize: TPoint; AAlign: TAlign;
      AAlignInfo: TAlignInfo; var Rect: TRect; UpdateAnchorOrigin: Boolean = False);
    function CanAutoSize(var NewWidth, NewHeight: Integer): Boolean; override;
    function CanResize(var NewWidth, NewHeight: Integer): Boolean; override;
    procedure ConstrainedResize(var MinWidth, MinHeight, MaxWidth,
      MaxHeight: Integer); override;
    procedure RequestAlign; override;
    procedure UpdateControlOriginalParentSize(AControl: TControl; var AOriginalParentSize: TPoint); virtual;
Цитата:
что вы об этом думаете?
Что это неправильно.

Наводящий вопрос: вот мне надо использовать два компонента в проекте. Один использует модифицированную вами VCL. Второй компонент - модифицированную VCL дяди Васи. И что теперь?

Расширение компонентов делать надо по правилам ООП - наследованием, агрегацией.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 16.09.2011, 04:41   #13
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

"И что теперь?"
Наводящий ответ: пишите на asm =)
а если серьезно, то у вас пока нет модифицированной нами VCL, так что вам не о чем беспокоиться.

"Такой компонент уже есть" ага! в делфи как я посмотрю вообще много чего "уже есть"...
вот только по моему опыту проще сделать свое, чем копаться в чужом, особенно если оно работает через-back.
кстати как оно работает? глянул тут что такое TApplicationEvents (оказывается он у меня есть о_О)...
в нем есть OnMessage, ну и что? создавать его для каждого своего компонента?
хотяя, если это будет работать, и будет хорошим тоном, то может это и заменит модификацию TApplication.
но если и так, то я хоть поизвращался немного... удовлетворил естественные потребности так сказать.

"Сначала строим себе заборы"
GunSmoker, в точку! =)
всей этой хренью я страдаю из спортивного интереса!
считайте что у меня хобби такое - изобретать велосипеды.

"Откройте для себя Anchors"
якоря мне не помогут =(
как мы уже знаем, мне немножко не по себе при использовании
стандартных компонентов, особенно если я не знаю как они работают.

"Чего бы не поставить нормальную версию со всеми компонентами?"
нет возможности сворачивать код процедуры/функции.
как без этого можно работать я не представляю...

Последний раз редактировалось xrob; 16.09.2011 в 04:55.
xrob вне форума Ответить с цитированием
Старый 16.09.2011, 12:10   #14
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Если очень уж нужно влезть в логику работы компонента без создания нового, можно заюзать класс-перехватчик (interceptor class), хотя по сути это "наследование самого себя"

Код:
unit Unit1;

interface

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

type
  TButton = class(StdCtrls.TButton)
  public
     procedure Click; override;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TButton.Click;
begin
  inherited Click;
  ShowMessage('Йа кнопко ' + Caption);
end;

end.
В 2007 появились class helpers

Код:
type
  TButtonHelper = class helper for TButton
    procedure Click;
  end;

   ...

  procedure TButtonHelper.Click;
  begin
    ShowMessage('Йа кнопко ' + Caption);
  end;
пыщь
JTG вне форума Ответить с цитированием
Старый 16.09.2011, 14:11   #15
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
так что такой вариант будет работать не более чем с двумя процедурами... а если их всего три?
сколько угодно.
Цитата:
стандартных компонентов, особенно если я не знаю как они работают.
сорцы открыты, да и якоря вполне просто работают, держат расстояние до выбраной границы родителя.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.09.2011, 16:14   #16
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

"TButton = class(StdCtrls.TButton)"
ого, не знал что так можно делать =)

"сорцы открыты"
Пепел Феникса, я уж говорил - проще написать свое, чем ковырять чье-то.
и очень интересно узнать как это можно больше двух процедур цепочку сделать.
xrob вне форума Ответить с цитированием
Старый 17.09.2011, 00:56   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

там получается по типу списка идет.
по такому же принципу кстати и в ссылке, и там без разницы сколько и чего применит этот метод.
принцип такой, изначально был обработчик у Forn1 от TForm
1)далее TRCButton заменяет его своим, запоминая старый.
имеем Form1-(использует)>TRCButton, RCButton1-(помнит)>TForm
при сообщении выходит так TRCButton->TForm
2)далее TCoolTrayIcon(к примеру) заменяет текущий обработчик Form1 своим, запоминая старый.
имеем Form1-(юзает)>TCoolTrayIcon, CoolTrayIcon1-(помнит)>TRCButton, RCButton1-(помнит)>TForm
при сообщении выходит так: TCoolTrayIcon->TRCButton->TForm.
и тд.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не изменяется интерфейс моей программы при переходе с Delphi 7 на Delphi 2010 Elvisnya Общие вопросы Delphi 3 28.04.2011 15:59
На Delphi 7 сделать игру кто хочет стать миллионером в delphi 7 666dart666 Помощь студентам 11 04.11.2010 17:57
Rad Studio 2011 XE: новое в Delphi, C++ Builder, RadPHP и Delphi Prism savva-paladin Софт 18 02.10.2010 20:24
Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью? redred Общие вопросы Delphi 10 11.12.2007 10:43
Как открыть БД, написанную в Delphi если нf другой машине Delphi нет? dagarik БД в Delphi 7 22.10.2007 17:54