www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Instanca razreda

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> MS Windows razprave
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
drVrh
Član
Član



Pridružen-a: Sre 20 Feb 2008 20:17
Prispevkov: 918
Aktiv.: 4.34
Kraj: Slovenija-Koroska-Prevalje-Lese

PrispevekObjavljeno: Sre Jul 07, 2010 5:44 pm    Naslov sporočila:  Instanca razreda Odgovori s citatom

Lp

zanima me predvsem kaj je to instanca razreda (angl. instance).

Srečal sem jo pri SQL podatkovnih bazah sedaj pa še v projektu na katerem delam na googlov zemljevid rišem planinske poti ki so posnete z GPS, s kreiranjem svojih KML filov.

Problem pa je ker imam v kodi za program napisano instanco za SQL povezavo podatkovne zbirke in sedaj bi rabil instanco na razred IGEPlugin torej googlov razred ki je vstavljen v projekt oz. program.

Zanima me če delujeta skupaj dve instanci?

Zakaj?

V zemljevid bi rad dodal kontrolnik navigator s katerim se pomikaš gor dol levo desno nastavljaš kot pogleda ter zoomiraš k zemljevidu, map-u.

Zato moram dodati v kodo ta stavek:

Koda:
ge.getNavigationControl().setVisibility(ge.VISIBILITY_AUTO);


In ta ge je neki objekt v razredu IGEPlugin deklariranega imam s tem stavkom:

Koda:
private IGEPlugin ge = null;


V kodi pa mora biti še ta funkcije ki se kliče od nevem kod, saj je uporabljena v večini primerih na netu in tukaj me skrbi tale stavek Instance:

Koda:
        public void JSInitSuccessCallback_(object pluginInstance)
        {
            ge = (IGEPlugin)pluginInstance;
        }


Zato me zanima če je možno uporabiti dve instanci, pravzaprav pojma nimam kaj je to instanca?

Vem samo da jo moram uporabiti.

Jezik je visual C#.

Tukaj pa je še primer celotnega programa, kjer vidite m_ge je enako kot ge, sem poskusil če lahko dam kakšno drugo ime.

Koda:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using GEPlugin;
using System.Data.SqlClient;
//using System.Text.RegularExpressions;
using System.Runtime.InteropServices;
using System.Net;



namespace GEarth_kml
{
    public partial class Form1 : Form
    {

        private IGEPlugin m_ge = null;

        StreamWriter kml;
        StreamReader kml_start,kml_end;
        StreamReader file;
        Random rand = new Random();
        double coo;
        String co;
        string PLUGIN_URL = Environment.CurrentDirectory + "/pluginhost.html";
        string url = Environment.CurrentDirectory + "/test2.kml";


        //SQL
        SqlConnection sqlPovezava;
        SqlDataAdapter sqlAdapter;
        SqlCommandBuilder sqlComm;
        DataRow sqlDataRow;
        DataSet sqlDataSet;

        //connection string
        string conn_str = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Poti.mdf;Integrated Security=True;User Instance=true";

        public Form1()
        {
            InitializeComponent();
            kml = new StreamWriter("test2.kml");
            kml_start = new StreamReader("test.kml");
            kml_end = new StreamReader("test1.kml");
            //m_ge = (IGEPlugin)pluginInstance;
            //checkBox1.Checked = true;
            //visAuto();

            //this.JSInitSuccessCallback_(object pluginInstance);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            kml.Write(kml_start.ReadToEnd());
           
            kml_start.Close();


            this.Text = co;
            odpriPovezavo("SELECT * FROM k0036", "k0036");
            textBox1.Clear();
            string x,y;
            for (int i = 0; i < sqlDataSet.Tables["k0036"].Rows.Count; i++)
            {
                sqlDataRow = sqlDataSet.Tables["k0036"].Rows[i];
                x = sqlDataRow[2].ToString();
                y = sqlDataRow[3].ToString();
                x = x.Replace(',', '.');
                y = y.Replace(',', '.');
                kml.WriteLine(String.Format("{0},{1},2000", x, y));
                //coo = rand.NextDouble() * 50;
                //co = coo.ToString();
                //co = co.Replace(',','.');
                //kml.WriteLine(co + "," + co+ ",600");
            }
            sqlPovezava.Close();

            kml.Write(kml_end.ReadToEnd());

            kml_end.Close();
            kml.Close();
            //*************************************
            webBrowser1.Navigate(PLUGIN_URL);

            file = new StreamReader("test2.kml");
            textBox1.Text = file.ReadToEnd();
            file.Close();
           

        }
        public void JSInitSuccessCallback_(object pluginInstance)
        {
            m_ge = (IGEPlugin)pluginInstance;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //System.Diagnostics.Process.Start("notepad.exe", "test2.kml");
            //webBrowser1.Navigate("javascript:kml()");
            string b = "aa";
            string a = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><kml xmlns=\"http://www.opengis.net/kml/2.2\"><Document><Camera><longitude>-122.444633</longitude><latitude>37.801899</latitude><altitude>139.629438</altitude><heading>-70.0</heading><tilt>75</tilt></Camera><Placemark><name>Placemark from KML file</name><Point><coordinates>-122.448425,37.802907,0</coordinates></Point></Placemark></Document> </kml>";
            webBrowser1.Navigate("javascript:kml()");
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }
        private void odpriPovezavo(string comm, string tabela)
        {
            //odpre povezavo do sql baze
            sqlPovezava = new SqlConnection(conn_str);
            sqlAdapter = new SqlDataAdapter(comm, sqlPovezava);
            sqlDataSet = new DataSet();
            sqlComm = new SqlCommandBuilder(sqlAdapter);
            sqlAdapter.Fill(sqlDataSet, tabela);
            sqlPovezava.Open();
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {

            if (checkBox1.Checked == true)
            {
                if (m_ge != null)
                {
                    visAuto();
                }

            }
            else
            {
                visHide();
            }
        }

        private void visAuto()
        {
            m_ge.getNavigationControl().setVisibility(m_ge.VISIBILITY_AUTO);
        }
        private void visHide()
        {
            m_ge.getNavigationControl().setVisibility(m_ge.VISIBILITY_HIDE);
            m_ge.getNewEarthInstanceCreated_();
        }

        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox2.Checked == true)
            {
                showSun();
            }
            else
            {
                hideSun();
            }
        }
        private void showSun()
        {
            m_ge.getSun().setVisibility(1);
        }
        private void hideSun()
        {
            m_ge.getSun().setVisibility(0);
        }

    }
}


Ta navigator se vključi tako da se potrdi checkBox1, in ko jaz pritisnem pri zagonu programa checkBox1 se mi pojavi ta napaka, kako jo rešit, pravzaprav je to problem!



instanca_problem.JPG
 Opis:
 Velikost datoteke:  17.72 KB
 Pogledana:  4289 krat

instanca_problem.JPG



_________________
Iz dneva v dan sem se spraševal kaj je to elektrika, vendar nisem našel odgovora ... in še vedno si postavljam to vprašanje
LP
Grega
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Vinkel
Član
Član



Pridružen-a: Čet 15 Maj 2008 16:55
Prispevkov: 237
Aktiv.: 1.14
Kraj: Ljubljana

PrispevekObjavljeno: Sre Jul 07, 2010 8:17 pm    Naslov sporočila:  Re: Instanca razreda Odgovori s citatom

Citiram:
zanima me predvsem kaj je to instanca razreda (angl. instance).


Sam sem sicer daleč od eksperta v objektnem programiranju, kakor pa mi je znano je instanca zgolj primerek (oz.kako bi se to bolje reklo) nekega razreda...


Če poskusim malo bolj slikovito:

V razredu "ČLOVEK" imaš neke funkcije in spremenljivke naprimer : oči, lasje..


Ti dr.Vrh si instanca classa človek. (oči="zelene"; lasje="črne")
Jaz Vinkel sem tudi instanca classa človek (oči="rjava"; lasje="rjava")

itd.

Tudi sam se še lovim pri učenju C# in objektnega programiranja, upam pa da ti je kaj v pomoč.
Konkretneje ti pa pri tvoji nalogi ne bi znal pomagat. Morda kdo z več izkušnjami in daljšo kilometrino.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
red_mamba
Član
Član



Pridružen-a: Ned 20 Feb 2005 17:56
Prispevkov: 1486
Aktiv.: 6.25
Kraj: Yogyakarta

PrispevekObjavljeno: Čet Jul 08, 2010 7:26 am    Naslov sporočila:   Odgovori s citatom

Koda:

        public Form1()
        {
            InitializeComponent();
            kml = new StreamWriter("test2.kml");
            kml_start = new StreamReader("test.kml");
            kml_end = new StreamReader("test1.kml");
            //m_ge = (IGEPlugin)pluginInstance;
            //checkBox1.Checked = true;
            //visAuto();

            //this.JSInitSuccessCallback_(object pluginInstance);
        }


Zajec tiči v // znakih Mr. Green

Tvoj problem je ker ne iniciliziraš razreda v m_ge spremenljivko in to bi se naj zgodilo v zgornjih vrsticah ki so zakomentirane

_________________
Bad things happen to good people all the time for no reason!
Blog
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
drVrh
Član
Član



Pridružen-a: Sre 20 Feb 2008 20:17
Prispevkov: 918
Aktiv.: 4.34
Kraj: Slovenija-Koroska-Prevalje-Lese

PrispevekObjavljeno: Čet Jul 08, 2010 9:45 am    Naslov sporočila:   Odgovori s citatom

Že če pa odstranim komentar pa mi javi napako da je neznan objekt, ker ta objekt imam uporabljen tule malo bolj spodaj, kot je navedeno v večini primerih iz interneta:

Koda:
public void JSInitSuccessCallback_(object pluginInstance)
        {
            m_ge = (IGEPlugin)pluginInstance;
        }


Če pa samo odstranim komentar, pa se mi pojavi ta napaka torej neznan pluginInstance objekt:




Problem je ker imam m_ge prazen, nekako ga moram napolniti.

_________________
Iz dneva v dan sem se spraševal kaj je to elektrika, vendar nisem našel odgovora ... in še vedno si postavljam to vprašanje
LP
Grega
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
red_mamba
Član
Član



Pridružen-a: Ned 20 Feb 2005 17:56
Prispevkov: 1486
Aktiv.: 6.25
Kraj: Yogyakarta

PrispevekObjavljeno: Čet Jul 08, 2010 12:27 pm    Naslov sporočila:   Odgovori s citatom

mislim da ti manjka še koda za tisti objekt
_________________
Bad things happen to good people all the time for no reason!
Blog
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
BluPhenix
Član
Član



Pridružen-a: Pet 05 Mar 2004 12:54
Prispevkov: 1018
Aktiv.: 4.28
Kraj: Sežana

PrispevekObjavljeno: Ned Jul 11, 2010 11:33 am    Naslov sporočila:   Odgovori s citatom

Instanca razreda je objekt. Upam, da to dovolj nazorno razloži kaj je kaj.
_________________
Exclamation Pravilo št. 1: Pišite slovensko, velja za vse.

TA SUHI ŠKAFEC PUŠČA. Saj ni tako težko, no!
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
gregoral
Član
Član



Pridružen-a: Pet 24 Nov 2006 9:42
Prispevkov: 688
Aktiv.: 3.03
Kraj: Ljubljana

PrispevekObjavljeno: Ned Jul 11, 2010 12:29 pm    Naslov sporočila:   Odgovori s citatom

SqlConnection sqlPovezava;
//SqlConnection = razred
//sqlPovezava = instanca

IGEPlugin m_ge;
//IGEPlugin = razred (lahko je tudi interface, amak zate to ni tako pomemno)
//m_ge = instanca

Razred je definicija strukture ki "hrani" podatke in povezane funkcije.
Instanc razreda pa je lahko poljubno mnogo, in vse imajo lahko različne podatke, imajo pa enake funkcije.

Najprej poskusi če dela brez tega plugina, šele potem se spravi na plugin.

Priporočam pa da najprej dobiš en sample ki je čimbolj podoben temu kar bi ti rad naredil (C#, forma, ...).
Potem nadaljuj tako da:
- postaviš breakpointe in gledaš kaj se dogaja
- poiščeš kje je IGEPlugin deklariran (recimo IGEPlugin myige)
- potem poiščeš kje program dobi instanco IGEPlugin (vsa mesta kjer je myige = "karkoli")
- modificiraš sample in poskusiš kaj dodat


Ker razen koga ki je že delal GEarth aplikacijo v C#, ti kaj več na bomo mogli svetovat.

LP, Gregor

P.S.:
razlika med razredom in inetrfaceom je (med drugim) v tem da instanco razreda (največkrat) lahko kreiraš, interface pa lahko samo dobiš iz obstoječe instance razreda.

primer razreda ki implementira dva interfacea:
Koda:

public sealed class ShellLink : IJumpListTask, IJumpListDestination
{
....
}

// instanca rezreda
ShellLink lnk = new ShellLink();

// kako dobimo interface
IJumpListTask jtl = (IJumpListTask)lnk;

Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
drVrh
Član
Član



Pridružen-a: Sre 20 Feb 2008 20:17
Prispevkov: 918
Aktiv.: 4.34
Kraj: Slovenija-Koroska-Prevalje-Lese

PrispevekObjavljeno: Ned Jul 11, 2010 2:58 pm    Naslov sporočila:   Odgovori s citatom

Sem si rešil problem, poleg Forma v VisualC# se rabi še pluginhost file ki je pisan v HTML z dodanim javascript odsekom.

Sem dal mojo vrstico navigatorja kar tam notri ker tam že deluje pravilna inštanca in nato kličem funkcijo iz Forme v Visual C#.

Da pa še opišem moj projekt planinske poti ki so posnete z GPS-em bom prikazal v Googlovem zemljevidu iz SQL baze kreiram KML ki jih nato dam v zemljevid ter jih prikažem. Pa sem rabil navogator da bi lahko pot prikazal tudi v 3D obliki.

Zdajšen izgled programa, na hitro in na začetku;

tista črna črta je pot, narejena z GPS-em.
Zaenkrat imam samo eno pot v prikazu ostalo so še arhivirane v SQL podatkovni zbirki!



geodet.JPG
 Opis:
 Velikost datoteke:  163.64 KB
 Pogledana:  21 krat

geodet.JPG



_________________
Iz dneva v dan sem se spraševal kaj je to elektrika, vendar nisem našel odgovora ... in še vedno si postavljam to vprašanje
LP
Grega
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> MS Windows razprave Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 10 dni


Powered by phpBB © 2001, 2005 phpBB Group