Ошибка при сборке (Win32)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
FeLiX
новенький
Сообщения: 15
Зарегистрирован: 13.02.2010 15:57:20

Ошибка при сборке (Win32)

Сообщение FeLiX »

Использую в проекте код:

Код: Выделить всё

var
  p: TPoint;
begin
  if not Assigned(FilterForm) then FilterForm := TFilterForm.Create(nil);
  FilterForm.PopupParent := SpicForm;
  p := Point(SpeedButton5.Width, SpeedButton5.Top);
  with SpeedButton5.ClientToScreen(p) do
  begin
    FilterForm.Left := X - SpeedButton5.Width;
    FilterForm.Top := (Y - FilterForm.Height) - 2;
  end;
  FilterForm.Show;

В линукс проект собирается норомально. В win же выдает ругается на строчку p := Point(SpeedButton5.Width, SpeedButton5.Top); Сообщение:

Код: Выделить всё

ChatUnit.pas(94,37) Fatal: Syntax error, ")" expected but "," found

Кто нибуть может объямнить, почему компилятор требует в win скобку после SpeedButton5.Width.
alaken
постоялец
Сообщения: 221
Зарегистрирован: 18.02.2010 08:02:13

Сообщение alaken »

какая у вас версия Lazarus и FPC?
Аватара пользователя
FeLiX
новенький
Сообщения: 15
Зарегистрирован: 13.02.2010 15:57:20

Сообщение FeLiX »

Оу, забыл указать, первоначально был Lazarus 0.9.29 FPC 2.4.0 из Snapshots. В линукс стоит из svn, думал в этом дело, обновил до Lazarus 0.9.29 FPC 2.5.1, ошибка осталась.
Обратил внимание компилятор ругается, при использовании модуля windows.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Код: Выделить всё

...
  Classes.Point(SpeedButton5.Width, SpeedButton5.Top);
...
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

FeLiX писал(а):Обратил внимание компилятор ругается, при использовании модуля windows.

Закоментируйте его. Он под Linux не нужен.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

VirtUX Внимательно прочтите вопрос.
FeLiX писал(а):...
В линукс проект собирается норомально. В win же выдает ругается на строчку p := Point(SpeedButton5.Width, SpeedButton5.Top);
...
Аватара пользователя
FeLiX
новенький
Сообщения: 15
Зарегистрирован: 13.02.2010 15:57:20

Сообщение FeLiX »

И что? Это для кросс проекта. Использую {$IFDEF WINDOWS},windows {$ENDIF};

Код: Выделить всё

  {$IFDEF WINDOWS}
   SetWindowLong(Handle, GWL_HWNDPARENT, 0);
   SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
   {$ENDIF} 

Если бы не этот отказался быот этого модуля.
Как еще можно сделать другую форму не зависимой от главной. Что бы при сворачивании главной другая оставалась и наоборот.
В линукс это не нужно. А вот виндовс приходится.
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

Mr.Smart писал(а):Внимательно прочтите вопрос.

Ях!.. Сорри. :oops:
alaken
постоялец
Сообщения: 221
Зарегистрирован: 18.02.2010 08:02:13

Сообщение alaken »

чтото похожее было, так и не смог победить
проверьте в исходном коде проекта нет ли лишних подключенных модулей... (Проект-Посмотреть исходный код проекта)

пробовали как советовал Mr.Smart на прямую вызвать из модуля метод?

Код: Выделить всё

Classes.Point(SpeedButton5.Width, SpeedButton5.Top);


как вариант костыль

Код: Выделить всё

var
  p: TPoint;
begin
  if not Assigned(FilterForm) then FilterForm := TFilterForm.Create(nil);
  FilterForm.PopupParent := SpicForm;

  p.X := SpeedButton5.Width;
  p.Y := SpeedButton5.Top;

  with SpeedButton5.ClientToScreen(p) do
  begin
    FilterForm.Left := X - SpeedButton5.Width;
    FilterForm.Top := (Y - FilterForm.Height) - 2;
  end;
  FilterForm.Show;
Аватара пользователя
FeLiX
новенький
Сообщения: 15
Зарегистрирован: 13.02.2010 15:57:20

Сообщение FeLiX »

Раньше не упсел проверить.
Вот это

Код: Выделить всё

Classes.Point(SpeedButton5.Width, SpeedButton5.Top);

Работает. Спасибо...
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

FeLiX
Поменяйте местаами, в строке Uses, модули Classes и Windows. Модуль, что стоит на втором месте, перекрывает модуль, который стоит на первом месте. Либо, если одинаковых названий из того и другого модуля много и используются они с равной степенью вероятности, используйте уточнение названия, как предложил Mr.Smart, т.е. перед названием функции ставьте название модуля.
Ответить