Win32 API BUG
13 отговора
426 прегледа
Win32 API BUG
Nqkoj probval li e da sloji pove4ko TComboBox control-i v'v form-ata na
prilojenieto si ... da re4em 80.. e na men mi se naloji i ne ostanah
mnogo dovolen ot rezultata a toj e povdigane na izklju4enie
EWin32Error s's s'obshtenie edno ot slednite :
1. 'A Win32 API function failed'
2. 'Win32 Error. Code: 87. The parameter is incorrect'
Ako nqkoj mi kaje ot kakvo se polu4ava taq BUG-otiq shte mu b'da mnogo
blagodaren, a ako razreshi problema nqma da ima raven.
(*
Ne priemam za otgovor -
"Ne izpolzvaj tolkova mnogo control-i!" ili neshto ot sorta,
za6toto sa neobhodimi.
*)
Moga da pomogna samo s tova da vi kaja 4e problema v'znikva pri/sled
ukazvaneto na roditelq na control-a a ne pri s'zdavaneto mu (t.e. v
constructor-a).
Eto vi example da vidite za kakvo stava v'pros... mojete estestveno
da probvate i r'4no kato copy-paste-nete ComboBox control-ite direktno
v'v form-ata i sled tova da run-nete programata.
Ako ste se spreli na 1-viq variant probvajte da smenite st-sta na
"class reference" promenlivata s drugi proizlqzli ot TControl
class-ove i shte zabelejite 4e se izd'nnva samo na TComboBox i TListBox.
procedure TForm1.Button1Click(Sender: TObject);
type TControlClass = class of TControl;
var i : integer;
List : TList;
TheClass : TControlClass;
TheObject : TControl;
begin
TheClass := TComboBox;
List := TList.Create;
try
for i := 1 to 1000 do
begin
TheObject := TheClass.Create(nil);
TheObject.Parent := self;
List.Add(TheObject);
Caption := IntToStr(i);
end
finally
while (List.Count > 0) do
begin
TControl(List.Items[0]).Free;
List.Delete(0);
Caption := IntToStr(List.Count);
end;
FreeAndNil(List);
end;
end;
prilojenieto si ... da re4em 80.. e na men mi se naloji i ne ostanah
mnogo dovolen ot rezultata a toj e povdigane na izklju4enie
EWin32Error s's s'obshtenie edno ot slednite :
1. 'A Win32 API function failed'
2. 'Win32 Error. Code: 87. The parameter is incorrect'
Ako nqkoj mi kaje ot kakvo se polu4ava taq BUG-otiq shte mu b'da mnogo
blagodaren, a ako razreshi problema nqma da ima raven.
(*
Ne priemam za otgovor -
"Ne izpolzvaj tolkova mnogo control-i!" ili neshto ot sorta,
za6toto sa neobhodimi.
*)
Moga da pomogna samo s tova da vi kaja 4e problema v'znikva pri/sled
ukazvaneto na roditelq na control-a a ne pri s'zdavaneto mu (t.e. v
constructor-a).
Eto vi example da vidite za kakvo stava v'pros... mojete estestveno
da probvate i r'4no kato copy-paste-nete ComboBox control-ite direktno
v'v form-ata i sled tova da run-nete programata.
Ako ste se spreli na 1-viq variant probvajte da smenite st-sta na
"class reference" promenlivata s drugi proizlqzli ot TControl
class-ove i shte zabelejite 4e se izd'nnva samo na TComboBox i TListBox.
procedure TForm1.Button1Click(Sender: TObject);
type TControlClass = class of TControl;
var i : integer;
List : TList;
TheClass : TControlClass;
TheObject : TControl;
begin
TheClass := TComboBox;
List := TList.Create;
try
for i := 1 to 1000 do
begin
TheObject := TheClass.Create(nil);
TheObject.Parent := self;
List.Add(TheObject);
Caption := IntToStr(i);
end
finally
while (List.Count > 0) do
begin
TControl(List.Items[0]).Free;
List.Delete(0);
Caption := IntToStr(List.Count);
end;
FreeAndNil(List);
end;
end;
Re: Win32 API BUG
Направих, гола форма с един бутон и ти копнах процедурката за събитие на бутона. (без FreeandNIL). Работи... Delphi 3
Re: Win32 API BUG
TComboBox и Win32 нямат нищо общо, освен, очевидно, извикването на функции във второто от първото. Явно TComboBox не е читав клас, за това направи си свой.
Si Vis Pacem, Para Bellum
Si Vis Pacem, Para Bellum
Re: Win32 API BUG
Za s'jalenie nqmam Delphi3, no mi se struva nev'zmojno
sled kato go probvah na D4, D5, CB3, CB5 na 2-e razli4ni PC-ta i rezultata e
edin i s'sht.
sled kato go probvah na D4, D5, CB3, CB5 na 2-e razli4ni PC-ta i rezultata e
edin i s'sht.
Re: Win32 API BUG
Ами... нали ти казах, копирах го 1 към 1 от теб без freeandnil() и работи... между другото съм с NT 4.0 Workstation...
NiL^,
Пейстнах го и при мен също работи -- D4, W2000, без FreeAndNil(List). Дори си се изобразяват:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
List : TList;
TheClass : TControlClass;
TheObject : TControl;
begin
TheClass := TComboBox;
List := TList.Create;
try
for i := 1 to 1000 do
begin
TheObject := TheClass.Create(nil);
TheObject.Parent := self;
TheObject.Top := i*10;
TheObject.Left := 1;
TheObject.Visible := true;
List.Add(TheObject);
Caption := IntToStr(i);
end;
Application.ProcessMessages;
ShowMessage('tralala');
finally
while (List.Count > 0) do
begin
TControl(List.Items[0]).Free;
List.Delete(0);
Caption := IntToStr(List.Count);
end;
// FreeAndNil(List);
end;
end;
Re: NiL^,
O ne, slu4i se naj-loshoto... tova ozna4ava 4e e ot OS-a. I na 2-te PC-ta sa instalirani Win98SE
при w98, 128MB RAM:
същото .exe изгърмява на 154-тия combobox с грешката, която споменаваш.
Всъщност защо са ти толкова много? Кажи нещо по-подробно и току-виж сме измислили някакво решение мамицата му виндовска.
?
Всъщност защо са ти толкова много? Кажи нещо по-подробно и току-виж сме измислили някакво решение мамицата му виндовска.
?
Da si 4uwal za poniatieto resource
pod Win9x - menaziraneto i oswobozdawaneto na grafin4nite resursi e mnogo (ama rabiraj tragi4no) losho - tam naj weroitno e problema - podobni rezultati se polu4awat i pri otwarianeto na 2(ili ako mozesh powe4e ) broia D5 pri naka4eni okolo 1000 br. komponenta - ne moga da ti opisha kakwa kartina stawa - ne moze i da se "zasneme" daze - da ne gowrim ako si pusnesh D5 + niakolko IE -ta i se opitash da prawish nesto
mezdu dr. sistemata mi ne e mnogo losha ama problema si e w Win9
A sam s PIII 650 + 256, ne sam s WinSE ama i s nego sam probwal - sega sam s Me - tam ima problemi, W2K - advansed server - tam oste ne sam pusnal D5 - ama skoro ste ia testwam - waw wida w kojto ti kazah - s okolo 80MB bpl ka4eni (towa sa okolo 1400 komponenta) fajlowe.
---
IN VINO VERITAS!
mezdu dr. sistemata mi ne e mnogo losha ama problema si e w Win9
A sam s PIII 650 + 256, ne sam s WinSE ama i s nego sam probwal - sega sam s Me - tam ima problemi, W2K - advansed server - tam oste ne sam pusnal D5 - ama skoro ste ia testwam - waw wida w kojto ti kazah - s okolo 80MB bpl ka4eni (towa sa okolo 1400 komponenta) fajlowe.
---
IN VINO VERITAS!
Re: при w98, 128MB RAM:
Takaaa... iskam da blagodarq na vsi4ki koito pomognaxa za raznishtvaneto
na problema... qvno programata mi shte raboti na NT (samo tam da ne izleze drug BUG).
Xypodilec - Ami nalojitelni sa tolkova mnogo ComboBox-ove ama ne iskam da te
zanimavam dop'lnitelno s programata mi... Estestveno moje da se realizira i po drug na4in oba4e taka shte b'de po-udobno... BTW ako se pozamislish shte se setish za kakva programa stava duma.
na problema... qvno programata mi shte raboti na NT (samo tam da ne izleze drug BUG).
Xypodilec - Ami nalojitelni sa tolkova mnogo ComboBox-ove ama ne iskam da te
zanimavam dop'lnitelno s programata mi... Estestveno moje da se realizira i po drug na4in oba4e taka shte b'de po-udobno... BTW ako se pozamislish shte se setish za kakva programa stava duma.
нещо като идея:
Тъй като проблема явно е със заделянето на графични ресурси (както каза PhantomAS), може да направиш следното:
Правиш си колкото ти трябват stringlist-ове, а combobox -- колкото се събират визуално. Прикачаш към всяко combo по един списък, а като си скролваш (ако нещо такова ще има) -- прехвърляш само списъците. Т.е. нещо като плъзгане ще се получи.
Правиш си колкото ти трябват stringlist-ове, а combobox -- колкото се събират визуално. Прикачаш към всяко combo по един списък, а като си скролваш (ако нещо такова ще има) -- прехвърляш само списъците. Т.е. нещо като плъзгане ще се получи.
Re: нещо като идея:
ili nai dobre si pokazwai editbox i samo tozi koito e na fokus go zamazwash s
combo? che shte izglejda i po izchisteno na wynshen wid :)
combo? che shte izglejda i po izchisteno na wynshen wid :)