Տուն
Top.Mail.Ru Moscow
Ֆորում: «Գլխավոր»;
Ընթացիկ արխիվը `2002.01.08;
Բեռնել: [xml.tar.bz2];

Down

Բաղադրիչը գծված չէ, և դա այն է ... Գտնել նմանատիպ մասնաճյուղեր


Aleksandr   (2001-12-18 13:03) [0]

Հարգելի գործընկերներ:
Ինձ պետք էր ստեղծել այս բաղադրիչը: Ստեղծվել է TGraphicControl– ից ջղաձգվելով: Ես այն դնում եմ ձևի վրա. Ամեն ինչ կարգին է, հատկությունները տեսանելի են, բայց գծված չէ, և դա այդպես է ... Կոդն այսպիսին է

տիպ
TWayTree = դաս (TGraphicControl)
անձնական
...
պաշտպանված
ընթացակարգի ներկ; գերակա;
հասարակություն
կոնստրուկտոր Ստեղծել (AOwner: TComponent);
լույս
...
հատկություն Գույնը լռելյայն clWhite;
գույքը Տեսանելի լռելյայն ճիշտ է.
վերջը.

ընթացակարգի գրանցում;

իրականացում

կարգը TWayTree.Paint;
էր
EctԱՐՏ.
սկսել
Ժառանգված;
Canvas.Brush. Գույն: = Գույն;
ARect.Left. = Ձախ;
ARect.Top:= Վերև;
ARect.Bottom: = Top + Height;
ARect.Right: = Ձախ + լայնություն;
Canvas.FillRect (ARect)
վերջը.

կոնստրուկտոր TWayTree.Create;
սկսել
Մնացած Ստեղծեք (AOwner);
...
վերջը.

ընթացակարգի գրանցում;
սկսել
Գրանցել բաղադրիչները ("WayTrees", [TWayTree])
վերջը.

վերջ:

Ոչ միայն դա, երբ ես դեռ փորձում եմ ավելացնել FPen և FBrush հատկությունները (նախագծման ժամանակ առանձին մուտքի համար).

TWayTree = դաս (TGraphicControl)
անձնական
FPen: TPen;
FBrush: TBrush;
ընթացակարգը RePaintRequest (Ուղարկող ՝ TObject);
կարգը SetBrush (արժեքը `TBrush);
կարգը SetPen (արժեքը `TPen);
պաշտպանված
ընթացակարգի ներկ; գերակա;
հասարակություն
կոնստրուկտոր Ստեղծել (AOwner: TComponent);
destructor Destroy;
լույս
հատկություն Գույնը լռելյայն clWhite;
սեփականության տեսանելի;
գույքի խոզանակ. TBrush- ը կարդալ FBrush- ը գրել SetBrush;
գույքի գրիչ. TPen- ը կարդացեք FPen- ը գրեք SetPen;
վերջը.

ընթացակարգի գրանցում;

իրականացում

կարգը TWayTree.Paint;
էր
EctԱՐՏ.
սկսել
Ժառանգված;
Կտավ.Պեն ՝ = FPen;
Canvas.Brush: = FBrush;
Canvas.Brush. Գույն: = Գույն;
ARect.Left. = Ձախ;
ARect.Top:= Վերև;
ARect.Bottom: = Top + Height;
ARect.Right: = Ձախ + լայնություն;
Canvas.FillRect (ARect);
Canvas.TextOut (ARect.Left, ARect.Top, «AAA»);
վերջը.

կործանիչ TWayTree.Destroy;
սկսել
FPen.Free;
FBrush.Free;
ժառանգել Destroy
վերջը.

կոնստրուկտոր TWayTree.Create;
սկսել
Մնացած Ստեղծեք (AOwner);
FPen: = TPen.Create;
FBrush: = TBrush.Create;
FPen.OnChange. = Վերաներկայացրեք հայցը;
FBrush.OnChange. = Վերաներկայացրեք հայցը
վերջը.

կարգը TWayTree.SetBrush;
սկսել
եթե Արժեք = զրո, ապա
Ելք.
FBrush.Assign (արժեք);
Անօրինականություն
վերջը.

կարգը TWayTree.SetPen;
սկսել
եթե Արժեք = զրո, ապա
Ելք.
FPen.Assign (արժեք);
Անօրինականություն
վերջը.

կարգը TWayTree.RePaint Հայցեք;
սկսել
Անօրինականություն
վերջը.

ընթացակարգի գրանցում;
սկսել
Գրանցել բաղադրիչները ("WayTrees", [TWayTree]);
վերջը.

վերջ:
բաղադրիչը երդվում է այն ձևի մեջ դնելիս, որը չի կարող գրիչը զրոյացնել: Գրիչն ու խոզանակը հայտնվում են Տեսուչում, բայց երբ կտտացնում ես +, nifiga- ն չի դուրս գալիս, երբ բաղադրիչները չափափոխում ես նույն սխալը ... Ի՞նչ եմ սխալ անում այստեղ:



csf   (2001-12-18 13:09) [1]

Վերագործարկեք Դելֆին, ասում են նրանք, օգնում է:
Մոտ պահվում Դեռ կարող եք կարդալ ... ...



Aleksandr   (2001-12-18 13:11) [2]

Կներեք, ես պետք է գնամ աղբավայր ... Ես հասկացա, որ ես մոռացել եմ կառուցապատողի հակառակ կողմում գծապատկերի նկարահանման հետ ...



csf   (2001-12-18 13:19) [3]

... լավ կլիներ ստուգել Paint FPen- ը և FBrush- ը `զուտ ...



Юрий Зотов   (2001-12-18 14:30) [4]

> csf

1: Վերսկսեք Դելֆին, ասում են նրանք, օգնում է:
Արժեքավոր խորհուրդ:

2: > Դուք դեռ կարող եք կարդալ պահվածի մասին ...
Դուք կարող եք Միայն սաբխելու համար սա անելիք չունի:

3: > ... լավ կլիներ ստուգել Paint FPen- ով և FBrush- ով `մինչև ...
Ինչո՞ւ Դրանք ստեղծվում են բաղադրիչ կոնստրուկցիայի մեջ: Նիլը չի ​​կարող այնտեղ լինել:

Ընդհանուր ՝ Դուք գրել եք 3 արտահայտություններ և բոլոր 3, կներեք, անհեթեթություն: Արժե՞ արդյոք գրել: Պետք է ընդհանուր առմամբ պատասխանեմ այն ​​հարցերին, որոնց թեման եք, մեղմ ասած, ոչ այնքան ծանոթ:


> Ալեքսանդր

Չնայած դրան `դուք ինքներդ արդեն հասկացաք, բայց դա դեռ ամենը չէ. Դուք ունեք կրկնակի փոխհատուցում.

կարգը TWayTree.SetBrush;
սկսել
եթե Արժեքը = զրո, ապա // Սա ավելորդ է և նույնիսկ վնասակար `դա դիմակ է տալիս օգտվողի սխալներին
Ելք.
FBrush.Assign (արժեք); // Ստեղծեք FBrush.OnChange և զանգահարեք RePaintRequest
Անվավեր // Սա ավելորդ է. Վերամշակումը շարունակվում է
վերջը.

Եվ նույնը SetPen- ում: Բացի այդ, ներկում գտնվող ARect փոփոխականը ամբողջովին անտեղի է `օգտագործեք ClientRect կամ Canvas.ClipRect:

Ի վերջո, գլխավորն այն է, որ ձեր FBrush- ը և FPen- ը բացարձակապես անօգուտ են. Միայն լրացուցիչ ռեսուրսները ոչնչացվում են: Ներկառուցված կտավը օգտագործեք.

լույս
գույքի գրիչ. TPen- ը կարդացեք GetPen- ը գրեք SetPen;
...

գործառույթ ... GetPen: TPen;
սկսել
Արդյունք ՝ = կտավ.Պեն
վերջը.

ընթացակարգ ... SetPen (const Value: TPen);
սկսել
Canvas.Pen.Assign (արժեք)
վերջը.

Եզրակացություն - նույնիսկ նման ամենապարզ բաղադրիչները պետք է ավելի մանրակրկիտ մտածել և ավելի ճշգրիտ արվել:



Aleksandr   (2001-12-18 15:50) [5]

2 Յուրի Զոտով
Շնորհակալություն տեղեկատվության համար: Այնուամենայնիվ, կտավի հատկություններին անմիջական հղումը կհանգեցնի, որ լռելյայն «ստանդարտներ» չեն լինի, այն միշտ կշարունակի ներկել այն գույնի մեջ, որը օգտագործվել էր վերջին անգամ: Եվ, ըստ այդմ, OnChange- ում ոչինչ չի կարելի տնկել - տարրական հանգույց է առաջանալու `կտավների զանգերի գույնը սահմանելով OnChange, այն առաջացնում է վերափոխում, և կտավի գույնը կրկին փոխվում է վերափոխման մեջ:
Օրակարգում մնացել է մեկ հարց. Ինչպե՞ս ավելացնել TScrollBar բաղադրիչը: Մի բան, որը ես չեմ կարող անել, որպեսզի երկակի ժառանգություն անեմ `TGraphicControl- ից և TScrollBar- ից ...



DieHard   (2001-12-18 16:01) [6]

Կրկնակի ժառանգությունը չի անցնի:
Փորձեք ժառանգել TScrollBox- ից:



MBo   (2001-12-18 16:02) [7]

կրկնակի ժառանգություն չկա:
գուցե ժառանգե՞լ TWinControl- ից:



Polevi   (2001-12-18 16:19) [8]

TCustomControl- ը



Aleksandr   (2001-12-18 16:19) [9]

Հըմ ... լավ, հիմա թողնենք սա ... Ահա, թե ինչպես կարելի է խուսափել ձևերը չափափոխելիս անընդհատ թարթող բաղադրիչներից:



panov   (2001-12-18 16:31) [10]

> Ալեքսանդր © (18.12.01 16: 19)
Փորձեք նշել միացված. = Կեղծելը նախքան չափափոխելը սխալ է



Юрий Зотов   (2001-12-18 17:25) [11]

> Ալեքսանդր © (18.12.01 15: 50)

> նա միշտ կշարունակի նկարել այն գույնի մեջ, որն օգտագործվում էր վերջին անգամ:

Որ պահանջվում է:


> Եվ, ըստ այդմ, OnChange- ում ոչինչ չի կարելի տնկել

Եվ պետք չէ: Ձեր ներկերի մեթոդը կկոչվի ավտոմատ, և ուրիշ ոչինչ չի պահանջվում:

> կկատարվի տարրական հանգույց `կտավի գույնը սահմանելով
> կանչում է OnChange- ին, այն կոչում է վերափոխում, և նորից վերափոխման մեջ
> Կտավ գույնի փոփոխություններ:

Նախ և առաջ, դուք ինքներդ հաստատում եք, որ կտավի հատկությունները փոխելով, ինքնաբերաբար կոչվում է ձեր Paint մեթոդ: Այսպիսով, դուք պետք է համաձայնեք նախորդ կետի հետ - ձեզ պետք չէ որևէ OnChange- ի բեռնավարներ (OnChange- ի բեռնավարները տալիս են միայն լրացուցիչ վերափոխումներ - հետևաբար `լրացուցիչ շողալ):

Երկրորդ, վերափոխման մեջ ՉԻ փոխել կտավի հատկությունները: Ինչո՞ւ Իսկապես, եթե բաղադրիչի հատկությունները կապում եք կտավի հատկություններին, ապա, երբ զանգում ես Paint մեթոդ, կտավի այս հատկությունները ԱՅՍՏԵՂ սահմանվում են ըստ անհրաժեշտության: Նկարիր նրանց հետ ՝ առանց որևէ բան փոխելու: Եվ այդ դեպքում ոչ մի հանգույց չի լինի:

Ընդհանրապես, ես խորհուրդ եմ տալիս փորձել `դուք ինքներդ կտեսնեք: Կարծում եմ, որ թարթումը զգալիորեն կնվազի:

Բացի այդ, թարթիչի և ScrollBar- ի հետ կապված, լսեք Պոլևիի խորհուրդը: TCustomControl- ը պատուհան է: ScrollBar- ը տեղադրվում է այնտեղ `պարզապես տեղադրելով WS_HSCROLL / WS_VSCROLL ոճերը CreatParams- ում, և կարող եք կրճատել թարթիչը` կարգավորելով DoubleBuffered հատկությունը:



Էջեր: 1 ամբողջ ճյուղը

Ֆորում: «Գլխավոր»;
Ընթացիկ արխիվը `2002.01.08;
Բեռնել: [xml.tar.bz2];

Up





Հիշողություն `0.6 ՄԲ
Ժամանակը `0.04 գ
14-22341
Խիտ
2001-10-26 13:55
2002.01.08
Մրցումների ծրագրերը `SEA FIGHTING


1-22076
Չար նենգամիտ մարդ
2001-12-19 12:50
2002.01.08
Ինչպե՞ս պարզել BIOS- ի թողարկման ամսաթիվը:


7-22428
Եղոր Մաթուեւեվ
2001-09-24 02:41
2002.01.08
Էջի HTML աղբյուրը


3-21904
Andrew
2001-11-29 22:18
2002.01.08
հարցում


1-22151
Koks
2001-12-20 14:06
2002.01.08
MDI -ClientForm- ը





afrikaans ալբանական արաբական հայերեն ադրբեջանական Բասկերի Բելառուսի Բուլղարիայի catalan Չինարեն (պարզեցված) Չինարեն (ավանդական) Խորվաթիայի չեխ դանիերեն հոլանդական Անգլերեն
Էստոնիայի filipino ֆիններեն ֆրանսերեն
galician վրացական գերմանական հունարեն haitian Creole եբրայերեն հինդի հունգարերեն icelandic հայերեն իռլանդական իտալական ճապոնացի Կորեայի Լատվիայի Լիտվայի մակեդոներեն Մալայերեն մալթերեն նորվեգական
պարսկական Լեհաստանի պորտուգալացի ռումինական ռուսական սերբերեն Սլովակիայի Սլովենիայի իսպաներեն սուահիլի շվեդերեն թայերեն թուրքական ուկրաինական ուրդու վիետնամերեն ուելսերեն հայերեն bengali բոսնիերեն
Cebuano Esperanto գուջարաթի հաուսա Hmong Igbo ճավաերեն kannada Khmer Lao լատիներեն մաորի մարաթի մոնղոլական նեպալերեն Punjabi Somali tamil telugu յորուբա
զուլուսերեն
Անգլերեն Французский Немецкий Итальянский Португальский Русский Испанский