Форум: "Основная";
Текущий архив: 2003.12.30;
Скачать: [xml.tar.bz2];
ВнизНехороший TEdit Найти похожие ветки
← →
Polevi (2003-12-16 15:50) [0]есть глюк, в Delphi6 - в других не пробовал
procedure TForm1.FormCreate(Sender: TObject);
var
s:string;
begin
s:="Test";
s:=s+s;
s:=s+s;
s:=s+s;
s:=s+s;
s:=s+s;
s:=s+s;
s:=s+s;
s:=s+s;
s:=s+s;
s:=s+s;
s:=s+s;
s:=s+s;
s:=s+s;
s:=s+s;
s:=s+s;
s:=s+s;
Edit1.Text:=s;
end;
← →
Ega23 (2003-12-16 15:51) [1]И в чём глюк?
← →
Тимохов (2003-12-16 15:52) [2]Глюк в чем, в способе задания значения Edit1.Text? Так такого же глюка можно добиться в любом языке :)))
Например
int i;
i = 1;
i = i+i;
i = i+i;
Итого получаем 4.
← →
Polevi (2003-12-16 15:59) [3]гм
у меня выдает "System error code 1411 Класс не существует"
← →
Плохиш_ (2003-12-16 15:59) [4]>Polevi © (16.12.03 15:50)
Действительно, господин Мастер, растолкуйте что надо-то?
← →
Тимохов (2003-12-16 15:59) [5]На какой строчке выдает?
← →
Delphi 7 (2003-12-16 16:01) [6]Все нормально работает
← →
Рамиль (2003-12-16 16:01) [7]Наверное, имеется ввиду ошибка при попытке запуска такой конструкции:
A call to an OS function failed
← →
Agent13 (2003-12-16 16:01) [8]> у меня выдает "System error code 1411 Класс не существует"
Да... Точно глюк. У меня этот код на Д5 выдает следующее:
Win32 API function failed
← →
Кщд (2003-12-16 16:02) [9]D5 - нормально
← →
Тимохов (2003-12-16 16:03) [10]Д6 - полет нормальный
← →
Плохиш_ (2003-12-16 16:03) [11]>Polevi © (16.12.03 15:59) [3]
Хм, к тому же на строчке:
Application.Run;
← →
Рамиль (2003-12-16 16:03) [12]
> Delphi 7 (16.12.03 16:01) [6]
Неа, ненормально, может от ОС зависит...
← →
Sha (2003-12-16 16:03) [13]Delphi 6 - все OK
← →
Рамиль (2003-12-16 16:04) [14]Гы... Еще и ошибки у всех разные. Класс! Может ограничение на длину текста в TEdit есть?..
← →
Agent13 (2003-12-16 16:04) [15]А вот ещё прикол - если я из этого кода убираю последнее s:= s+s
тогда всё нормально.
← →
han_malign (2003-12-16 16:06) [16]А 131072 байт - не многовато-ли для Edit???
← →
Тимохов (2003-12-16 16:07) [17]Наверное, все дело в том, что строка длинная получается. В Д6 если еще добавить несколько строк s := s+s, то будет точно исходная ошибка.
← →
Кщд (2003-12-16 16:09) [18]Д5+Update+Вин98 - без ошибок
но рубит строку
← →
Agent13 (2003-12-16 16:10) [19]Да, видимо дело действительно в длине строки, но тогда почему же приведённый код у меня исполняется нормально, если его поставить не в OnCreate, а в Button1OnClick?
← →
han_malign (2003-12-16 16:11) [20]> Может ограничение на длину текста в TEdit есть?
- дык, была классическая атака, построенная на переполнии буфера в Edit HTML формы, с возможностью выполнения произвольного кода.
← →
KSergey (2003-12-16 16:11) [21]D5
Win2k
Ошибка аналогичная (Error Win32...)
Ну текст действительно длинноват получается (262114)
Хотя, если вместо
Edit1.Text:=s;
написать
SendMessage (Edit1.Handle, WM_SETTEXT, 0, Integer(PChar(s)));
- то все отлично проходит, и нижеследующий вызов
ShowMessage(IntToSTr (Length(Edit1.Text)));
возвращает все 262114.
Странновато это ;)
← →
KSergey (2003-12-16 16:15) [22][19] Agent13 (16.12.03 16:10)
Да, видимо дело действительно в длине строки, но тогда почему же приведённый код у меня исполняется нормально, если его поставить не в OnCreate, а в Button1OnClick?
Ну видимо что-то успевает произойти еще до нажатия батона ;) Что-нибудь инициальзируется, например.
← →
Palladin (2003-12-16 16:18) [23]D6,WinXP
EOSError
"System Error. Code:1400. Invalid window handle"
← →
Плохиш_ (2003-12-16 16:21) [24]procedure TControl.SetVisible(Value: Boolean);
begin
if FVisible <> Value then
begin
VisibleChanging;
FVisible := Value;
Perform(CM_VISIBLECHANGED, Ord(Value), 0); // Вот здесь-то она родимая и вылазит, при показе формы
RequestAlign;
end;
end;
← →
Плохиш_ (2003-12-16 16:23) [25]Короче, Билли виноват ;-)
← →
KSergey (2003-12-16 16:30) [26]> [25] Плохиш_ (16.12.03 16:23)
> Короче, Билли виноват ;-)
А вот тут я бы посомневался...
Как видно из моего примера - Win-элемент как раз нормально себя ведет. А вто чего надо VCL-объекту - фиг его разберешь...
Думаю, об этом можно и борланду малаву накатать: глючек налицо.
PS
"Я украл вашу Delphi и ею недоволен..."
← →
Delphi 7 (2003-12-16 16:32) [27]>Рамиль © (16.12.03 16:03) [12]
> Delphi 7 (16.12.03 16:01) [6]
Неа, ненормально, может от ОС зависит...
==========
Стоит Windows 98
← →
Плохиш_ (2003-12-16 16:38) [28]>KSergey © (16.12.03 16:30) [26]
Дальнейшие исследования показали, что функция
function _CreateWindowEx(dwExStyle: DWORD; lpClassName: PChar; lpWindowName: PChar; dwStyle: DWORD; X, Y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU; hInstance: HINST; lpParam: Pointer): HWND; stdcall; external user32 name "CreateWindowExA";
не может создать окно для TEdit. Так что ...
← →
Семен Сорокин (2003-12-16 16:42) [29]D7+WinXP+SP1
Exception EOSError
A call to an OS function failed
← →
Плохиш_ (2003-12-16 16:47) [30]Кстати, если TEdit заменить на TLAbel, ошибки не происходит, но и текст не отображается
← →
KSergey (2003-12-16 16:55) [31]> [28] Плохиш_ (16.12.03 16:38)
> >KSergey © (16.12.03 16:30) [26]
>
> Дальнейшие исследования показали, что функция
> function _CreateWindowEx(dwExStyle: DWORD; lpClassName:
> PChar; lpWindowName: PChar; dwStyle: DWORD; X, Y, nWidth,
> nHeight: Integer; hWndParent: HWND; hMenu: HMENU; hInstance:
> HINST; lpParam: Pointer): HWND; stdcall; external user32
> name "CreateWindowExA";
>
> не может создать окно для TEdit. Так что ...
Извините, но есть подозрение, что вы куда-то не туда пришли.
Если бы не удалось создать окно для Edit - тогда бы в моем коде не работало SendMessage. А оно работает.
← →
Семен Сорокин (2003-12-16 17:02) [32]Builder6 валится с той же ошибкой
← →
REA (2003-12-16 17:06) [33]Дебри какие-то. TEdit.Text -> TControl.SetTextBuf -> TWinControl.WM_SETTEXT -> TControl.SendDockNotification следствие зашло в тупик.
← →
Плохиш_ (2003-12-16 17:06) [34]>KSergey © (16.12.03 16:55) [31]
> Извините, но есть подозрение, что вы куда-то не туда пришли.
Если бы знать ешё куда мы шли :-) А пришли мы сюда по F7 и функция _CreateWindowEx вернула нам 0, после чего делфи по-интерисовалось RaiseLastOSError, ну а дальше нам надоело и мы пошли выполнять основную работу. ;-)
А ShowMessage(IntToSTr (Length(Edit1.Text))); возвращает и исходном варианте правильное значение. Да и ошибка возникает не в Form1Create, а позже, при показе формы.
← →
Плохиш_ (2003-12-16 17:11) [35]А вот, что сказал MSDN ;-)
http://search.microsoft.com/search/results.aspx?View=msdn&st=a&qu=error+1411&c=0&s=1
← →
Плохиш_ (2003-12-16 17:17) [36]PS. Забыл добавить, что если форма уже показана на экране присвоение проходит без проблем и в OnShow, OnActivate ...
← →
Agent13 (2003-12-16 17:18) [37]2KSergey
>Если бы не удалось создать окно для Edit - тогда бы в моем коде не работало SendMessage. А оно работает.
Так видимо потому окно у вас и создаётся, что нет строки Edit1.Text := s;
У вас окно создаётся пустое и уже потом получает сообщение сеттекст. А если сразу присвоить эдиту длиннющий текст, то CreateWindow и вылетает.
← →
KSergey (2003-12-17 10:41) [38]> [37] Agent13 (16.12.03 17:18)
> У вас окно создаётся пустое и уже потом получает сообщение
> сеттекст. А если сразу присвоить эдиту длиннющий текст,
> то CreateWindow и вылетает.
Не надо меня путать ;)
Я потому и использовал SendMessage - т.е. буквально тут обращаюсь к ф-ции окна Edit"а.
Вообще я уже сталкивался сам не раз с подобными прибабахами, когда в onCreate что-либо не работает (в подобными странноватыми ошибками), а в обработчике батона, например, все на ура.
Мне кажется, что это все же недоработка VCL, когда борландовцы пытаются прогнуть работу виндов под модель поведения VCL, но, видимо, не всегда им это удается.
PS
Так им и надо, т.к. часто работу VCL тоже весьма трудно прогнуть под мои желания ;), и я даже скажу больше: вернуть поведение, присущее стандартным контролам Windows.
← →
KSergey (2003-12-17 10:41) [39]> [37] Agent13 (16.12.03 17:18)
> У вас окно создаётся пустое и уже потом получает сообщение
> сеттекст. А если сразу присвоить эдиту длиннющий текст,
> то CreateWindow и вылетает.
Не надо меня путать ;)
Я потому и использовал SendMessage - т.е. буквально тут обращаюсь к ф-ции окна Edit"а.
Вообще я уже сталкивался сам не раз с подобными прибабахами, когда в onCreate что-либо не работает (в подобными странноватыми ошибками), а в обработчике батона, например, все на ура.
Мне кажется, что это все же недоработка VCL, когда борландовцы пытаются прогнуть работу виндов под модель поведения VCL, но, видимо, не всегда им это удается.
PS
Так им и надо, т.к. часто работу VCL тоже весьма трудно прогнуть под мои желания ;), и я даже скажу больше: вернуть поведение, присущее стандартным контролам Windows.
← →
REA (2003-12-17 10:46) [40]Неизвестно кто еще больше ошибок наляпал: в коде то и дело Windows bug workaround встречается.
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2003.12.30;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.009 c