Gå til innhold
Presidentvalget i USA 2024 ×

ProgrammeringsBaren! Småprat, om det du elsker!


Anbefalte innlegg

Videoannonse
Annonse

 

Er det ingen som kjenner til pascal lenger , eller objekt versjonen av det ?

Joda, det er vel fler av oss som fortsatt husker det. Men det jeg er usikker på, er om det er noen her som kjenner til det du spør om.

 

Her er det delphi jeg spør om.

 

Det jeg lurer på er hvordan man overfører fokus fra en komponent til en anenn mere eller mindre automatisk uten at det blir for komplisert :

opprinnelig spørmål

 

en komponent kan overlappe flere andre.

en komponent kan også være et bilde ( bitmap)

en virtuell knapp i windows er egentlig 4 forskjellige bilder som de veksles mellom , alt etter status på knappen

( disabled , enabled , fokusert og trykket inn )

 

mine knapper skal dog ikke være firkantet med avrundet hjørner , men kan ha alle former , som også betyr at de kan flettes inn i hverandre.

En knapp har dog et arbeidsområde (hvis man kan kalle det for det ) som er firkantet , som også betyr at man for overlappende komponenter

 

Da er problemet å få flytte fokuset fra overlappende komponent der den er gjennomsiktig ( på bitmap bildet lese det av en spesifikk farge ) samtidig som markøren beholder posisjonen på skjermen

 

 

Slik jeg har gjort det så leses fargen på det punktet markøren befinner seg i , når den er over "bildet" for knappen

Da leses også fargeverdien som representerer det som er gjennomsiktig .

jeg har valgt å bruk fargen svar som transparent ( gjennomsiktig ) farge.

Den fargen er altså gjennomsiktig på skjermen

 

Det som er problematisk er å få overført kontrollen til riktig komponent som ligger under et bestem del av komponenten som ligger over

 

jeg har forsøkt flere ting men det blir for spesifikt for det ene programmet.

siden jeg har tenkt å bruke det i flere programmer så ønsker jeg meg en mere universal løsning

 

første rutine "menystatus2" mottar verdiene 'i' for bildenummer ( egentlig referanse til en bestemt "knapp")

verdien 'M' status for knappen , 'X', og 'Y' posisjonen på markøren

 

fra den kjøres en annen rutine som skal forsøke å finne alle "knappene" som overlapper.

og man skal da ende opp med en verdi som skal representere den riktig knappen virtuelt.

da må jeg også sette riktig fokus

Den måten krever også at man må legge inn en slag liste , for så teste alle mulighetene for hver enkelt "knapp".

 

det jeg ønsker er altså at programmet selv skal finne de "knappen" som "berører " hverandre , ikke noe jeg må selv må legge inn

 

f.eks hvis markøren er i høyre kant av knappen der det står "hente" såer den egentlig over knappen " flytte" .

her skal det fokuseres på knappen "hente".

knappen "hente" bør automatisk få fokus uten for mye detaljert programmering

 

det samme gjelder de andre knappene som overlapper hverandre

 

hvis noe er uklart så forventer jeg at dere spør

post-56194-0-22827300-1424897165_thumb.png

Endret av den andre elgen
Lenke til kommentar
Lenke til kommentar

ja, men det er ikke lett å å få noe ut av det til tross for at det finnes mye å sjekke

et problem jeg alt for ofte kommer over er at eksemplene som viser er beregnet på utgaver som er 5-10 år gamle.

og da kan det være problematisk å tilpasse det en mere moderne utgave

ps . jeg skal sjekke linkene

Endret av den andre elgen
Lenke til kommentar

Mer javascript.

var Obj = function() {
    this.foo = "baz";
};

var a = new Obj();

for (var member in a) {
	println(member+" = " + a[member]);
}
Når jeg skriver dette inn på khanacademy får jeg ut:
foo = baz
constructor = function () { this.foo = "baz"; }
__id = function () { [native code] }
Men tilsvarende lokalt gir bare "foo = baz". Hvorfor?

 

<!DOCTYPE html>

<html>

<head>

<title></title>

</head>

<body>

<script>

var Obj = function() {

this.foo = "baz";

};

 

var a = new Obj();

 

for (var member in a) {

console.log(member+" = " + a);

}

</script>

</body>

</html>

 

Lenke til kommentar
foo = baz
constructor = function () { this.foo = "baz"; }
__id = function () { [native code] }

 

Uten å bruke tid på å gå inn på khanacademy og inspecte forskjellige ting så tipper jeg at de bruker Ecmascript 6, og at de har laget en egen Symbol.iterator for function (antakelig object) som inkluderer properties på prototype slik at de som skal lære ser at det finnes ting her også.

 

constructor finner du nok lokalt også hvis du tprinter a.constructor til console.log.

 

Den siste __id vil jeg tro khanacademy bruker intert for å f.eks skille mellom objekter de selv har skrevet (typisk så vil de injecte en ny instans når du tester koden din, ikke bruke den de evnt viser i koden fordi du kanskje er avhengig av at den fungerer akkurat slik tiltenkt).

Det er også mulig at __id er en intern mekanisme fra Es6 jeg ikke kjenner til, men som de har valgt å eksponere. Litt usikker på denne.

Lenke til kommentar

Spørsmål om malloc og dynamisk linking.

Man har et program og en dynamisk linkbar objektfil (so). Begge bruker malloc(). Hvordan vet den ene malloc() hva den andre malloc() gjør, så de ikke går i veien for hverandre? Må rett og slett begge linke dynamisk til libc? (Slik at begge malloc egentlig peker til den samme.)

Lenke til kommentar

Ja.

 

http://stackoverflow.com/questions/17020497/why-dont-i-get-a-link-error-when-i-provide-my-own-malloc-and-free

 

Den linker mot mallocen den finner først. Etter det slutter den å lete.

 

Jeg får vel utdype litt mer. Du vil få konflikter om du har flere definisjoner av malloc i samme fil. Du kan fint "override" bibliotekers funksjoner med dine egne.

Endret av Lycantrophe
Lenke til kommentar

Pointer arithmetic. Det irriterer ikke grenseløst (da hadde jeg brukt den andre tråden), det er mer det at jeg mister troen på menneskeheten.

 

return (block_header*) (memory-((uint64_t)memory%block_size));  // 1024
return (block_header*) memory-((uint64_t)memory%block_size);  // 632 !
I grunnen ganske utrolig at en eller annen bøtteknott mente det var lurt å tvinge meg til å skrive dette:

    inline block_header * get_block_header(void *memory, int block_size_exp) {
        int block_size = 1 << block_size_exp;
        uintptr_t memory_int = (uintptr_t) memory;
        return (block_header *) (   memory_int - memory_int % block_size   );
    }
Når det jeg egentlig mener er dette:

    block_header * get_block_header(void *memory, int block_size_exp) {
        return memory - memory % (1 << block_size_exp)
    }
Lenke til kommentar

Er det noen måte å gjøre dette på annet enn å gjøre hele struct context opaque og lage en init-funksjon der medlemmene settes?

 

// Header
    struct context {
        int block_size_exp;
        void *block;                // Zero init
        int offset;                 // Zero init
    };
//.cpp
    struct block_header {
        uint64_t refcount; 
    };
    
    struct context {
        int block_size_exp;
        block_header *block;        // Zero init
        int offset;                 // Zero init
    };
Endret av Emancipate
Lenke til kommentar

Eh, constructors? Siden du allerede er i C++.

Trenger ikke stikke hånda ned i do, bare fordi man er på do. :p

 

Men om jeg bruker en constructor, så blir likevel ikke structen opaque. For om man gjør den opaque så får man ikke tilgang til constructoren. Det beste jeg kan gjøre i så fall er å sette de andre medlemmene til private.

  • Liker 1
Lenke til kommentar

Jeg valgte å gjøre den opaque og bruke en init-funksjon.

Du spurte etter en annen måte å gjøre det på enn å gjøre den opaque.

Ja, det gjorde jeg visst. Men jeg mente en annen måte som hadde tilsvarende effekt.

Hva er det du egentlig prøver å gjøre?

At "folk" ikke kan tukle med medlemmene i structen. Jeg innser at jeg kan gjøre medlemmene private, men da får jeg ikke tilgang til dem selv, uten å bruke friend. Og uansett er de synlige, selv om de ikke kan aksesseres.

Lenke til kommentar

Jeg er rimelig sikker på at programmet ditt er dårlig designet.

 

Om du skal eksponere variabler direkte, bruk public. Vil du at de skal kunne bare lese, returner kopiere med metoder. Vil du at de skal modifsere, skriv et bedre interface.

 

private variabler er det du er ute etter uansett.

Endret av Lycantrophe
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...