Editați + lista verticală
Cum pot adăuga o casetă combo în caseta de comenzi Edit? Nu pot folosi ComboBox, pentru că nu are mai multe proprietăți de care am nevoie.
Implementați-le. În interiorul unui astfel de combobox este pur și simplu o editare obișnuită. Numai este necesar să ajungeți la ea prin WinApi.
Da, doare foarte mult, mă simt atât de mult. Dar apare lista drop-down fără Edit in nature. Sau că îl puteți folosi în schimb.
Este mai bine să nu întăriți o astfel de listă. Mai multă agitație va adăuga proprietăți la editarea încorporată. Ce proprietati sunt necesare, pot fi facute?
În special, am nevoie de abilitatea de a schimba alinierea textului. Pentru Editare, acest lucru se poate face doar la momentul creării, așa că nu știu cum să fac acest lucru pentru ComboBox. Am încercat la fel ca pentru Edit - nu a funcționat. Apoi, absolut nu aveți nevoie de săgeata care deschide lista. Păi și așa mai departe, o adevărată căreia nu-i greu.
Lista drop-down de la combo este, în general, cine.
> O listă drop-down combo este, în general, cine.
Aceasta este o clasă de ferestre separată. Aparent, cum ar fi un moștenitor dintr-o listă de casete sau ceva de genul asta.
Faptul este că pentru abandon această listă nu are nevoie de un formular, adică vreau să spun că poate cădea cu ușurință în vid (dincolo de forma părintelui), ceea ce am de fapt nevoie.
Sa gândit la meniul PopUp, dar nu este foarte frumos.
Ascultați, alinierea textului se poate face și în timpuriu, prin SetWindowLong. În COL și terminat - alinierea este setată după crearea controlului.
Pentru editare "Fac acest lucru:
ComboBox1: = NewComboBox (Formă, [coNoIntegralHeight]) SetPosition (48, 40) .SetSize (185, 0);
ComboBox1.TextAlign: = taRight;
ComboBox1.Show;
Deoarece după crearea alinierii nu se poate schimba.
Dar pentru Combo această opțiune nu funcționează.
SetWindowLong (combobox1.Handle, GWL_STYLE, ES_RIGHT);
De asemenea, nici un efect.
Duc, combo, acesta este un combo. Și are o singură fereastră la copii - cea mai comună! Faceți EnumChildWindows și vedeți-vă singur. Luați acest mâner și faceți totul cu asta.
de fapt două, o altă listă de listă, care de fapt scapă.
> de fapt două, o altă listă, care de fapt cade.
EnumChildWindows arată doar una. Și este ușor de înțeles, deoarece această listă este o fereastră de nivel superior (EnumWindows o vede) și deoarece această listă nu se limitează la partea client a ferestrei principale a casetei de listă, iar toți copiii ferestrei sunt limitați. M-am gandit ca butonul este si o fereastra, dar sa dovedit ca este atrasa de combobox pe fereastra proprie.
La alinierea textului Editare se poate seta o singură dată - la momentul creării.
funcția EnumChildProc (Wnd: hWnd; SL: String): BOOL; stdcall;
începe
# xA0; Rezultat: = Wnd <> 0;
# xA0; dacă rezultatul este atunci
# xA0; începeți
# xA0; # xA0; SetWindowLong (wnd, GWL_STYLE, GetWindowLong (wnd, GWL_STYLE) sau ES_Right);
# xA0; # xA0; EnumChildWindows (Wnd, @EnumChildProc, 0);
# xA0; sfârșitul;
se încheie;
EnumChildWindows (combobox1.Handle, @EnumChildProc, 0);
Dacă nu schimbați ES_Right, dar spuneți ES_UPPERCASE, atunci totul este bine. Pentru ca ES_Right nu poate funcționa.
Și totuși, cum să obțineți lista drop-down fără editare.
Apropo, puteți elimina butonul setând proprietatea csSimple la True. Și restul. Ei bine, este într-adevăr o aliniere de fapt?
Apropo, tocmai am observat. Dacă este setată proprietatea coSimple, atunci există un ComboLBox printre copii, iar dacă nu este instalat, nu este printre copii.
> Apropo, puteți elimina butonul setând proprietatea csSimple la True
În acest moment butonul dispare, dar în loc de acesta se formează o listă constantă, care nu este foarte bună.
Am fost deja doar teoretic interesat de modul în care se realizează comportamentul listei drop-down. Și cum se afișează fără formularul de sub ea.
Stilul ferestrei WS_POPUP.
> Vladimir Kladov (03.02.04 19:05) [17]
Este posibil să-l implementați singur?
> Este posibil să-l implementați singur?
Ați fi întrebat dacă puteți apăsa butonul Start.
> Ați fi întrebat dacă puteți apăsa butonul Start.
Ei bine, eu o voi formula diferit. Cum se face acest lucru?