Einzelnen Beitrag anzeigen
Alt 06.07.2003, 09:51   #17
bartels
Jr. Member
 
Registriert seit: 01.10.2002
Alter: 57
Beiträge: 90


Standard

Du kriegst den Hals wohl auch nicht voll.
Das soll in Turbo C++ funktioniert haben? Da glaube ich nicht ganz dran, mit char[] und dann == geht nicht viel, besser die strcmp(),strlen() Funktionen verwenden. Das heißt in C++ können natürlich die (hinterhältigen) automatischen Konversionen auftauchen mit den versteckten Operatorübelagerungen die == und dergleichen auf char erlauben, aber da muss man dann CString nehmen, oder so.

Zum Thema Farbe des Strings:
Mit
Code:
...
if(...<...)
  pelement->fg_color=RGB(x,x,x);
else
  pelement->fg_color=RGB(y,y,y);
...
kannst Du die Farbe direkt im String callback manipulieren. U.U lohnt es sich zum Rückgabewert der callback-Funktion noch den Farbwert zu addieren,falls die Farbe "stecken bleibt". Dann ist auf jedem Fall mit einer Farbänderung auch die Funktionsückgabe geändertund der String wird neugezeichnet.z.B.
Code:
return ... + pelement->fg_color
Wenn es "nur" um einen Parameter geht, kannst Du den "fünften Parameter" in der panel.cfg benutzen (siehe auch Concorde panel.cfg die Zahl hinter X,Y,Breite,Höhe). Diese ist das "parameters" Mitglied der GAUGEHDR-Struktur. Du könntest es einmal von der gauge callback Funktion in eine Variable lesen,z.B.:
Code:
...
//global deklarieren und schon mal vorbesetzen
SINT32 maxvspd=3000;
....
//das hier im gauge callback
case	PANEL_SERVICE_POST_INSTALL:
  if(pgauge==NULL)
    break;
  if(pgauge->parameters==NULL)
    break;
  if(strlen(pgauge->parameters)==0)
    break;
  maxvspd=atoi(pgauge->parameters);
  break;
....
Oder permanent bei jedem Refresh im String Callback:
Code:
//lokal deklarieren und schon mal vorbesetzen
SINT32 maxvspd=3000;
...
if(pelement)
  if(pelement->gauge_header)
   if(pelement->gauge_header->parameters)
     if(strlen(pelement->gauge_header->parameters)>0)
      maxvspd=atoi(pelement->gauge_header->parameters);
Wenn Du mit ini-ähnlichen Dateien rumhampeln willst (bei mehr als einem Parameter) bieten sich u.U. die Funktionen um Get/SetPrivateProfile...() an. Das sind die Systemfuntionen zum Zugriff auf ini,cfg Dateien und Ähnlichem. Zur Beachtung: die brauchen den vollständigen Pfad, sonst ist alles relativ zum Windows Verzeichnis. GetModuleFileName(NULL,string,stringlen); gibt z.B. den Pfad zur FS exe, mit ein bisschen Geschnippel bekommt man den gauges Pfad daraus.

Als letztes kann man natürlich nochmal auf deinen Code eingehen:
Probier mal:
Code:
#include 
#define datei "gauge.txt"

FILE *pfile;
char wert[4];

pfile=fopen(datei, "r");

//existiert Datei?
if(pfile)
{
 fscanf(pfile,"%s",wert);
 //steht was drin?
 if(strlen(wert))
 {
  farbe_max=atoi(wert);
  farbe_min= - atoi(wert);
 }

 fclose(pfile);
}
Ich persönlich bevorzuge fgets(wert,sizeof(wert),pfile) anstelle von fscanf(pfile,"%s",wert), aber das ist Ansichtssache. Übrigens passen in char[4] nur dreistellige Zahlen, es empfiehlt sich ein bischen mehr an Speicher zu genehmigen (es sollte genug da sein). BTW fgets ist auch sicherer gegenüber Buffer Overflows.
Arne Bartels
bartels ist offline   Mit Zitat antworten