Προς το περιεχόμενο

Γενικό thread αποριών για τη C#.


Alithinos

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Όπα ρε μεγάλε...σε λίγο θα μου φέρεις παράδειγμα και DTP όπως PageMaker...

Στα Tablets και τα τηλέφωνα έχει αλλάξει αυτό που θα σου άρεσε. Δεν έχουμε ζουμ σε όλα τα στοιχεία της σελίδας. Και αυτό γιατί οι φωτογραφίες ξεχωρίζουν από το κείμενο, με την επέμβαση του χρήστη και έρχονται στο προσκήνιο για να φανούν καλύτερα, ενώ κανονικά φαίνονται σαν μεγάλα εικονίδια. Το κείμενο ενδιαφέρει να φαίνεται. Μάλιστα θα δεις εφαρμογές που ξεκινούν με το κανονικό μέγεθος και μετά ο αλγόριθμος αρχίζει τις βελτιστοποιήσεις.

Έχει αλλάξει η ιδέα του ζουμ όπως ένας μεγεθυντικός φακός. Η σελίδα html δεν είναι αρχιτεκτονικό σχέδιο να έχουμε "κλείδωμα" αναλογίας. Έχει πληροφορίες κύρια κείμενο ενώ οι φωτογραφίες είναι συμπλήρωμα.

 

Το βίντεο είναι από 10/15. αλλά δείχνει μια φόρμα με ζουμ. Εδώ είναι αναλογικά μεν αλλά το μέτρο είναι η γραμματοσειρά. Οι γραμματοσειρές δεν έχουν όλα τα μεγέθη, υπάρχουν μεγέθη που δεν βγαίνουν, ενδιάμεσα, γιατί δεν πετυχαίνει η διαίρεση, δεν μπορούμε να δώσουμε μισά pixels. Έτσι η ζουμ φόρμα του έλεγχου αλλάζει μέγεθος, στα σωστά μεγέθη παρόλο που ο χρήστης κάνει ότι θέλει. Η φόρμα δηλαδή διορθώνει αυτόματα. Δες επίσης ότι η αλλαγή δεν το σταματάει. (δείχνει το πρόγραμμα που τρέχει).

 

Επεξ/σία από M2000
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 505
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Συχνή συμμετοχή στο θέμα

Δημοσιευμένες Εικόνες

Οκ κέρδισες, δεν πρόκειται να κάτσω να κάνω quote σελίδες από βλακείες για το αυτονόητο.

 

Την άλλη φορά δοκίμασε και να κάνεις ζουμ όμως για να δεις τι συμβαίνει στην πραγματικότητα. Δεν είναι δύσκολο, ένα double tap σ αυτήν εδώ την ίδια σελίδα αρκεί.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν λέμε το ίδιο πράγμα. Εσύ επιμένεις να βλέπεις τα πράγματα άσπρο μαύρο. Υπάρχουν όμως πολλές παραλλαγές. Μια λέξη δεν αποδίδει πάντα την ίδια έννοια, μέσο μεταφοράς είναι το αμάξι και ο γάιδαρος, και στις δυο περιπτώσεις πρέπει να οδηγήσεις το μέσο. Απλά με το γάιδαρο δε θα πέσεις στο γκρεμό, αλλά υπάρχει περίπτωση να "κολλάει" κιόλας, όπως μερικοί εδώ!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Μόνο σε εμένα φαίνεται ηλίθιος περιορισμός το ότι το όνομα ενός event δημιουργείται απαραίτητα μέσα σε κλάση αλλά έξω από μέθοδο, ενώ η ανάθεση σε αυτό μιας μεθόδου event handler πρέπει να είναι μέσα σε μέθοδο ?

 

Σε όλα τα άλλα μπορώ να κάνω αρχικοποίηση στην ίδια σειρά, πχ

int x = 5;
int[] someArray = {1, 3, 6};
object ThisObject = new object(5,true);

Αλλά όχι, τα events θέλουν σώνει και καλά αλλού να γράφεται η δημιουργία του, και αλλού ο ορισμός του handler.  Ούτε  στην ίδια σειρά, ούτε καν εντός του ίδιου scope.

 

Αλλού τούτο:

static event Publisher Kazabubu;

και αλλού αυτό:

Kazabubu += NumberBeyond10;

αυτό μου φαίνεται περιττή παραξενιά. 

Γιατί ? Γιατί κάνει τον κώδικα σπαγγέτι. Αντί να τα χω ωραία και τακτοποιημένα σε ένα σημείο, πρέπει να είναι αλλού το ένα μέρος, και αλλού το άλλο.

 

Υπάρχει κάποιος σοβαρός λόγος να μη μπορώ να κάνω την αρχικοποίηση του Kazabubu στην ίδια γραμμή ?

        static event Publisher Kazabubu += NumberBeyond10;

Άλλους τύπους όπως int και object με αφήνει να τους αρχικοποιήσω ως class members.

Τα events γιατί όχι ? 

 

 

Υ.Γ. Και κάτι ακόμα... Πως αντιμετωπίζετε τη κούραση στα μάτια και το πονοκέφαλο από τις πολλές ώρες στο κομπιούτερ ?  :fear:

Επεξ/σία από Alithinos
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Για τα events της c# δεν γνωρίζω, αλλά το νόημα ύπαρξής τους είναι αυτό: υπάρχει ο δημιουργός που στην ουσία ενώνει ένα αντικείμενο Γεγονός με αυτό, άρα μιλάμε για δυο αντικείμενα. Για το χειρισμό, ο όποιος χρήστης, ένα άλλο αντικείμενο, κάνει εγγραφή στο Γεγονός, που σημαίνει ότι με κάποιο τρόπο, εδώ με αντιπρόσωπο,εμφανίζεται η συνάρτηση κλήσης του.

Το αντικείμενο δημιουργός, κάνει χρήση του γεγονότος, χωρίς να περιμένει απόκριση. Το αντικείμενο χρήστης έχει κάνει τη σύνδεση και μέσα στη συνάρτηση αποδοχής των μυνημάτων, που θα ανήκει στο αντικείμενο απευθείας, όχι σε μέθοδο αυτού, θα μπορεί να ρυθμίζει τις ιδιότητες. Αν λέγαμε ότι η συνάρτηση αποδοχής θα ήταν μέσα σε άλλη συνάρτηση, τότε θα έπρεπε με κάποιο τρόπο να περάσουμε και το τρέχον αντικείμενο. Γράφοντάς το στην κλάση απευθείας, δίνουμε αυτό το στοιχείο άμεσα. Διαφορετικά θα δίναμε και δεύτερο στοιχείο, τη μέθοδο στη κλάση που θα περιέχει την συνάρτηση αποδοχής, και αυτό είναι υπερβολικό, γιατί ο αποστολέας μηνυμάτων θα έπρεπε να ξέρει πώς να καλέσει και αυτήν την συνάρτηση, άρα πάμε στο αρχικό, ότι αρκεί μια συνάρτηση και η υπογραφή της, το τι θέλει σε παραμέτρους, που καθορίζει το γεγονός.

 

Οι οθόνες TFT δεν κουράζουν. Ο κακός φωτισμός στο δωμάτιο, και η μη εργονομική θέση,συμβάλλουν αρνητικά στην άνετη εργασία.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τη βασική ιδέα του πως λειτουργούν τα events την έχω καταλάβει.

Ωστόσο

 

 

Διαφορετικά θα δίναμε και δεύτερο στοιχείο, τη μέθοδο στη κλάση που θα περιέχει την συνάρτηση αποδοχής, και αυτό είναι υπερβολικό,

 

δεν διαφωνώ με αυτό. Ίσα ίσα που λέω όπως δηλώνουμε ότι θέλουμε να υπάρχει ένα event έξω από μια μέθοδο πολύ ωραία για τον λόγο που ανέφερες μεταξύ άλλων, θα ήταν επίσης ωραίο να μπορούσαμε να αναθέσουμε και τη μέθοδο event handler στο event απ' ευθείας, στην ίδια γραμμή κώδικα, εκτός μεθόδου / εντός κλάσης.

 

Για να λύσω το πρόβλημα του να μην είναι σπαγγέτι ο κώδικας και ψάχνω σε ποια μέθοδο ανέθεσα αναφορά προς μια μέθοδο στο event, σκέφτηκα να ακολουθήσω την εξής προσωπική σύμβαση:

 

Να αναθέτω event handlers σε ένα event πάντα μέσα σε constructor του. Έτσι μιας και τους Constructors τους γράφω πάντα ψηλά μέσα στη κλάση, και σπάνια μου 'χει τύχει να έχω παραπάνω από 1-3, θα είναι πιο εύκολο να ξέρω που να κοιτάξω.

 

------------------------

 

Αυτό που αναρωτιέμαι είναι πως μπορώ να 'σπάσω' την εκτέλεση από έναν delegate.

 

Έστω ότι έχω έναν delegate Α που τον έχω βάλει να εκτελεί 4 μεθόδους όταν καλείται. Υπάρχει όμως ένα event που χρησιμοποιεί άλλο delegate (Β), και υπάρχει περίπτωση όταν εκτελείται μια απ' τις μεθόδους του delegate A να συμβεί ένα event σε αυτή.

Σε αυτή τη περίπτωση, θέλω ο delegate A να σταματήσει να εκτελεί τις μεθόδους που του χουν μείνει να εκτελέσει, όπως σε μια λούπα θα χρησιμοποιούσα τη break.

 

Να ένα παράδειγμα:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Media;

namespace Delegates_Exercise
{
    delegate void DoMath(double a, double ;  //Ο delegate που θα εκτελέσει πολλές μεθόδους.
    delegate void SomeEvent();  // Ο delegate για event.
  
    class Program
    {
        static void Main(string[] args)
        {
            MathFunctions neaKlassi = new MathFunctions();

            DoMath ForProgram = neaKlassi.Addition;
            ForProgram += neaKlassi.Subtraction;

            Console.WriteLine("give a number: ");
            double x = double.Parse(Console.ReadLine());
            Console.WriteLine("give another number: ");
            double y = double.Parse(Console.ReadLine());

            ForProgram(x,y);
            Console.ReadLine();
        }
    }


    class MathFunctions
    {
        event SomeEvent ZeroInput;

        public MathFunctions()
        {
            ZeroInput += MathFunctions_ZeroInput;
        }

        public void Addition(double al, double be)
        {
            if (al == 0 | be == 0)
                ZeroInput.Invoke();  // Άμα γίνει invoke το event, θέλουμε ο delegate ForProgram να σταματήσει να μην εκτελέσει τις υπόλοιπες μεθόδους του.
            
            else
            {
                double c = al + be;
                Console.WriteLine(c);
            }
        }
        public void Subtraction(double alf, double bet) // Για παράδειγμα αν στην Addition συνέβει το event, η Subtraction δεν θέλουμε να εκτελεστεί.
        {
            if (alf == 0 | bet == 0)
                ZeroInput.Invoke();
            
            else
            {
                double c = alf - bet;
                Console.WriteLine(c);
            }
        }
        public static void MathFunctions_ZeroInput()
        {
            Console.ForegroundColor = ConsoleColor.Red;
            SystemSounds.Hand.Play();
            Console.WriteLine("One or two of the numbers you gave was zero!");
            Console.ForegroundColor = ConsoleColor.Gray;
        }
    }
}

Ο μόνος τρόπος που βλέπω να μπορώ να έχω τη συμπεριφορά που θέλω, είναι δημιουργώντας επιπλέον μέθοδο αντί για delegate, που μέσα της θα έχει loop.

πχ:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Media;

namespace Delegates_Exercise
{
    delegate void DoMath(double a, double ;
    delegate void SomeEvent();
  
    class Program
    {
        static void Main(string[] args)
        {
            MathFunctions neaKlassi = new MathFunctions();

            DoMath ForProgram = neaKlassi.Addition;
            ForProgram += neaKlassi.Subtraction;

            Console.WriteLine("give a number: ");
            double x = double.Parse(Console.ReadLine());
            Console.WriteLine("give another number: ");
            double y = double.Parse(Console.ReadLine());

            neaKlassi.DoStuff(x,y); // Κλήση της νέας μεθόδου που αντικατέστησε τον delegate.
            Console.ReadLine();
        }
    }


    class MathFunctions
    {
        public static event SomeEvent ZeroInput;

        public MathFunctions()
        {
            ZeroInput += MathFunctions_ZeroInput;
        }

        public void DoStuff(double alfa, double beta) // Η νέα μέθοδος.
        {
            do
            {
                if (alfa == 0 | beta == 0)
                {
                    ZeroInput.Invoke();
                    break;
                }
                Addition(alfa, beta);
                Subtraction(alfa, beta);
            } while (false);
        }

        public void Addition(double al, double be)
        {
                double c = al + be;
                Console.WriteLine(c);
        }
        public void Subtraction(double alf, double bet)
        {
                double c = alf - bet;
                Console.WriteLine(c);
           
        }
        public static void MathFunctions_ZeroInput()
        {
            Console.ForegroundColor = ConsoleColor.Red;
            SystemSounds.Hand.Play();
            Console.WriteLine("One or two of the numbers you gave was zero!");
            Console.ForegroundColor = ConsoleColor.Gray;
        }
    }
}

Αυτό όμως είναι κακό, γιατί ένας απ' τους σημαντικότερους λόγους που οι delegates φαίνεται να είναι χρήσιμοι πέραν της χρήσης τους σε events, είναι το να μπορούν να εκτελούν ένα αριθμό μεθόδων σε μια γραμμή, χωρίς να φτιάχνω μεθόδους που καλούν μεθόδους.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το ερώτημά σου μπερδεύει. Στην άσκηση δεν χρησιμοποιείς events..

δεν έχει κάτι σαν αυτό:

 List.Changed += new ChangedEventHandler(ListChanged);

δεν δημιουργείς αντικείμενο!

https://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx

(αν και λέει outdated)

 

και εδώ όμως υπάρχει το ανάλογο. Δηλαδή η δημιουργία αντικειμένου.

EventTest e = new EventTest(5);

http://www.tutorialspoint.com/csharp/csharp_events.htm

 

Όταν κάνεις invoke το event, αυτό στην ουσία σημαίνει ότι το αντικείμενο από το οποίο το καλείς γνωρίζει το event ως αντικείμενο αλλά δεν ξέρει αυτό με τι συνδέεται. Αυτό το ξέρει κάτι έξω από το αντικείμενο που μας πάσαρε το event. Έτσι με το Invoke περνάμε πληροφορία κάπου που το αντικείμενό μας δεν γνώριζε, και ούτε θα μάθει. Επίσης αν είναι multicast, τότε αυτό σημαίνει ότι θα γίνουν πολλαπλά Invoke σε κάθε επιμέρους listener που έχει το αντικείμενο γεγονός.

Και που κολλάει το "αρχικό" αντικείμενο το οποίο σε αυτό φτιάχνεται το event; Κολλάει γιατί σε αυτό τρέχει το event κάθε πρόσθετο στην λίστα. Σκέψου δηλαδή το απλό πράγμα:

Ένα αρχικό αντικείμενο που "τρέχει", δηλαδή είναι δημιουργημένο, ορίζει ένα αντικείμενο με έναν αντιπρόσωπο χωρίς να δώσει το τι έχει αυτός. Όλα καλά μέχρι εδώ. Μετά στο πρόγραμμα ορίζουμε για αυτό το αντικείμενο (μπορούμε να έχουμε και άλλα), διάφορα "Νέα" αντικείμενα τα οποία θα φαίνονται ως συναρτήσεις, σαν να έχουν μια μέθοδο δηλαδή. Αν τώρα σε οποιδήποτε αντικείμενο, ακόμα και στο ίδιο που φτιάξαμε το αντικείμενο καλέσουμε το γεγονός, δηλαδή κάνουμε Invoke, θα παίξουν ότι έχει αυτό πάνω του με τις παραμέτρους που δώσαμε.

Αφού το αντικείμενο το βλέπουμε απ' οπουδήποτε σημαίνει ότι το φορτώνουμε οτιδήποτε! Κάθε φορά με NEW και κάθε φορά που τρέχει αυτό θα τρέχει παράλληλα με ότι άλλο έχουμε δώσει την στιγμή που το αντικείμενο θα έχει μια Α κατάσταση, και αυτό σημαίνει ότι είναι το Γεγονός που μας ενδιαφέρει να "εξυπηρετήσουμε"!

 

 

 

Form 60,30
Pen 14
Cls 5
Global nl$=chr$(13)+chr$(10)
Class Global Boiler {
Private:
       temp, pressure
Public:
      Module Boiler { Read .temp, .pressure }
      Function getTemp { =.temp }
      Function getPressure {=.pressure }
}

\\  TheEvent publisher
Class Global DelegateBoilerEvent {
      m=1000
      Event BoilerLogHandler { Read message$, &byrefValue }
      Module LogProcess {
               Read tempNow
                remarks$ = "O. K"
               b = Boiler(100, tempNow) : t = b.getTemp()
               p = b.getPressure()
               If ( t > 150 or t < 80 or p < 12 or p > 15) Then {
                  remarks$ = "Need Maintenance"
               }
               Call .OnBoilerEventLog("Logging Info:\n", &.m)
               Call .OnBoilerEventLog("Temparature" + str$(t) + "\nPressure:" + str$(p), &.m)
               Call .OnBoilerEventLog("\nMessage: " + remarks$+"\n", &.m)
               Pen 15 { Print .m } \\ 1006   1012
      }
      Function OnBoilerEventLog {
            Call Event .BoilerLogHandler
      }
}
Class Global BoilerInfoLogger {
Private:
      filename$, fHandler, fHandlerRead, LogNo
Public:
      Module BoilerInfoLogger {
            Read .filename$
            If Not Exist(.filename$) Then {
                  Open .filename$ For Wide Output As .fHandler
                  close #.fHandler
         }
         Open .filename$ For Wide Append As .fHandler
         Open .filename$ For Wide Input As .fHandlerRead
      }
      Function Logger {
          Read info$, &k
          k++
          .LogNo++
          Print # .fhandler, Replace$("\n", nl$, info$);
      }
      Function GetLogNo {=.LogNo}
      Module MoveToStart {
            seek #.fHandlerRead,1
      }
      Function NextLine {
            If Not Eof(#.fHandlerRead ) Then {
                  Line Input #.fHandlerRead, Paragraph$
                  Report Paragraph$
                  =True
            }
      }
      Module Close {
            Close #.fHandler , #.fHandlerRead
      }
   }
Group RecordBoilerInfo {
       Function Logger {
                  Read Info$, &k
                  k++ : Report Replace$("\n", nl$, info$)
                  Rem : Print "stack for values size:", Stack.Size
            }
      Module Main {
            Read YourLogFile$
            filelog = BoilerInfoLogger(YourLogFile$)
            boilerEvent = DelegateBoilerEvent()
            Event boilerEvent.BoilerLogHandler new .Logger(), filelog.logger()
          
            boilerEvent.LogProcess 12 : GetAllMessages()
            boilerEvent.LogProcess 11 : filelog.MoveToStart : GetAllMessages()
          
            filelog.Close
            Print filelog.GetLogNo()
          
            Sub GetAllMessages()
                  Pen 11 {
                        While filelog.NextLine() { }
                  }
            End Sub
     }
}
\\ Begin
RecordBoilerInfo.Main "c:\boilerNew.txt"
\\ End
Dos "Del c:\boilerNew.txt";

 

 

 

 

Kώδικας σε Μ2000 που παίζει ακριβώς αυτό το πρόγραμμα με αυτό: http://www.tutorialspoint.com/csharp/csharp_events.htm

(ήταν και το πρόγραμμα που μου έδωσε την ιδέα γιατί δεν είχα ασχοληθεί με Events, εκτός αυτών σε κλάσεις της VB6 που είναι κάπως διαφορετικά)


Στο τελευταίο σου ερώτημα, θα έβαζα ένα γεγονός για έλεγχο "αν μπορώ να συνεχίσω", θα έβαζα επίσης αυτό που δίνει το μήνυμα λάθους. Αυτά τα δύο θα πρέπει να παίζουν δυο συναρτήσεις από το ίδιο αντικείμενο και να βλέπουν μια ιδιότητα...MyError. Σε αυτό τό  αντικείμενο βάζουμε και μια εντολή για αποκατάσταση (reset), ώστε να καθαρίσουμε το λάθος. Οπωσδήποτε στον invoke θα έπαιρνα το "όχι" με byref πέρασμα μεταβλητής

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Θα γράψω όταν έχω χρόνο, αλλά προς το παρόν... όσο λιγότερο m2000 διαβάζεις τόσο καλύτερα. Θα χρειαστεί να τα βγάλεις απ' το μυαλό σου μετά έτσι κι αλλιώς.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Επισκέπτης

 

Υ.Γ. Και κάτι ακόμα... Πως αντιμετωπίζετε τη κούραση στα μάτια και το πονοκέφαλο από τις πολλές ώρες στο κομπιούτερ ?  :fear:

 

Κολλύριο ξηροφθαλμίας για τα μάτια κι εγκατάσταση του Flux ώστε τις βραδυνές ώρες να μειώνεται η φωτεινότητα της οθόνης.

https://justgetflux.com/

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δηλαδή μειώνει τη φωτεινότητα για να αντισταθμίσει την έλλειψη φωτός, που κάνει την οθόνη έντονη;

Κατά τη γνώμη μου το φως δεν πρέπει να σβήνει, και να μένει μόνο η οθόνη! Σε καμία περίπτωση δεν δουλεύουμε με χαμηλό φωτισμό στην οθόνη και σκοτάδι πίσω. Έχει διαβάσει κανείς πώς το μάτι βλέπει σε χαμηλό φωτισμό;

Γιατί να αναγκάζουμε το μάτι να "ενεργοποιεί" την "νυχτερινή" όραση;

Εδώ μας λέει ότι το χρώμα για να βλέπουμε καλύτερα σε χαμηλό φωτισμό είναι το κόκκινο!

 


Rhodopsin in the human rods is insensitive to the longer red wavelengths, so traditionally many people use red light to help preserve night vision. Red light only slowly depletes the rhodopsin stores in the rods, and instead is viewed by the red sensitive cone cells.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Moderators

Δεν είπε κανείς να κλείνεις το φως. Αλλά όπως και να το κάνουμε το δωμάτιο έχει λιγότερο φως τη νύχτα (εκτός αν έχεις προβολείς μέσα). Το flux δεν αλλάζει τη φωτεινότητα, τη θερμοκρασία αλλάζει.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Υπάρχουν δυο ειδών λάμπες, αυτές με θερμοκρασία χρώματος 6500k και άλλες με 3000k. Οι πρώτες φωτίζουν με φως "μέρας", οι δεύτερες λέγονται ψυχρός φωτισμός, και έχουν ένα ωραίο άσπρο χρώμα. Όλες οι βιομηχανίες, και οι εργατικοί χώροι γενικότερα, χρησιμοποιούν ψυχρό φωτισμό. Παρόμοιο φωτισμό βγάζει και η παλιά λάμπα φθορισμού. Στα σχολεία τέτοιες λάμπες χρησιμοποιούν.

Υπάρχουν λάμπες λοιπόν που μπορούν να διατηρούν φωτεινότητα χωρίς να έχουμε "φως ημέρας".

Στον Groot θα έλεγα κάτι, αλλά λυπάμαι και τη λέξη, και αυτοί ακόμα καλύτεροι είναι από αυτόν!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...