Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [VB6] Identificazione e selezione di un oggetto su una pictureBox

    Ciao!

    Vi espongo il mio quesito.

    Un mio cliente mi ha chiesto la realizzazione di una sorta di mini CAD perchè, a detta sua, i prodotti in commercio non soddisfano le sue esigenze particolari.

    Nella mia applicazione ho quindi impostato una pictureBox di dimensione fissa (perchè tale è l'esigenza del cliente) sulla quale vado a disegnare le forme che interessano al cliente, ovvero linee, label, campi che andrò poi a riempire con dei dati prelevati da un DB e rettangoli.
    Le routine che si occupano di disegnare gli oggetti è praticamente completata.

    Ora mi trovo però ad affrontare la questione della selezione degli oggetti già disegnati su questa PictureBox nel caso che l'utente voglia, ad esempio, cambiare il colore di una linea, impostare a mano le coordinate di partenza della linea ecc..

    Il problema quindi è: come capire, quando l'utente fa clic sulla PictureBox, che oggetto c'è "sopra"?

    Sto pensando ad una soluzione del genere: assegno ad ogni twips della PictureBox un numero. Ad esempio la prima riga della griglia è composta dai twips che vanno dall'1 al 5000.
    la riga successiva dal 5001 al 10000. In questo modo so esattamente il numero della twips dove sono andato a cliccare. Il problema è: come faccio a sapere se nella twips numero 7234 (magari con una tolleranza di 100 twips in X e Y) passa un'entità?

    Io ovviamente delle entità ho tutto, ovvero X1,Y1,X2,Y2 ma come faccio a sapere se ad esempio una linea le cui proprietà sono X1 = 1000, Y1 = 1200, X2 = 3420, Y2 = 5340 passa in un determinato twips?

    Qualcuno ha mai dovuto affrontare un problema del genere?



    Gian
    Non piangere per ciò che hai sbagliato ma per quello che non hai fatto per paura di sbagliare.

  2. #2
    La notte insonne per vari motivi ha portato fortuna.
    La geometria analitica studiata un po' (ehmm...) di anni fa ha fatto il resto.

    Il problema si presenta quando devo vedere se c'è una linea che passa in un determinato punto. Per identificare eventuali rettangoli il problema non si pone.

    Si tratta di ricavare le equazioni della retta passante per i due punti e vedere se il punto che ho cliccato appartiene ad una data linea.

    Semplice no?

    Non piangere per ciò che hai sbagliato ma per quello che non hai fatto per paura di sbagliare.

  3. #3
    Ma non era più semplice se creavi un insieme di classi dove in ognuna ti salvavi le coordinate precise degli oggetti (ad esempio nella linea il punto di partenza e di arrivo) e quindi tramite una routine interna ad ogni classe controllavi se un determinato punto apparteneva a quella classe? :master:

    Cerco ombrello vecchio, nuovo, moderno o antidiluviano; purché protegga da una pioggia che vien giù come Dio la manda. Fate presto che ho l’acqua alla gola. (Noè)

    C# programming and other stuffs

  4. #4
    Bhe, ma in parte faccio già così.
    Nel senso che non è che "vado a vedere" se dove clicco c'è qualcosa. Anche perchè in quel modo vedo se c'è qualcosa ma sapere cosa c'è è un problema.

    Io salvo quello che creo (linee, rettangoli ecc...) in un DB, quindi delle linee ho già archiviato punto di partenza e punto di arrivo.

    Credo che quindi a questo punto sia più semplice calcolare, tramite appunto l'equazione di una retta passante per 2 punti, se il punto dove ho cliccato (con una certa tolleranza ovviamente) fa parte di una linea o di cos'altro facendo passare tutti gli oggetto che ho archiviato nel mio DB.

    Non piangere per ciò che hai sbagliato ma per quello che non hai fatto per paura di sbagliare.

  5. #5
    in un db? ma non è un po' lentino?
    Forse è meglio lavorare con le classi come aveva detto chipdb, beh, poi ovviamente bisognerebbe avere il problema sotto le mani per capire come risolverlo...
    dunque buona fortuna, ciao!
    Programmazione .NET
    http://www.samueletosatto.tk

  6. #6
    In effetti magari, come prima impressione, mettendo gli oggetti creati in un DB può sembrare un po' lentino, ma in linea generale il pannello non arriverà a contenere più di 200 elementi. Dopo qualche prova ho visto che comunque quando vado a cliccare sul pannello per vedere quale oggetto ho trovato, la risposta è pressochè immediata, quindi proseguirò su questa strada.

    In sostanza sto realizzando questo, nel caso qualcosa dovesse in futuro risolvere problematiche simili.

    Un mio cliente da AS400 ottiene dei file TXT che riproducono alcuni documenti.
    Gli elementi dentro al TXT devono essere posizionati dentro ad un report in modo che possa essere compilato e stampato un modulo nel modo più automatico possibile.

    Quello che quindi sto realizzando è un programma che permette anche all'utente stupido la realizzazione di un report di base (e qui entra in gioco il mio mini CAD).
    Quindi l'utente potrà stabilire delle regole in modo da indirizzare ogni TXT verso il report corretto preventivamente creato.

    Inoltre, a seconda del tipo di TXT che incontro, devo utilizzare un report piuttosto che un altro. Esempio stupido: se alla riga 12, colonna 20 del TXT ho una lettera A devo andare a riempire con i dati del TXT il report ReportA, se ho la lettera B devo andare a riempire il report ReportB e via dicendo.

    Inoltre assegnerò ad ogni campo creato nel mio miniCAD un certo dato presente nel file TXT, ad esempio nel campo camDenominazione vado a prendere il dato che trovo alla riga 24, colonna 30 del TXT e via dicendo.

    Il mio MiniCAD ha quindi la funzione esportazione del report che crea un file .REP che risulti in tutto per tutto un report di Report Manager, in modo quindi da ottenere la stampa del TXT formattato in base al modello e quindi sia possibile esportarne il PDF.

    Piuttosto ambizioso come progetto, per lo meno considerate le mie conoscenze, ma sono già a buon punto.



    Gian
    Non piangere per ciò che hai sbagliato ma per quello che non hai fatto per paura di sbagliare.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.