sinnaelgen Skrevet 10. juni 2012 Del Skrevet 10. juni 2012 Strengt tatt så hører dette nok under Windows programmering , men der gjelder jo bare basic og dos. jeg bruker delphi ( pascal) men det burde ikke ha så mye å si her. utgangspunktet er at jeg ønsker å få til lit fancy (virtuelle) knapper som brukes i Windows ( eller i de andre grafiske brukergrensesnittene som er i bruk). En tradisjonell knapp er jo en helt kvadratisk eller rektangulær knapp med 4 hjørner. Det synes jeg er lit kjedelig så jeg ønsker å ha flere former/figurer på den samtidig må den følge de vanlig reglen om utseende ( dissabled,aktiv men ikke trykket inn ,aktiv og trykket inn ) . altså 4 forskjellige valg. Å programmere en egen komponent med alle disse egenskapene men en figurmessing (ser ut som hvilken som hels figur ) utseende virker å være vanskelig så i stedet har jeg valgt å bruke en image ( en standard komponent som lar deg vise et bilde i hele komponentens visuelle område ). Å få til de 4 bildene og skiftet mellom dem avhengig av status på knappen har jeg fått til. Men så begynner det som er lit problematisk. når man har disse figurene av knapper så er det også ønskelig at de står tett sammen det firkantede område som det visuelle område knappene bruker gjør at figurknappen ikke kan stå så tett samme som ønskelig , da dette området overlapper hverandre . bildene jeg bruker er forsatt firkantede men deler av bildet er usynlig for å simulere at det ikke er en del av knappen. det gir utslag i at jeg trykker på knappen som er ligger øverst selv om det ser ut som jeg trykker på siden av den , eller en knapp som står ved siden av (denne er egentlig plassert under den øverste) Da ender man opp med egen image ( bilde) komponenter som er stablet over hverandre. siden deler av det bil de viser er gjennomsiktig så er det da ønskelig å flytte fokuset/ kontrollen til den første komponenten ( bildet) som ikke er gjennomsiktig ( ser ut som knappen man klikker på) . altså jeg leser av et bildepunkt . sjekker hvilken farge det har hvis fargen da er den som er gjennomsiktig så skal koden på en enkelt måte, sette fokus på den komponenten som har et bildepunkt på samme sted ,som ikke har denne gjennomsiktig fargen( punktet med denne fargen). jeg har fått til å lese av bildepunktet . Men jeg har ikke funnet helt ut hvordan jeg kan overføre kontrollen til komponenten under. Dett må selvsagt gjentaes med den komponenten helt til fargepunktet har en lovlig ikke gjennomsiktig farge. Da først kan man utføre handlingen til kompetente . i dette tilfellet at knappen er trykket ned jeg hadde her håpet på et man også kunne overføre de riktige parametrene til neste komponent når det er behov for det. Her trodde jeg at det gikk an at programmet selv ( koden) kunne finne ut hvilke komponenter som er plaser under den komponenten som er i fokus. men det viker som det ikke er mulig og jeg må plaser komponentene nøyaktig og så ta hensyn til det i koden Lenke til kommentar
etse Skrevet 10. juni 2012 Del Skrevet 10. juni 2012 (endret) Når brukeren trykker ned musa, finn så alle bildene hvor du har trykket innenfor "hitboxen" og legg disse i en liste. Dette er for å gjøre at ting skal gå fortere. Gå så gjennom alle disse og sjekk om pixelen du trykket på var gjennomsiktig eller kke. Kan legge til jeg aldri har implementert dette manuelt, men ser for meg at i praksis må det være en slik implementasjon du ønsker; men kan være du er på et høyere abstraksjonsnivå som gjør dette vanskelig å fysisk sjekke. Endret 10. juni 2012 av etse Lenke til kommentar
sinnaelgen Skrevet 10. juni 2012 Forfatter Del Skrevet 10. juni 2012 (endret) jeg vet ikke hvordan jeg for frem denne "hitboxen". jeg går ut fra at du mer en liste ( listbox eller lignende) der hver komponent listes opp Problemet er finne eller søke opp alle komponenten som er i bruk for så få dem i en liste . jeg vet rett og slet ikke hvilken metode jeg kan bruke og hvordan det fungerer hvilket programmeringsspråk er det du er kjent med ? ( bare for finne ut hvilke muligheter men har eller ikke har ) Forøvrig det jeg finner ut om hit test i hjelpefilen til delphi går på farge kontroll ikke å flytte fokus over på en annen komponent Endret 10. juni 2012 av den andre elgen Lenke til kommentar
sinnaelgen Skrevet 14. juni 2012 Forfatter Del Skrevet 14. juni 2012 bildet illustrer problemet Lenke til kommentar
GeirGrusom Skrevet 15. juni 2012 Del Skrevet 15. juni 2012 I WPF under .NET hadde det vært ganske trivielt. Det er sikkert det i Delphi også, men jeg har ikke spesielt mye erfaring med Delphi. Dersom du gjør som etse foreslår, så er det ikke så alt for vanskelig. Lag et konstant array med strukturer som forklarer hvor de forskjellige knappene er. Når du trykker på Canvas eller hva du enn bruker, så tar du denne posisjonen relativt til Canvas.et, og sjekker hvilke figurer i arrayet ditt som treffer posisjonen (det kan være flere) ettersom firkanter her vil føre til tvetydighet må du slå opp pikselverdien på det aktuelle stedet for å avgjøre hvilken knapp (om noen) som treffes. Lenke til kommentar
sinnaelgen Skrevet 15. juni 2012 Forfatter Del Skrevet 15. juni 2012 nå forstod jeg ikke helt hva du mente med Array . Problemet er faktisk få til å søke opp komponentene og finne ut hvor de er plassert. det eneste som da funger er at jeg må selv bestemme det på forhand. Altså noe som funger på en statisk måte Det jeg kunne tenke meg som vil fungere er å sende en del parametre fra hvert enkelt bildekomponet (image) til en felles rutine og så ta det derfra. De viktigste parametrene vil da være hvilken knapp (image) er dette, posisjonen til markøren og så fargen i det punktet. Så må man sammenlign bilde for bilde i forhold til markøren. Testpunktet må da selvfølgelig justeres i forhold til den den posisjonen hver komponent har . Når det rette punktet er funnet så kan jeg utføre det rette knappetrykket. vil ikke det fungere ? Lenke til kommentar
GeirGrusom Skrevet 16. juni 2012 Del Skrevet 16. juni 2012 (endret) Det vil vel funke det også... Alle kontrollene som er eid av en komponent ligger i egenskapen Controls. ControlCount forteller hvor mange kontroller det er totalt. edit: forøvrig arrays i delphi http://delphi.about.com/od/beginners/a/arrays.htm Endret 16. juni 2012 av GeirGrusom Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå