Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-99457
3LoBit
2003-12-03 16:27
2003.12.30
Ошибка Field ReadOnly в TClientDataSet


4-99813
Suharew
2003-11-01 23:55
2003.12.30
CreateProcess


1-99582
Lion
2003-12-18 10:02
2003.12.30
открытие MDIForm из Dll


1-99527
Dikoy
2003-12-16 14:24
2003.12.30
Автоматическое создание файла history.txt


8-99657
MIKL
2003-08-26 14:14
2003.12.30
Потдержка jpeg, gif, и т.д





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский