[Delphi] Shape selecteren in Runtime

Pagina: 1
Acties:

  • leerling
  • Registratie: Maart 2002
  • Laatst online: 08-05 07:51
Ik probeer te programmeren dat als ik een shape aanklik in runtime, dat hij dan geselecteerd wordt, zodat je kan resizen e.d.
Dus zodat er van die vierkante blokjes om het shape komen te staan.

Ik heb alleen geen flauw idee hoe ik dit moet doen.
Is hier een standaard procedure voor? Of moet dit mbv Region?

edit:
Ik zie net de procedure SelectClipRgn, waarschijnlijk kan het hiermee.? Dit ga ik even proberen.

[ Voor 16% gewijzigd door leerling op 03-03-2005 16:27 ]


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Dit kan niet echt. Een TShape is een TGraphicControl en deze kan geen focus krijgen. Je kan het hoogstens faken. Bovendien komen er niet zomaar runtime van die blokjes omheen staan. Mag ik eerst vragen wat je doel met dit geheel is?

We adore chaos because we like to restore order - M.C. Escher


  • Icelus
  • Registratie: Januari 2004
  • Niet online
Standaard kan dit inderdaad niet, je zal dit zelf moeten programmeren.
Er is als freeware wel het een en ander te vinden maar misschien dat dat wat overkill is.
Wat wil je precies ermee gaan doen?

Developer Accused Of Unreadable Code Refuses To Comment


  • leerling
  • Registratie: Maart 2002
  • Laatst online: 08-05 07:51
Ik ben met een soort tekenprogramma bezig. Het is de bedoeling dat de gebruiker shapes kan tekenen in verschillende vormen en deze later makkelijk kan resizen/verplaatsen. Dit alles werkt goed, behalve het resizen (op de manier zoals ik het wil).

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Maar wat is het probleem dan precies? Die shapes zijn TShapes of je eigen creatie?

We adore chaos because we like to restore order - M.C. Escher


  • leerling
  • Registratie: Maart 2002
  • Laatst online: 08-05 07:51
Het zijn eigen creaties, maar wel afgeleid van TShape.
Wat ik dus wil is zo'n shape in runtime kunnen selecteren, op dezelfde manier als je in Designtime een shape selecteert.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

http://www.undu.com/Articles/990505a.html
http://www.greatis.com/de...mponents-movecontrol.html
http://www.thedelphimagazine.com/samples/1355/1355.htm
http://community.borland.com/article/0,1410,16057,00.html
http://www.delphi-central.com/movecontrun.aspx
http://www.undu.com/Articles/980306a.htm

De vierkante blokjes en de mogelijkheid van het selecteren enz zal je zelf moeten maken. De links hierboven geven je een begin. Je zou ook een component kunnen uitkiezen die dat al kan (forms runtime opmaken) bij www.torry.ru.

[ Voor 35% gewijzigd door LordLarry op 04-03-2005 10:11 ]

We adore chaos because we like to restore order - M.C. Escher


  • Icelus
  • Registratie: Januari 2004
  • Niet online
Misschien dat TStretchHandle wat voor je is.

Developer Accused Of Unreadable Code Refuses To Comment


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 13:39

Tomatoman

Fulltime prutser

Als ik dit zelf zou moeten programmeren zou ik een aparte control maken die bovenop de te resizen control gepositioneerd kan worden. Daarmee ben je niet afhankelijk van TShape, maar kun je de selectiehendels ook hangen aan bijvoorbeeld een edit box.

Implementatiestappen:[list]• Maak een TSelectionControl of iets dergelijks, die afstamt van TCustomControl (en daardoor de focus kan krijgen).
• Aan TSelectionControl voeg je een property SelectedControl toe. De waarde van deze property geeft aan over welke control de TSelectionControl heen wordt afgebeeld en bij resize operaties in grootte moet worden aangepast.
• In de Paint method van TSelectionControl zorg je dat op de hoekpunten een vierkantje wordt afgebeeld. De achtergrond moet leeg blijven, zodat de onderliggende control zichtbaar blijft. Als SelectedControl nil is, paint je helemaal niets.
• In de OnClick event van de control zet je
Delphi:
1
SelectionControl1.SelectedControl := (Self as TControl);
Als op de control wordt geklikt, wordt automatisch de SelectionControl daarboven gepositioneerd en verschijnen de sizing handles van de SelectionControl.
• Implementeer de logica waarmee TSelectionControl met de sizing handles geresized kan worden. Na het resizen doe je
Delphi:
1
SelectedControl.BoundsRect := BoundRect;
en krijgt de onderliggende control netjes de nieuwe maat als gevolg van het resizen.

Een goede grap mag vrienden kosten.


  • leerling
  • Registratie: Maart 2002
  • Laatst online: 08-05 07:51
Deze heb ik gebruikt en werkt nu perfect.
Ik moest wel het componentje een beetje veranderen, want hij was niet compatible met Delphi 2005.

  • tombo_inc
  • Registratie: December 2004
  • Laatst online: 10-03 13:21

tombo_inc

uhuh

hey das ook toevallig. ik heb net vanmiddag mijn tekenprog afgemaakt. ik heb alles gewoon zelf geprogged. ik teken op een TBitmap en ik bereken zelf mijn selectie en zo. ook heb ik zelf mijn wijzigings functie gemaakt waarin je zelf je figuur kan resizen en zo. mijn priciepe werkt zo:
de figuren zijn objecten van een zelfgemaakte class. het object bevat info over begin en eind coordinaten van de getekende figuur etc. ik sla alle figuren dan op in een array. daarna laat ik ze tekenen. als je met je muis klikt dan word berekend of je op een figuur staat, zo ja dan word er een selectie omheen getekend. daarna kun je het zaakje berekenen.
verder zijn er bij mijn weten geen standaard functies om figuren te selecteren. (maar ik ben ook nog niet zo ver met delphi)

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition

Pagina: 1