Delphi отбелязва poleznyashki
В TLabel има такава полезна функция. Ако надписа, за да добавите амперсанд ( ), Следното писмо за този символ става газта. В този случай, когато заглавната рисунка символа самата е скрита, и писмо-ускорител - се подчертава. Това означава, че ако натиснете Alt + <буква>, действието е да се инсталира на входния фокус към контрола, който е посочен TLabel.FocusControl собственост. Това се случва автоматично - това е нормално поведение за графичния интерфейс на Windows.
Въпреки това, ако потребителят кликне с мишката върху най-TLabel. това няма да се случи нищо. Аз вярвам, че това не е добре: интуитивен потребителски очаква от едно кликване върху етикета на същото поведение, както и от комбинация от клавиши.
Прилагане свои ръце желаното поведение - просто. Достатъчно TLabel.OnClick манипулатор пишете на ред, като:
Сега си представете, че имаме такива етикети ще има много ... След това можете да създадете компонент, който наследява от стандартния TLabel. Но това не е удобно:
- компонент ще бъде много прост (почти всички с един ред код полезно), но тя трябва да бъде в отделен модул, а дори и инсталиране на компонентите в палитрата;
- при проектиране на формуляри, за да не забравяйте да използвате новия компонент;
- и ако вече имате форма, е необходимо той да ходи и да замени всички стандартни TLabel към новото;
- и ако вече сте използвали други компоненти, които се простират на стандарта на TLabel, ще трябва да се направи, и за тях наследниците.
Така че отиваме друг начин. Тук е само код за:
Използвайте код като този:
Повече може да се добави към втората версия на основната форма и да забравите за този проблем завинаги :)
![Delphi отбелязва poleznyashki (показване на скриване) Delphi отбелязва poleznyashki](https://webp.images-on-off.com/26/95/434x275_t2fzqztmj2u65bdx3nv8.webp)
Безсмислен и безполезен боклук.
И това, което е там изобщо променлива CustomLabel? Аз не разбирам тази точка.
pgolub, римски Yankovsky
"Vanity" с CustomLabel и AccessLabel е както следва.
а) собственост FocusControl TCustomLabel обяви на ниво клас. така че е важно да се Sender е просто вид TCustomLabel. За да направите това, използвайте като оператор. Можете да използвате е. Или пък може да доведе дори до тишината и сакралното да повярвам, че никой не е угодно зададете манипулатор DoSelectFocusControl на бутон. например.
б) FocusControl TCustomLabel собственост на ниво клас, декларирани в защитената част. Поради това, по този начин: TCustomLabel (Sender) .FocusControl не работят, не е на разположение. А TLabel този имот публикува публикува и спокойно можем да пиша това: TLabel (Sender) .FocusControl.
Torbins
Като опция - да. Но има едно нещо: нов модул, който реализира нова функционалност, не забравяйте да добавите към употребата на всяка форма. Ръката се справя по-скоро тъжно.
В този случай, новият принцип се изпълнява от една проста смяна на конвенционален процесор. Това може да стане в по време на работа след създаването на всички компоненти на нивото на базовата форма. Т.е. на базата на съществуващ проект с много форми на достатъчно промени в един източник модул.
Като цяло, през последните години, аз съм престанал да обича привеждане видовете вида:
ако SomeObject е TSomeClass след това
започвам
TSomeClass (SomeObject) .A;
TSomeClass (SomeObject) .B;
приключи;
По-добре по следния начин:
с SomeObject като TSomeClass правя
започвам
А;
Б;
приключи;
Но има опасност с "не отида там." Ето защо по-ясна обявим допълнително променлива от желания тип и ключови думи абсолютен отървете от излишните низ за инициализация на тази променлива.
Това е начина, по който то не по-лесно?
процедура клас TTCustomLabelClick.DoSelectFocusControl (Sender: TObject);
Var
AccessLabel: TLabel;
започвам
ако Sender е TCustomLabel след това
започвам
AccessLabel: = TLabel (подателя);
ако целеви (AccessLabel.FocusControl) и след това AccessLabel.FocusControl.CanFocus
AccessLabel.FocusControl.SetFocus;
приключи;
приключи;
> Така че, не е ли по-лесно?
Е, както всеки друг. Използвах да бъде "уплашен" ключова дума абсолютен :). Но това не е нищо необичайно. Необичайно за топ ..
В действителност, тази част от кода е моята принципна позиция само в едно - използват като вместо това е. За случаен (или специфичен) предназначение процесор не да се контролира - това е грешка. като грешката ще покаже, но е като ви позволява да го скриете.
абсолютното право да не се плашат, изплаши доста необичаен подход към видовете инспекция. И все пак, кодът трябва първо да се чете, по мое мнение. Така че тези неща би трябвало да са до минимум. Собственикът, джентълмен, по принцип. Но аз не бих написал всяко къде.
>> като грешката ще кажа, но се дава възможност да го скриете.
Тук отново, аз не разбирам. Е кодът, "ако Sender е TLabel след това" да разрешат прехвърлянето на процедурата по TButton?
Не и ако Sender действително ще кликнете и пишат "ако Sender е TLabel след това", няма да има грешки, защото условието няма да работи. И методът не прави нищо.
Т.е. Вярвам, че е грешка на факта, че водачът се възлага на грешен обект.
Неизпълнението на грешка или дизайн, както и грешката, която позволява на програмиста, който е назначил манипулатор. И да се направи това, той би искал това:
SetLabelClickEvent (TLabel (MyNotLabelObject))
В екстремни условия, трябва да се работи :)
Но подходът "като" интересно, да, въпреки че използването на абсолютна аз все още не го правят наистина харесвам.
"Глупости". как програмисти като тези думи. вероятно тези, които той "не се състоя."
В действителност - Съгласен съм с Янковски. За абсолютен - трябва да се опитате да се забрави. Има много по-правилни техники. Дори една и съща ", дадено в скоби."