powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Incompatible types: method pointer and regular procedure
9 сообщений из 9, страница 1 из 1
Incompatible types: method pointer and regular procedure
    #40057010
bzums
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
program ReportBuilder;

uses
  Winapi.Windows, .........

var
  myDesigner: TppDesigner;
  myReport: TppReport;
  procedure myClose(Sender: TObject; var Action: TCloseAction);

  procedure myClose(Sender: TObject; var Action: TCloseAction);
  begin
    if myDesigner.MyReport.Modified then begin
      if MessageDlg('Do you want to save the report?', mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrYes then
      begin
        MyReport.Template.SaveToFile;
      end;
    end;
  end;

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  myDesigner := TppDesigner.Create(Application);

  myReport := TppReport.Create(Application);
  myDesigner.Report := myReport;
  myDesigner.OnClose := myClose;
  myDesigner.ShowModal;

  Application.Run;
end.



Имеется кусок кода (открывалка отчетов).
Работает нормально, только без вызова myClose (Захотелось сдклать красиво, чтобы проверялось перед закрытием - нет ли открытых файлов).
Возможно проблема в том, что код непосредсственно в коде dpr файла, но возможно и нет.

То есть делаю по аналогии с примерами, где динамически создавалась кнопка и туду же и там же вешался обработчик.
У метода OnClose тип почему-то Handler , а у моей процедуры - method.
То есть ошибка [dcc32 Error] ReportBuilder.dpr(51): E2009 Incompatible types: 'method pointer and regular procedure'.
Как их подружить?

Так же в данном коде
Код: pascal
1.
procedure myClose(Sender: TObject; var Action: TCloseAction);

не видны обьекты
myDesigner и MyReport. Это тоже следствие того, что код в dpr прямо?


Что делать?

Заранее признателен за советы.
...
Рейтинг: 0 / 0
Incompatible types: method pointer and regular procedure
    #40057012
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bzumsЧто делать?

1. Изучить язык Дельфи.
2. Сделать myClose методом класса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Incompatible types: method pointer and regular procedure
    #40057016
bzums
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Первый пункт понятен, тут без вопросов.
Как любителю мне это сделать тяжело.

Второй пункт - Сделать myClose методом класса -тоже немного не понятен. Где это можно посмотреть.
В Дельфи 7 разве такое было?

Спасибо
...
Рейтинг: 0 / 0
Incompatible types: method pointer and regular procedure
    #40057019
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bzums
В Дельфи 7 разве такое было?
Это было в делфи 1. Код - дичь. Да и проверять надо на OnCloseQuery
...
Рейтинг: 0 / 0
Incompatible types: method pointer and regular procedure
    #40057021
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bzums
Код: pascal
1.
Winapi.Windows

Не припоминаю, чтобы это было в Delphi 7.
...
Рейтинг: 0 / 0
Incompatible types: method pointer and regular procedure
    #40057039
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
type
TMyReport = class(TppReport)
  procedure myClose(Sender: TObject; var Action: TCloseAction);
end;

var
  myDesigner: TppDesigner;
  myReport: TMyReport;

procedure TMyReport.myClose(Sender: TObject; var Action: TCloseAction);
begin
    if myDesigner.MyReport.Modified then 
      if MessageDlg('Do you want to save the report?', mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrYes then
        Template.SaveToFile;
end;

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  myDesigner := TppDesigner.Create(Application);

  myReport := TMyReport .Create(Application);
  myDesigner.Report := myReport;
  myDesigner.OnClose := myDesigner.myClose;
  myDesigner.ShowModal;

  Application.Run;
end.


[/quot]
...
Рейтинг: 0 / 0
Incompatible types: method pointer and regular procedure
    #40057043
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bzumsКак любителю мне это сделать тяжело.

Это ты, типа, на жалость давишь? "Подайте убогому инвалиду умственного труда"?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Incompatible types: method pointer and regular procedure
    #40057046
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bzums
Первый пункт понятен, тут без вопросов.
Как любителю мне это сделать тяжело.

Тогда остаётся нанять профессионала.

P.S. В седой древности писал я вот эту статью: http://rsdn.org/article/delphi/Handlers.xml В том числе в ней говорится о Вашей проблеме и о возможных путях её решения. Прочитайте и хоть секунду подумайте перед тем, как выбрать для использования наихудший.
...
Рейтинг: 0 / 0
Incompatible types: method pointer and regular procedure
    #40057142
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr
Код: pascal
1.
2.
3.
4.
5.
6.
procedure TMyReport.myClose(Sender: TObject; var Action: TCloseAction);
begin
    if myDesigner.MyReport.Modified then 
      if MessageDlg('Do you want to save the report?', mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrYes then
        Template.SaveToFile;
end;

Заменить на
Код: pascal
1.
2.
3.
4.
5.
6.
procedure TMyReport.myClose(Sender: TObject; var Action: TCloseAction);
begin
    if Modified then 
      if MessageDlg('Do you want to save the report?', mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrYes then
        Template.SaveToFile;
end;

или еще лучше
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TMyReport.myClose(ASender: TObject; var Action: TCloseAction);
var
  LSender: TppReport;
begin
  LSender := ASender as TppReport;
  if LSender.Modified then 
    if MessageDlg('Do you want to save the report?', mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrYes then
      LSender.Template.SaveToFile;
end;
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Incompatible types: method pointer and regular procedure
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]