PDA

Visualizza la versione completa : [Builder c++ 6] Gestione richiami codice


luigi.ghi67
23-11-2013, 08:44
Ho scritto un codice (versione console) che legge all' infinito da un file di testo alcuni numeri.
Quando trova per esempio il numero 10 e 12
richiama un altro exe (sempre compilato da me in builder questa volta con form) in questo modo:
ShellExecute( NULL, "open","visualizza.exe",visualizza,0, SW_HIDE);
Passo all'altro exe in "visualizza" il numero e lui visualizza una form con l'immagine associata al numero.
(tramite T-image)
Poi quando il codice uno trova un altro numero (perchè va avanti all'infinito) chiudo l'exe e lo riapro subito con l'immagine nuova in questo modo:
HWND hWindow = FindWindow(NULL, "visualizza");
PostMessage(hWindow, WM_CLOSE, 0, 0);
ShellExecute( NULL, "open","visualizza.exe",visualizza,0, SW_HIDE);
E tutto funziona...
Ma mi chiedevo non c'è un modo per modificare il t-image realtime mantenendo sempre il secondo exe aperto. (praticamente modifico solo il percorso dell'immagine , glielo passo e lui cambia immagine senza chidersi)?

misterx
23-11-2013, 09:28
non puoi usare i thread?

oregon
23-11-2013, 09:55
Ma non può fare tutto il programma "visualizza"? Ovvero cercare nel file e visualizzare?

luigi.ghi67
23-11-2013, 14:12
non puoi usare i thread?

Come si fa? mi spieghi? Non li ho mai usati....
Se riesci postami anche un esempio per il mio caso... grazie!

luigi.ghi67
23-11-2013, 14:16
Ma non può fare tutto il programma "visualizza"? Ovvero cercare nel file e visualizzare?
All'inizio pensavo anche io di fare un programma unico con form... ma quando mettevo il controllo infinito nel form_create per farlo partire alla creazione della form... alla visualizzazione della prima immagine , non riuscivo a muovere la finestra con il mouse.... era bloccata probabilmente perchè lavora il processo sul ciclo infinito while...

misterx
23-11-2013, 15:53
il metodo più banale è aggiungere all'interno del ciclo Application->ProcessMessage();

luigi.ghi67
23-11-2013, 17:09
il metodo più banale è aggiungere all'interno del ciclo Application->ProcessMessage();

me lo metti in un esempio pratico?
Devo metterlo nell'applicazione 1 che richiama l'applicazione 2?
non ho capto cosa fa e come fuziona... perchè cercando su google non ci capisco molto.... grazie!

misterx
23-11-2013, 18:42
fai prima a postare il tuo codice, quello con la form

luigi.ghi67
24-11-2013, 10:15
PARTE PROGRAMMA 1 CONSOLE

int main()
{
char visualizza2[3];
int c=0;


while(1)
{
ifstream OpenFile("file_numeri.txt");
char visualizza[3];
openFile>>visualizza;
OpenFile.close();
strcpy(visualizza2,visualizza);
if(c>0)
{
if(strcmp(visualizza2,visualizza)!=0)
{
HWND hWindow = FindWindow(NULL, "visualizza");
PostMessage(hWindow, WM_CLOSE, 0, 0);
ShellExecute( NULL, "open","visualizza.exe",visualizza,0, SW_HIDE);
c++;
}
}
else
{

HWND hWindow = FindWindow(NULL, "visualizza");
PostMessage(hWindow, WM_CLOSE, 0, 0);
ShellExecute( NULL, "open","visualizza.exe",visualizza,0, SW_HIDE);
c++;
}


break;
}



PARTE PROGRAMMA 2 FORM


void __fastcall TForm1::FormCreate(TObject *Sender)
{


Form1->Image1->Picture->LoadFromFile(ParamStr(2));

}

luigi.ghi67
24-11-2013, 10:17
Programma 1 : Legge da un file di testo all'infinito una stringa (una sola) del tipo il file contiene solo una parola o un numero passo quel valore al programma 2 che visualizza un t-image

Loading