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

γραφικό περιβάλλον


ChildInTime

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

Δημοσ.

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

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

 

EMBARCADERO RAD STUDIO 2010 για C/C++.

Δημοσ.

Ασχολεισαι με καποια γλωσσα προγραματισμου?Εχεις καποια ιδιαιτερη προτιμιση??Θα μπορουσες να κανεις απο web εφαρμογη(δηλαδη σε να τρεχει σε browser με php η javascript) μεχρι windows forms με .ΝΕΤ. Υπαρχουν πολλες ενναλακτικες λυσεις. Το θεμα ειναι αν γνωριζεις κατι ωστε να πατησεις σε αυτο

Δημοσ.

Καλημέρα. Αν ισχύουν τα 3 παρακάτω ταυτόχρονα:

 

1. Δεν «καίγεσαι» να μάθεις μία παραδοσιακή γλώσσα προγραμματισμού σε συνδυασμό με κάποιο GUI framework που θα τη συνοδέψει

2. Δε σε ενδιαφέρει το πρόγραμμα που θα γράψεις να τρέχει σε άλλα Λ/Σ πλην των Microsoft Windows

3. Το πρόγραμμα δε θα κάνει ιδιαίτερα περίπλοκους και απαιτητικούς υπολογισμούς όπου μία παραδοσιακή γλώσσα με έναν αντίστοιχο compiler θα έδιναν πιθανότατα καλύτερο αποτέλεσμα

 

...θα πρότεινα πολύ πολύ σοβαρά να ρίξεις μια ματιά στη σκριπτογλώσσα του AutoIt. Πολλοί το ξέρουν ως ένα πακέτο αυτοματισμού (για εκτέλεση επαναλαμβανόμενων ενεργειών), αλλά κάνει πολύ περισσότερα από αυτό. Μπορείς να φτιάξεις κανονικά GUI interfaces με υποκείμενο κώδικα που να κάνει πολύ πιο περίπλοκα πράγματα από το «να δίνεις τιμές σε παραθυράκια». Επίσης, το ενσωματωμένο Help του είναι πολύ επεξηγηματικό και καλύπτει όλες τις functions που προσφέρει το AutoIt (και είναι πάρα πολλές, καλύπτουν εργασίες I/O σε αρχεία, γραφικά, network connectivity και άλλα).

 

Το χρησιμοποίησα σχετικά πρόσφατα για 2 projects μου και ήταν πραγματική απόλαυση το πόσο εύκολα και με πόσο λίγο σχετικά κώδικα μπορείς να κάνεις εκπληκτικά πράγματα. :-)

Δημοσ.

Αν είναι να μάθεις κάτι από την αρχή, θα έλεγα WPF/Silverlight και C# για τον λιγοστό κώδικα που θέλει να γράψεις.

Δημοσ.
Αν είναι να μάθεις κάτι από την αρχή, θα έλεγα WPF/Silverlight και C# για τον λιγοστό κώδικα που θέλει να γράψεις.

 

+1, αν και τα winforms με C# δεν θα σε χαλάσουν με το wpf μπορείς να κάνεις θαύματα αν κατέχεις και το καλλιτεχνικό κομμάτι

Δημοσ.

ευχαριστω πολυ για τις απαντησεις... δεν εχω ασχοληθει με προγραμματισμο πολυ (μονο με fortran ) αλλα θα ηθελα απλα να ασχοληθω με μια γλωσσα που να κανει κατι τετοιο... αν γραψω πχ κατι σε φορτραν πως μπορω μετα να του "δωσω" γραφικο περιβαλλον ;

Δημοσ.
+1, αν και τα winforms με C# δεν θα σε χαλάσουν με το wpf μπορείς να κάνεις θαύματα αν κατέχεις και το καλλιτεχνικό κομμάτι

 

Θα συνταχθώ και εγώ με τους φίλους που υποστηρίζουν την εκμάθηση C# και WPF.

Πάντα μιλάμε για εφρμογές σε windows ειδάλλως πάμε σε άλλα πράγματα...

Δημοσ.
ευχαριστω πολυ για τις απαντησεις... δεν εχω ασχοληθει με προγραμματισμο πολυ (μονο με fortran ) αλλα θα ηθελα απλα να ασχοληθω με μια γλωσσα που να κανει κατι τετοιο... αν γραψω πχ κατι σε φορτραν πως μπορω μετα να του "δωσω" γραφικο περιβαλλον ;

 

Eπειδή έχω ασχοληθεί αρκετά με fortran θα σου πω τα εξής.

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

 

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

Τέτοια π.χ. είναι το Qwin αλλιώς quick win που είχε η powerstation της MS και μετά το το υποστήριξε η digital,

η compaq και τώρα η intel. Σχεδόν 20 χρόνια είναι αυτούσιο και για μέσης πολυπλοκότητας πράγματα επαρκεί.

Ειδικά ο complier της Intel και (ο παλιός της digital) έχει πολλά σχετικά παραδείγματα.

Πρέπει να έχεις τον compiler όμως (copmaq ή Intel). Για άλλους compilers (Lahey κλπ) δεν ξέρω τι γίνεται.

Τι άλλες τέτοιες βιβλιοθήκες υπάρχουν δεν ξέρω - δεν αποκλείεται να έχει κι άλλες πιο καλές αλλά αυτή είναι

δοκιμασμένη πολλά χρόνια.

 

Άλλη λύση είναι ο προγραμματσμός σε win 32 μέσω fortran (αν έχεις ιώβεια υπομονή και μαζοχιστικές τάσεις -

όπως και σε C/C++ βέβαια). Εδώ θα πας μόνον αν χρειαστείς Opengl.

 

Δες αυτό το βιβλίο, είναι καλός οδηγός :

http://www.amazon.com/Compaq-Visual-Fortran-Creating-Applications/dp/1555582494/ref=sr_1_1?s=books&ie=UTF8&qid=1279529041&sr=1-1

 

Άλλη λύση είναι ο μικτός προγραμματισμός. Γράφεις το interface σε κάτι που βολεύει (εγώ θα δοκίμαζα με Qt/C++)

και μετά καλείς τα υπολογιστικά από εκεί. Το αν και κατά πόσο μπορεί να γίνει αυτό ή αν είναι πιο εύκολο με άλλες

γλώσσες όπως C# δεν ξέρω. Mε visual basic π.χ., το manual γράφει ότι γίνεται και δίνει οδηγίες.

Αν ξέρεις μόνον fotran ξέχνα το προς το παρόν.

 

Το βιβλίο που σου προτείνω είναι καλό για πρώτος οδηγός επειδή δεν σε ξεστατρατίζει σε άλλες γλώσσες

(μένεις σ΄αυτήν που ξέρεις), είναι αρκετά πλήρες και καλογραμμένο.

Με τα παραδείγματα και τις οδηγίες που έχει το help του compiler θα προχωρήσεις.

Θα πρέπει όμως να έχεις compiler intel (ή της compaq που είναι λίγο παλιότερος).

 

Aν ούτε fortran ξέρεις καλά, ούτε πρέπει να δουλέψεις αναγκαστικά σ' αυτήν,

ξεκίνα από την αρχή με κάτι από αυτά που προτείνουν οι άλλοι παραπάνω.

 

Σε κάθε περίπτωση θα παιδευτείς αρκετά...

Δημοσ.

Εαν σε εμπνεει κατι απο τα παρακατω :P.

c# wpf

 

 

code part 1 (C#)

>using System;
using System.Windows;
namespace wpf_test
{
   /// <summary>
   /// Interaction logic for MainWindow.xaml
   /// </summary>
   public partial class MainWindow : Window
   {
       public MainWindow()
       {
           InitializeComponent();
       }

       private void btnOk_Click(object sender, RoutedEventArgs e)
       {
           try
           {
               tbout.Text = (double.Parse(tbin1.Text) + double.Parse(tbin2.Text)).ToString();
           }
           catch (Exception)
           {
               
               
           }
       }
   }
}

code part 2 (xml)

><Window x:Class="wpf_test.MainWindow"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       Title="MainWindow" Height="200" Width="211">
   <Grid>
       <TextBox  HorizontalAlignment="Center" Margin="0,24,0,0" Name="tbin1" VerticalAlignment="Top" Width="150" />
       <TextBox  HorizontalAlignment="Center" Margin="0,53,0,0" Name="tbin2" VerticalAlignment="Top" Width="150" />
       <TextBox  HorizontalAlignment="Center" Margin="0,82,0,0" Name="tbout" VerticalAlignment="Top" Width="150" />
       <Button Content="Ok" Height="23" HorizontalAlignment="Center" Margin="0,111,0,0" Name="btnOk" VerticalAlignment="Top" Width="75" Click="btnOk_Click" />
   </Grid>
</Window>

 

 

c# win gdi

 

>using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Drawing;
namespace wfa_test
{
   static class Program
   {
       /// <summary>
       /// The main entry point for the application.
       /// </summary>
       [sTAThread]
       static void Main()
       {
           Application.EnableVisualStyles();
           Application.SetCompatibleTextRenderingDefault(false);
           Application.Run(new Form1());
       }
   }
   public class Form1 : Form
   {
       private TextBox tbin1;
       private TextBox tbin2;
       private TextBox tbout;
       private Button btnOk;
       public Form1()
       {
           tbin1 = new TextBox { Location = new Point { X = 20, Y = 20 } };
           tbin2 = new TextBox { Location = new Point { X = 20, Y = 50 } };
           tbout = new TextBox { Location = new Point { X = 20, Y = 80 }, ReadOnly = true };
           btnOk = new Button { Location = new Point { X = 30, Y = 110 }, Text = "Ok" };
           this.Height = this.Width = 200;
           btnOk.Click += (sender,e) =>
           {
               try
               {
                   tbout.Text = (double.Parse(tbin1.Text) + double.Parse(tbin2.Text)).ToString();
               }
               catch (Exception)
               {
               }
           };
           this.Controls.AddRange(new Control[] { tbin1, tbin2, tbout, btnOk });
          
       }
   }
}

 

native gdi (c/c++) :mrgreen:

 

>#include <windows.h>
#include <stdlib.h>
#include <cstdio>
#define BTN_OK 23

HWND hWnd,tbin1,tbin2,tbout,btnOk;
HINSTANCE hInst;
LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);

INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                  LPSTR lpCmdLine, int nCmdShow)
{
   MSG         Msg;
   WNDCLASSEX  cw;
hInst            = hInstance;

   cw.cbSize        = sizeof(WNDCLASSEX);
   cw.style         = CS_HREDRAW | CS_VREDRAW;
   cw.lpfnWndProc   = WndProc;
   cw.cbClsExtra    = NULL;
   cw.cbWndExtra    = NULL;
   cw.hInstance     = hInstance;
   cw.hIcon         = LoadIcon(hInstance, IDI_APPLICATION);
   cw.hCursor       = LoadCursor(NULL, IDC_ARROW);
   cw.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
   cw.lpszMenuName  = NULL;
   cw.lpszClassName = L"noname";
   cw.hIconSm       = LoadIcon(hInstance, IDI_APPLICATION);

   RegisterClassEx(&cw);

   hWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,
                         L"noname",
                         L"Hey",
                         WS_OVERLAPPEDWINDOW,
                         100,
                         100,
                         200,
                         200,
                         NULL,
                         NULL,
                         hInstance,
                         NULL);

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   while( GetMessage(&Msg, NULL, 0, 0) )
   {
       TranslateMessage(&Msg);
       DispatchMessage(&Msg);
   }

   return 0;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
   switch(Msg)
   {
   case WM_DESTROY:
       PostQuitMessage(WM_QUIT);
       break;
case WM_CREATE:
	{
		tbin1 = CreateWindow(
			L"Edit",L"",WS_CHILD | WS_VISIBLE ,10,10,80,20,hWnd,NULL,hInst,NULL);
		tbin2 = CreateWindow(
			L"Edit",L"",WS_CHILD | WS_VISIBLE ,10,40,80,20,hWnd,NULL,hInst,NULL);
		tbout = CreateWindow(
			L"Edit",L"",WS_CHILD | WS_VISIBLE ,10,70,80,20,hWnd,NULL,hInst,NULL);
		btnOk = CreateWindow(
			L"Button",L"Ok",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON ,10,110,80,20,hWnd,(HMENU)BTN_OK,hInst,NULL);
	}
	break;
case WM_COMMAND:
	{
		switch(wParam)
		{
		case BTN_OK:
			{
				char str1[20],str2[20],str3[20];
				GetWindowTextA(tbin1,str1,20);
				GetWindowTextA(tbin2,str2,20);
				sprintf(str3,"%f",(atof(str1)+atof(str2)));
				SetWindowTextA(tbout,str3);

			}break;
		default: break;
		}
	}
	break;

   default:
       return DefWindowProc(hWnd, Msg, wParam, lParam);
   }
   return 0;
}

 

mfc (c++)

 

>βαρετο

 

 

Διαλεγεις και περνεις. Υπαρχουν πολλα gdi apis, αυτα ειναι μονο για windows.

output

post-103086-129063107008_thumb.jpg

 

BTW: Ξερει κανεις να μου πει πως βαζουμε τα default style στο native api των windows; Δε γινετε να φτιαχνω ενα κουμπι και αυτο να ειναι σαν αυτα των win98

Δημοσ.

Για τον φίλο που ρώτησε το αρχικό ερώτημα: υπάρχουν πολλές λύσεις. Η δική μου "συμβουλή" είναι να διαλέξεις μία και να ξεκινήσεις! Τρώγοντας έρχεται η όρεξη! ;)

Δημοσ.
Εαν σε εμπνεει κατι απο τα παρακατω :P.

c# wpf

 

 

code part 1 (C#)

>using System;
using System.Windows;
namespace wpf_test
{
   /// <summary>
   /// Interaction logic for MainWindow.xaml
   /// </summary>
   public partial class MainWindow : Window
   {
       public MainWindow()
       {
           InitializeComponent();
       }

       private void btnOk_Click(object sender, RoutedEventArgs e)
       {
           try
           {
               tbout.Text = (double.Parse(tbin1.Text) + double.Parse(tbin2.Text)).ToString();
           }
           catch (Exception)
           {
               
               
           }
       }
   }
}

code part 2 (xml)

><Window x:Class="wpf_test.MainWindow"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       Title="MainWindow" Height="200" Width="211">
   <Grid>
       <TextBox  HorizontalAlignment="Center" Margin="0,24,0,0" Name="tbin1" VerticalAlignment="Top" Width="150" />
       <TextBox  HorizontalAlignment="Center" Margin="0,53,0,0" Name="tbin2" VerticalAlignment="Top" Width="150" />
       <TextBox  HorizontalAlignment="Center" Margin="0,82,0,0" Name="tbout" VerticalAlignment="Top" Width="150" />
       <Button Content="Ok" Height="23" HorizontalAlignment="Center" Margin="0,111,0,0" Name="btnOk" VerticalAlignment="Top" Width="75" Click="btnOk_Click" />
   </Grid>
</Window>

 

 

c# win gdi

 

>using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Drawing;
namespace wfa_test
{
   static class Program
   {
       /// <summary>
       /// The main entry point for the application.
       /// </summary>
       [sTAThread]
       static void Main()
       {
           Application.EnableVisualStyles();
           Application.SetCompatibleTextRenderingDefault(false);
           Application.Run(new Form1());
       }
   }
   public class Form1 : Form
   {
       private TextBox tbin1;
       private TextBox tbin2;
       private TextBox tbout;
       private Button btnOk;
       public Form1()
       {
           tbin1 = new TextBox { Location = new Point { X = 20, Y = 20 } };
           tbin2 = new TextBox { Location = new Point { X = 20, Y = 50 } };
           tbout = new TextBox { Location = new Point { X = 20, Y = 80 }, ReadOnly = true };
           btnOk = new Button { Location = new Point { X = 30, Y = 110 }, Text = "Ok" };
           this.Height = this.Width = 200;
           btnOk.Click += (sender,e) =>
           {
               try
               {
                   tbout.Text = (double.Parse(tbin1.Text) + double.Parse(tbin2.Text)).ToString();
               }
               catch (Exception)
               {
               }
           };
           this.Controls.AddRange(new Control[] { tbin1, tbin2, tbout, btnOk });
          
       }
   }
}

 

native gdi (c/c++) :mrgreen:

 

>#include <windows.h>
#include <stdlib.h>
#include <cstdio>
#define BTN_OK 23

HWND hWnd,tbin1,tbin2,tbout,btnOk;
HINSTANCE hInst;
LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);

INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                  LPSTR lpCmdLine, int nCmdShow)
{
   MSG         Msg;
   WNDCLASSEX  cw;
hInst            = hInstance;

   cw.cbSize        = sizeof(WNDCLASSEX);
   cw.style         = CS_HREDRAW | CS_VREDRAW;
   cw.lpfnWndProc   = WndProc;
   cw.cbClsExtra    = NULL;
   cw.cbWndExtra    = NULL;
   cw.hInstance     = hInstance;
   cw.hIcon         = LoadIcon(hInstance, IDI_APPLICATION);
   cw.hCursor       = LoadCursor(NULL, IDC_ARROW);
   cw.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
   cw.lpszMenuName  = NULL;
   cw.lpszClassName = L"noname";
   cw.hIconSm       = LoadIcon(hInstance, IDI_APPLICATION);

   RegisterClassEx(&cw);

   hWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,
                         L"noname",
                         L"Hey",
                         WS_OVERLAPPEDWINDOW,
                         100,
                         100,
                         200,
                         200,
                         NULL,
                         NULL,
                         hInstance,
                         NULL);

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   while( GetMessage(&Msg, NULL, 0, 0) )
   {
       TranslateMessage(&Msg);
       DispatchMessage(&Msg);
   }

   return 0;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
   switch(Msg)
   {
   case WM_DESTROY:
       PostQuitMessage(WM_QUIT);
       break;
case WM_CREATE:
	{
		tbin1 = CreateWindow(
			L"Edit",L"",WS_CHILD | WS_VISIBLE ,10,10,80,20,hWnd,NULL,hInst,NULL);
		tbin2 = CreateWindow(
			L"Edit",L"",WS_CHILD | WS_VISIBLE ,10,40,80,20,hWnd,NULL,hInst,NULL);
		tbout = CreateWindow(
			L"Edit",L"",WS_CHILD | WS_VISIBLE ,10,70,80,20,hWnd,NULL,hInst,NULL);
		btnOk = CreateWindow(
			L"Button",L"Ok",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON ,10,110,80,20,hWnd,(HMENU)BTN_OK,hInst,NULL);
	}
	break;
case WM_COMMAND:
	{
		switch(wParam)
		{
		case BTN_OK:
			{
				char str1[20],str2[20],str3[20];
				GetWindowTextA(tbin1,str1,20);
				GetWindowTextA(tbin2,str2,20);
				sprintf(str3,"%f",(atof(str1)+atof(str2)));
				SetWindowTextA(tbout,str3);

			}break;
		default: break;
		}
	}
	break;

   default:
       return DefWindowProc(hWnd, Msg, wParam, lParam);
   }
   return 0;
}

 

mfc (c++)

 

>βαρετο

 

 

Διαλεγεις και περνεις. Υπαρχουν πολλα gdi apis, αυτα ειναι μονο για windows.

output

[ATTACH]32818[/ATTACH]

 

BTW: Ξερει κανεις να μου πει πως βαζουμε τα default style στο native api των windows; Δε γινετε να φτιαχνω ενα κουμπι και αυτο να ειναι σαν αυτα των win98

 

Εννοείς ότι θέλεις να εμφανίζονται τα buttons όπως στα xp; Δες το παρακάτω link: http://www.catch22.net/tuts/tips2

Δημοσ.

ευχαριστώ πολυ για τις απαντήσεις ... με γλώσσες όπως η c# και η java μπορείς να γράψεις προγραμματα με υπολογισμους σωστα ;

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

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