29. juni 2001 - 10:31Der er
26 kommentarer og 1 løsning
Flytbart polygonkomponent
Jeg har brug for et polygonkomponent med 4 hjørner jeg skal kunne ændre facon på polygonkomponentet under RunTime.
Når jeg sætter et edit flag skal cursor skifte til f.eks. crSizeAll, og jeg skal kunne flytte rundt på polygonetshjørner, som når man resizer f.eks et TShape rectangel.
Er der nogen som ligger inde med noget brugbartkode til dette er jeg meget interesseret.
TShape rectangel komponenten kan ikke anvendes da polygonet også skal kunne have facon som en rombe
Det lyder da som en sød lille opgave, jeg vil anbefale dig at lave den selv, det lyder som om du har nogle specifike krav, som du sikkert bedst for opfyldt ved at lave den selv.
Det lyder som om TShape har alt det du skal bruge - bortset fra at den altså tegner rektangler og ikke bare \"firkanter\".
I ren OOE ånd vil det jo være oplagt enten at nedarve fra TShape, men overskrive dens OnPaint (?) metoder, eller se efter hvad TShape er nedarvet fra, lave en parrallel komponent, TFirkant. Store dele af koden til TFirkant vil du kunne sakse fra sourcen til TShape.
Jeg vil umiddelbart, uden at have kigget på TShapes kode, tro at det er nemmest at nedarve fra TShape.
Jeg vil stadig mene du er bedre stillet med noget ikke \"hack\" kode, dvs. noget hvor du laver lidt mere selv, for så har du bedre styr på tingende, og tiden du kommer til at bruge på det er som regl den samme, det siger min erfaring i hvertfald mig. Vi hjælper gerne *S*
Tjaa... Sidder lige og lopper den lidt... Håber at der måske er en pakke i posten, så jeg kan more mig foran PC\'en i weekenden med noget rimeligt ny software... HINT!
morten_s >> Du skal da også havde noget at lave i weekenden, for øvrigt kan man ikke lave comps i D6 hvis man skal lave en prop. editor også, for der mangler Proxies.dcu, det er noget rigtig SKOD, at de laver den fejl igen.
vedr D6: I er sgu da ikke til at skjule noget for.... skarpsindige hjerner... Jeg mangler lige et \"Preview\" af D6 inden jeg tager den endelige beslutning om at upgrade (dvs. inden jeg har fået vredet armen nok om på økonomi afdelingen...)
Jeg havde ikke hørt det med Proxies. Hvon hulen kan de undlade at lægge den med? De har vel selv benyttet den til deres egne property editors.
delphi >> Man kan også godt udvikle en compeditor, ved at requere DesignIDE.dcp med når du så laver et project for at teste din nye comp. så kan man ikke compilere, for man kan jo ikke lave et project der requere en designtime package.
Nu har jeg lige kigget på TShape. Den ser da ud til at være nem at ændre, dvs. nedarv en TFirkant fra TShape og overwrite dens Pain metode. Resten lader du bare være.
Noget i retning af:
Type TFirkant = Class(TShape) protected procedure Paint; override; published procedure StyleChanged(Sender: TObject); property Align; property Anchors; property Brush: TBrush read FBrush write SetBrush; . . . // Include alle TShape properties, undtagen Shape. *1) .
procedure TFirkant.Paint; Begin // Kode der tegner din firkant. End;
*1) Bliver du rigtig vild, så lader du shape være med, men ændrer den til TMyShapeType (TShapeType + stFirkant) Hvis Shape er stFirkant, fint brug den egen Paint metode, ellers kaldes inherited.
Peter> jeg er startet helt fra bunden med TSquare = class(TGraphicControl), og jeg har fået den bygget op så jeg kan tegne den ved at klikke fra hjørne til hjørne.
Det som driller er når jeg skal tage fat i hjørnerne og flytte rundt på dem hvis de efterfølgende skal editteres.
Et af problemerne er at sætte komponentens Width og Height, og få slettet de gl. forbindelsesstreger til de to andre hjørner ved at tegne oveni.
Jeg syntes bare det var et problem som mange må have eksperimenteret med da alle delphi komp. kan resizes
Delphi> ja det kan jeg godt se, men hvordan får jeg de små hjørnefirkanter frem i runtime, og hvordan griber jeg fat i dem , i den oprindelige TShape, er det jo Hegith og width man flytter på og ikke hjørnerne i rectanglet
Den procedure du ændre pos i skal da bare kalde invalidate, også skal din paint klare opd. dvs. pos rutinen skal evt. bare ændre i dit array af point\'s eller hvordan du nu har lavet det.
Det med de små sorte firkanter runtime, er ikke noget man bare laver, jeg har en lille runtime Object-inspector, jeg lavede i D3, og det var ikke nogen helt triviel sag.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.