Просьба плотно потестировать Lazarus

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

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

Re: Просьба плотно потестировать Lazarus

Сообщение Павел Ишенин » 07.09.2008 11:26:10

NXP, у вас в опциях компилятора вырезание символов из проекта включено? Если да, то уберите пожалуйста - не ясно что там за символы в трассировке стека. Если и после не поможет, то надо собрать fpc с отладочной информацией. Например, так: c:\programming\fpc\bin\i386-win32\make.exe clean all OPT="-g".

Добавлено спустя 50 секунд:
TImage:
QT работает.
GTK-2 альфа канал не работает, все маскируется. Раньше альфа канал работал, но на фоне сыпало шум


Как поняли? Можно пример?
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Просьба плотно потестировать Lazarus

Сообщение Logo » 07.09.2008 12:06:46

Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
  Image1.Picture.LoadFromFile('../ttt.png');
end;



Выбираю опцию компилятора: LCL Widget Type = QT(beta)
Картинка с тенью, - альфа канал работает.
ImgQT.jpg

Выбираю опцию компилятора: LCL Widget Type = GTK-2(beta)
Картинка без тени, края не сглажены, - альфа канал не работает.
ImgGTK.jpg


Добавлено спустя 27 минут 36 секунд:
NXP писал(а):Я использовал Daily Snapshot (win32)
Lazarus-0.9.25-fpc-2.2.3-20080807-win32.exe
Вот участки кода:

Я так понял, что в PostgreSQL базах Вы использовали кодировку по умолчанию, - UTF-8, верно?
Есть один вопрос, если, например, имеем строковое поле размером 20 и оно содержит строку, длина которой превышает половину, тоесть больше 10, ее не обрезает?

Добавлено спустя 59 минут 34 секунды:
Для Павел Ишенин

Я просмотрел немного LCL и понял, что идет процесс перехода на UTF. Поэтому решил выложить свое решение проблемы в TCombobox:
Код: Выделить всё

{ customcombobox.inc }

procedure TCustomComboBox.KeyUp(var Key: Word; Shift: TShiftState);
var iSelStart: Integer;
    sCompleteText, sPrefixText, sResultText: String;
    tmpiSelStart: Integer; //mak
begin
inherited KeyUp(Key, Shift);
if ((cbactEnabled in FAutoCompleteText) and (Style <> csDropDownList)) then
  begin
   //Only happens with alpha-numeric keys and return key and editable Style
   if (IsEditableTextKey(Key) or (Key = VK_RETURN) or (ssShift in Shift)) then
    begin
     if (Key = VK_RETURN) then
      SelectAll else
      begin
       iSelStart := SelStart;//Capture original cursor position
       //End of line completion
       tmpiSelStart := Length(WideString(Text));//mak  Если в дальнейшем String будет определена, как WideString, - эта строка не приведет ни к каким последствиям.

       if (tmpiSelStart < Length(Text)) and (tmpiSelStart = iSelStart) then tmpiSelStart := Length(Text)
         else tmpiSelStart := iSelStart; //mak
       if ((tmpiSelStart < Length(Text)) and (cbactEndOfLineComplete in FAutoCompleteText)) then Exit;
       sPrefixText := LeftStr(Text, tmpiSelStart); //mak
       sCompleteText := GetCompleteText(Text, tmpiSelStart,
                                        (cbactSearchCaseSensitive in FAutoCompleteText),
                                        (cbactSearchAscending in FAutoCompleteText), Items);
       if not (sCompleteText = Text) then
        begin
         sResultText := sCompleteText;
         if ((cbactEndOfLineComplete in FAutoCompleteText) and
             (cbactRetainPrefixCase in FAutoCompleteText)) then
          begin//Retain Prefix Character cases
           Delete(sResultText, 1, tmpiSelStart); //mak
           Insert(sPrefixText, sResultText, 1);
          end;//End if ((cbactEndOfLineComplete in FAutoCompleteText) and....
         Text := sResultText;
         SelStart := iSelStart;
         SelLength := Length(Text);
        end;//End if not (sCompleteText = Text)
      end;//End if (Key = VK_RETURN)
    end;//End if (IsEditableTextKey(Key) or (Key = VK_RETURN) or (ssShift in Shift))
  end;//End if ((cbactEnabled in FAutoCompleteText) and (Style = csDropDown))
//SelectAll when hitting return key for AutoSelect feature
if (Key = VK_RETURN) then
  begin
   if FAutoSelect then
    begin
     SelectAll;
     if (SelText = Text) then FAutoSelected := True;
    end;//End if FAutoSelect
  end;//End if (Key = VK_RETURN)
end;


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

{ lclproc.pas }

function GetCompleteText(sText: string; iSelStart: Integer;
  bCaseSensitive, bSearchAscending: Boolean; slTextList: TStrings): string;

  function IsSamePrefix(sCompareText, sPrefix: string; iStart: Integer;
    var ResultText: string): Boolean;
  var sTempText: string;
  begin
    Result := False;
    sTempText := LeftStr(sCompareText, iStart);
    if not bCaseSensitive then sTempText := AnsiUpperCase(sTempText); //mak old UpperCase
    if (sTempText = sPrefix) then
    begin
      ResultText := sCompareText;
      Result := True;
    end;//End if (sTempText = sPrefix)
  end;//End function IsSamePrefix

var i: Integer;
    sPrefixText: string;
begin
  Result := sText;//Default to return original text if no identical text are found
  if (sText = '') then Exit;//Everything is compatible with nothing, Exit.
  if (iSelStart = 0) then Exit;//Cursor at beginning
  if (slTextList.Count = 0) then Exit;//No text list to search for idtenticals, Exit.
  sPrefixText := LeftStr(sText, iSelStart);//Get text from beginning to cursor position.
  if not bCaseSensitive then
    sPrefixText := AnsiUpperCase(sPrefixText); //mak old UpperCase
  if bSearchAscending then
  begin
    for i:=0 to slTextList.Count-1 do
      if IsSamePrefix(slTextList[i], sPrefixText, iSelStart, Result) then Break;
  end else
  begin
    for i:=slTextList.Count-1 downto 0 do
      if IsSamePrefix(slTextList[i], sPrefixText, iSelStart, Result) then Break;
  end;//End if bSearchAscending
end;



Добавлено спустя 19 минут 21 секунду:
Для NXP

NXP, у Вас есть возможность перекомпилировать fpc? Попробуйте в файле fpc-2.2.2/packages/fcl-db/src/sqldb/postgres/pqconnection.pp подменить функцию:
function TPQConnection.TranslateFldType(res : PPGresult; Tuple : integer; var Size : integer) : TFieldType;
на ниже приведенную:
Код: Выделить всё
{ fpc-2.2.2/packages/fcl-db/src/sqldb/postgres/pqconnection.pp }

function TPQConnection.TranslateFldType(res : PPGresult; Tuple : integer; var Size : integer) : TFieldType;

begin
  Size := 0;
  case PQftype(res,Tuple) of
    Oid_varchar,Oid_bpchar,
    Oid_name               : begin
                             Result := ftstring;
                             size := PQfsize(Res, Tuple);
                             if (size = -1) then
                               begin
                               size := pqfmod(res,Tuple)-4;

                             //  if size = -5 then size := dsMaxStringSize;//Old oreginal release
                             
                             //mak release
                               if size = -5 then size := dsMaxStringSize
                                 else inc(size, size); //удваиваем размер буффера
                             //end mak
                             
                               end;
                             if size > dsMaxStringSize then size := dsMaxStringSize;
                             end;
//    Oid_text               : Result := ftstring;
    Oid_text               : Result := ftBlob;
    Oid_Bytea              : Result := ftBlob;
    Oid_oid                : Result := ftInteger;
    Oid_int8               : Result := ftLargeInt;
    Oid_int4               : Result := ftInteger;
    Oid_int2               : Result := ftSmallInt;
    Oid_Float4             : Result := ftFloat;
    Oid_Float8             : Result := ftFloat;
    Oid_TimeStamp          : Result := ftDateTime;
    Oid_Date               : Result := ftDate;
    Oid_Time               : Result := ftTime;
    Oid_Bool               : Result := ftBoolean;
    Oid_Numeric            : begin
                             Result := ftBCD;
                             size := PQfmod(res,Tuple);
                             if size = -1 then
                               size := 4
                             else
                               size := size -4;
                             end;
    Oid_Money              : Result := ftCurrency;
    Oid_Unknown            : Result := ftUnknown;
  else
    Result := ftUnknown;
  end;
end;

У вас нет необходимых прав для просмотра вложений в этом сообщении.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Просьба плотно потестировать Lazarus

Сообщение Alexx2000 » 07.09.2008 15:05:36

Ух не знаю даже как и описать.
Имеется StringGrid, в обработчике OnSelectEditor в качестве редактора назначается TSpinEdit. При изменении значения в SpinEdit меняется значение в ячейке (пример во вложении).
Так вот под Win32 этот код не работает как хотелось бы. В то время как под GTK2 и QT все нормально работает.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Re: Просьба плотно потестировать Lazarus

Сообщение v-t-l » 07.09.2008 15:33:05

Logo писал(а):Я просмотрел немного LCL и понял, что идет процесс перехода на UTF. Поэтому решил выложить свое решение проблемы в TCombobox:

Logo писал(а):tmpiSelStart := Length(WideString(Text));//mak  Если в дальнейшем String будет определена, как WideString, - эта строка не приведет ни к каким последствиям.

Вот и я о том же. utf-16 (widestring) более совместима с различными компонентами.
Павел Ишенин писал(а):
v-t-l писал(а):Меня больше беспокоит UTF-8 в БД-компонентах. БД-контролы не знают о реальных размерах строковых полей БД и при превышении размера получаем либо обрезание строки, либо сообщение от сервера.

Нужен пример и желательно не требующий сервера - т.е. dbf.

TDbf (в Лазарусе) ничего не знает о кодировке dbf-файла и, соответственно, не пытается конвертировать из Utf-8 хотя бы в Ansi. Так что для примера не совсем подходит.
Более странно, что, например, DBEdit, подключенный к строковому полю размером 30 символов, позволяет вводить текст неограниченной длины (>12000 точно). (любой пример, хотя бы и \lazarus\examples\address_book\)

Lazarus-0.9.25-win32 svn-16394
fpc-2.2.2
v-t-l
энтузиаст
 
Сообщения: 735
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Просьба плотно потестировать Lazarus

Сообщение Павел Ишенин » 07.09.2008 18:38:43

Logo, неужели сложно прикрепить демо-пример? Зачем мне смотреть на 2 картинки и не иметь возможности самому собрать этот пример и поглядеть а как у меня. Ведь иначе мне надо постараться подобрать такую картинку на которой этот эффект станет заметен.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Просьба плотно потестировать Lazarus

Сообщение Logo » 07.09.2008 19:20:38

Павел Ишенин писал(а):Logo, неужели сложно прикрепить демо-пример? ...

Простите, туплю. Сейчас исправлюсь.
TestTimage.tar
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Просьба плотно потестировать Lazarus

Сообщение Attid » 07.09.2008 20:15:39

просветите меня темного надо ли указывать -Fcutf8 проектам ?? =)

почему задаю вопрос:
в МСЕ у меня все в ютф8, там я указываю опцию и все работает.

при переходе на 9,25 все исходники перенес в ютф8 и сразу поставил ключик -Fcutf8 исходники в ютв. все работает. все прекрасно =)

потом натнулся на багу когда в FBdataset передовал русские строки без параметров получал отлуп, убрал -Fcutf8 все загадочно заработало, и в венде и в лине .

сейчас добрался до тестирования консольных утилит смотрю они у меня в ютф8 но в консоль выдают страшные вещи

Код: Выделить всё
Локальное время


понял что-то не так =/ добавил -Fcutf8 получил вопросы

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


вот =/ хочется получить вместо этого "Локальное время" что не так ?
ЗЫ понимаю что вопрос больше к фпц, но толкнул на переход меня как раз лазарус =)

Добавлено спустя 16 минут 48 секунд:
с консольной прогой разобрался, у себя разобрался -Fcutf8 не нужен. это у меня там случайно двойная перекодировка вышла, а вот почему не нужен -Fcutf8 не понял и почему он нужен в МСЕ.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Просьба плотно потестировать Lazarus

Сообщение Logo » 07.09.2008 22:24:17

Lazarus svn-16470
Автодополнение Combobox в GTK-2 заработало, но чуствительно к регистру в кирилице. Латиница работает правильно.
GTK - по прежнему не работает.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Просьба плотно потестировать Lazarus

Сообщение Павел Ишенин » 08.09.2008 02:54:28

Logo, автозаполнение буду переделывать.

Добавлено спустя 4 часа 20 минут 52 секунды:
По поводу альфа-канала в gtk2. Увы, текущий код действительно не предусматривает его наличие - все хранится в виде картинка + маска. Я переделывать в попыхах не буду, да и не я тот код писал, а разработчик уехал в отпуск на 3 недели :) Прийдется выпускать 0.9.26 без альфа канала, но к версии 0.9.28 проблему устранить. Предлагаю выложить пример в bug-tracker, а я его в свою очередь назначу ответственному разработчику и добавлю в зависимости для следующей версии.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Просьба плотно потестировать Lazarus

Сообщение Logo » 08.09.2008 18:00:08

Альфа канал не критичен, переживем, хоть и не красиво :)
А вот с Events в ComboBox катастрофа. Я выложу детально сюда. В bug-tracker буду выкладывать чуть позже. Дело в том, что у меня был очень большой перерыв в кодировании (около 6 лет) и сейчас по новому приживаюсь, пока не адаптировался и часто туплю :)

Добавлено спустя 3 минуты:
Кстати, QT под Linux пока до путя, наверное, тоже доводить не будут, или стоит надеяться?

Добавлено спустя 1 час 44 минуты 53 секунды:
Супер!!! Lazarus revision 16488. Автодополнение ComboBox во всех GTK работает. Спасибо, быстро поправили, можно следующую партию багов запускать :)
в QT по прежнему первый символ остается тот, что ввели, а не тот, что в списке.

Функции UTF8Copy(), UTF8UpperCase() рулят!!! Народ, можно их теперь использовать.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Просьба плотно потестировать Lazarus

Сообщение shade » 08.09.2008 23:23:08

Извиняюсь, если об этом уже сообщали, но меня раздражает такой вот баг:

1. Создать пустую форму
2. Закинуть на неё TPageControl
3. Создать пару вкладок
4. Размерстить что-нибудь на второй владке, например TListView

Ошибка - TListView не отображается. Хотя если форму сохранить, закрыть и снова открыть, то всё отображается нормально. И если добавлять на первую, то тоже сразу всё отображается.

Добавлено спустя 43 секунды:
Linux, GTK2
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Просьба плотно потестировать Lazarus

Сообщение Logo » 09.09.2008 00:16:16

TComboBox Events:
onDrawItem - не вызывается
onContextPopup - не вызывается
onMeasureItem - не вызывается
onGetItems - вызывается как onDropDown
onKeyPress - вызывается только при наборе латиницы, на кирилицу не реагирует

TPanel
DockSite = True - если провести мышкой над панелью, то выдает ошибку RunError(211) (out of bounds)
TestComboBox.tar
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Просьба плотно потестировать Lazarus

Сообщение Павел Ишенин » 09.09.2008 02:30:41

TComboBox Events:
onDrawItem - не вызывается
onContextPopup - не вызывается
onMeasureItem - не вызывается
onGetItems - вызывается как onDropDown
onKeyPress - вызывается только при наборе латиницы, на кирилицу не реагирует


OnDrawItem вызывается когда combobox.Style равен csOwnerDraw...
OmMeasureItem вызывается когда combobox.Style = csOwnerDrawVariable
OnGetItems и должен работать как OnDropDown за тем исключением, что вызывается в тот момент когда наполнение элементами не вредит отображению. Во всех widgetsets по разному. Раньше некоторые combobx в ide заполняли на OnDropDown и в результате отображалось только одно значение со скроллом.
onKeyPress - для utf8 версии рекомендуется пользоваться OnUTF8KeyPress, так как символ русского языка - это набор байт, а не один char.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Просьба плотно потестировать Lazarus

Сообщение Logo » 09.09.2008 03:59:53

Ок! Большое спасибо.
Может OnUTF8KeyPress всетаки вынести в published, чтобы подобные вопросы не возникали? Кстати, его в Object Inspector не видно ни в одном компоненте, кроме TForm .

Еще одно:
TMeasureItemEvent = procedure(Control: TWinControl; Index: Integer; var Height: Integer) of object;
Компилятор жалуется на Дубликат идентефикатора Height.
Если создавать из Object Inspector, то потом приходится вручную менять имя переменной.

И вопрос по QT для Linux. Его пока игнорировать, или этот widgetsets будет доводиться. Например, если откомпилировать IDE в QT, то Lazarus после некоторого времени работы, или простоя просто виснет, не реагируя ни на что.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Просьба плотно потестировать Lazarus

Сообщение Павел Ишенин » 09.09.2008 04:20:54

Кстати, QT под Linux пока до путя, наверное, тоже доводить не будут, или стоит надеяться?


Баги можно и нужно слать в трекер, а доводить до ума до 0.9.26 не будем.

Добавлено спустя 2 минуты 9 секунд:
И вопрос по QT для Linux. Его пока игнорировать, или этот widgetsets будет доводиться. Например, если откомпилировать IDE в QT, то Lazarus после некоторого времени работы, или простоя просто виснет, не реагируя ни на что.


На Qt пока можно экспериментировать. Смотреть, тестировать и писать в баг-трекер об ошибках. Использовать в работе не рекомендуется.

Добавлено спустя 54 минуты 37 секунд:
Компилятор жалуется на Дубликат идентефикатора Height.

Больше не будет начиная с r16492

в QT по прежнему первый символ остается тот, что ввели, а не тот, что в списке.

В Qt работал родной Qt Autocompletion. Выключил родной, починил selStart, selLength - сейчас работает LCL'ный (начиная с r16494). Просьба проверить.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

Рейтинг@Mail.ru
cron