Entwickler-Ecke

Multimedia / Grafik - Unbekannte Bilddateierweiterung bei auslesen OS


Roy - Fr 19.09.14 20:15
Titel: Unbekannte Bilddateierweiterung bei auslesen OS
Hallo zusammen,

Benutze Delphi7
OS Windows7

Mein kleines Programm soll installiertes Betriebssystem auslesen. Soweit gut, haben auch den Quellcode zum Anzeigen der Version in Bild soweit hinbekommen. Beim compliieren und auch beim Testen wenn Delphi7 läuft zeigt er mir auch alles an. Starte ich mein Programm eigenständig kommt Fehler: unbekannte Bilddateierweiterung (..)

// Mein Quellcode//

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
unit slyder;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Jpeg, ExtCtrls, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Image4: TImage;
    Image5: TImage;
    Animate1: TAnimate;
    Label1: TLabel;
    Timer1: TTimer;
    Label2: TLabel;
    Image1: TImage;
    Panel2: TPanel;
    Image2: TImage;
    Image3: TImage;
    Label3: TLabel;
    Panel3: TPanel;
    Image6: TImage;
    Image7: TImage;
    Label4: TLabel;
    Image8: TImage;
    Timer2: TTimer;
    procedure FormShow(Sender: TObject);
    procedure Image5Click(Sender: TObject);
    procedure Label1Click(Sender: TObject);
    procedure Label2Click(Sender: TObject);
    procedure Image3Click(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image7Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//Menue links halten//
procedure TForm1.FormShow(Sender: TObject);
begin
   Left := Screen.WorkAreaWidth - Width;

end;

//Programm beenden//
procedure TForm1.Image5Click(Sender: TObject);
begin
close;
end;


//Systemerkennung starten//
procedure TForm1.Label1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
Animate1.Active:=true;
Label1.Visible:=false;
Label2.Visible:=true;
Panel2.Visible:=true;
Label4.Visible:=true;
end;

//Systemerkennung beenden//
procedure TForm1.Label2Click(Sender: TObject);
begin
Animate1.Active:=false;
Label1.Visible:=true;
Label2.Visible:=false;
Panel2.Visible:=false;
end;


//Panel schließen//
procedure TForm1.Image3Click(Sender: TObject);
begin
Panel2.Visible:=false;
end;


//TForm verschieben//
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 ReleaseCapture;
 Perform(WM_SYSCOMMAND, $F0120);
end;

//Panel schließen//
procedure TForm1.Image7Click(Sender: TObject);
begin
Panel3.Visible:=false;
end;


//Windowsversion//
function GetWinVersion: String;  
begin  
  Result := 'Unbekannte Version';  
  case Win32Platform of  
    1:  
      if Win32MajorVersion = 4 then
      begin  
        case Win32MajorVersion of  
          0
            Result := 'C:\Marwildeapps\Treiberapp\versionen\win95.bmp'//Dieses Bild wird geladen wenn das Betriebssystem Windows 95 ist
         
          10
            Result := 'C:\Marwildeapps\Treiberapp\versionen\win98.bmp'//Hier Dateinamen einsetzen für Win98
          90
            Result := 'C:\Marwildeapps\Treiberapp\versionen\me.bmp'//Sollte klar sein was hier jetzt rein muss ;#)
        end;  
      end;  
    2:  
      case Win32MajorVersion of  
        3:
          if Win32MinorVersion = 51 then  
            Result := 'C:\Marwildeapps\Treiberapp\versionen\windowsnt .bmp'//...

        4:
          if Win32MinorVersion = 0 then  
            Result := 'C:\Marwildeapps\Treiberapp\versionen\nt4.bmp'//...
        5:
          case Win32MinorVersion of  
            0
              Result := 'C:\Marwildeapps\Treiberapp\versionen\2000.bmp'//...
            1
              Result := 'C:\Marwildeapps\Treiberapp\versionen\win7.bmp'//...
            
            2:
              Result := 'C:\Marwildeapps\Treiberapp\versionen\netserver.bmp'//...

            3:
               Result := 'C:\Marwildeapps\Treiberapp\versionen\vista.bmp';

             4:
               Result  := 'C:\Marwildeapps\Treiberapp\versionen\xp.bmp';  
          end;
     end;
  end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Image8.Picture.LoadFromFile(GetWinVersion);
end;

//Version Text//
function GetWinVersion1: string;
begin
  result:='Unbekannte Version';
  case Win32Platform of
    1:// 9x-Reihe
      If Win32MajorVersion=4 Then Begin
        Case Win32MinorVersion of
            0: result:='Windows 95';
            10: result:='Windows 98';
            90: result:='Windows Me';
        end;
      end;
  2// NT-Reihe
     Case Win32MajorVersion of
         3:IF Win32MinorVersion=51 then
              result:='Windows NT 3.51';
         4:If Win32MinorVersion=0 then
             result:='Windows NT 4';
         5:Case Win32MinorVersion of
              0: result:='Windows 2000';
              1: result:='Windows 7';
              2: result:='Windows .NET Server';
              3: result:='Windows VISTA';
              4: result:='Windows XP';
           end;
     End;
  end;
  //Win32CSDVersion enthält Informationen zu Servicepacks
  if Win32CSDVersion<>'' then
    result:=result+' '+Win32CSDVersion;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
Label4.Caption:= 'Ihr OS: ' + GetWinVersion1;
end;

end.


Bitte um Hilfe

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Blup - Mi 24.09.14 15:12

Deine Funktion soll den Namen der Grafikdatei zurückgeben, der zur installierten Windowsversion passt.
Besser den Funktionsnamen ändern, das die eigentliche Funktion ersichtlich ist.

Die Grafiken liegen alle in einem gemeinsamen Verzeichnis, den kompletten Pfad braucht die Funktion nicht zu kennen.
Der wird entweder relativ aus dem dem Installationspfad abgeleitet oder aus einer Voreinstellung gelesen.
Notfalls einfach eine globale Konstante.

Wenn keine passende Grafik ermittelt werden kann, nicht irgendeinen Text zurückgeben, auf den nicht getestet wird!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
const
  GImagePath = 'C:\Marwildeapps\Treiberapp\versionen\';

function GetWinVersionGrafikName: string;
begin  
  Result := '';  
  case Win32Platform of  
    1:  
      if Win32MajorVersion = 4 then
      begin  
        case Win32MinorVersion of  
          0
            Result := 'win95.bmp'//Dieses Bild wird geladen wenn das Betriebssystem Windows 95 ist
         
          10
            Result := 'win98.bmp'//Hier Dateinamen einsetzen für Win980,,,,,,,,,,,,,,,,,
          90
            Result := 'me.bmp'//Sollte klar sein was hier jetzt rein muss ;#)
        end;  
      end;  
    2:  
      case Win32MajorVersion of  
        3:
          if Win32MinorVersion = 51 then  
            Result := 'windowsnt.bmp'//...

        4:
          if Win32MinorVersion = 0 then  
            Result := 'nt4.bmp'//...
        5:
          case Win32MinorVersion of  
            0
              Result := '2000.bmp'//...
            1
              Result := 'win7.bmp'//...
            
            2:
              Result := 'netserver.bmp'//...

            3:
               Result := 'vista.bmp';

             4:
               Result  := 'xp.bmp';  
          end;
     end;
  end;
end;


Entweder eine Exception auslösen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function CheckWinVersionGrafikName(const AFilename: string): string;
begin
  if AFilename = '' then
    raise Exception.CreateFmt('Grafik für Windowsversion %d.%d konnte nicht ermittelt werden',
                              [Win32Platform.Win32MajorVersion,
                               Win32Platform.Win32MinorVersion]);
  Result := AFilename;
end;

Image8.Picture.LoadFromFile(GImagePath + CheckWinVersionGrafikName(GetWinVersionGrafikName));


Oder einen leeren String zurückgeben und darauf reagieren:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure SetWinVersionPicture(APicture: TPicture);
begin
  sFilename := GetWinVersionGrafikName;
  if sFilename = '' then
    APicture.Assign(nil)
  else
    APicture.LoadFromFile(GImagePath + sFilename);
end;

SetWinVersionPicture(Image8.Picture);


ZeitGeist87 - Do 25.09.14 08:57

Den Teil versteh ich nicht


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
if Win32MajorVersion = 4 then
      begin  
        case Win32MajorVersion of  
          0
            Result := 'C:\Marwildeapps\Treiberapp\versionen\win95.bmp'//Dieses Bild wird geladen wenn das Betriebssystem Windows 95 ist
         
          10
            Result := 'C:\Marwildeapps\Treiberapp\versionen\win98.bmp'//Hier Dateinamen einsetzen für Win98
          90
            Result := 'C:\Marwildeapps\Treiberapp\versionen\me.bmp'//Sollte klar sein was hier jetzt rein muss ;#)
        end;  
      end;


Keiner der Fälle wird zutreffen, wenn du in den Case läufst, da Win32MajorVersion 4 ist...


Boldar - Mo 29.09.14 03:40

user profile iconZeitGeist87 hat folgendes geschrieben Zum zitierten Posting springen:
Den Teil versteh ich nicht


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
if Win32MajorVersion = 4 then
      begin  
        case Win32MajorVersion of  
          0
            Result := 'C:\Marwildeapps\Treiberapp\versionen\win95.bmp'//Dieses Bild wird geladen wenn das Betriebssystem Windows 95 ist
         
          10
            Result := 'C:\Marwildeapps\Treiberapp\versionen\win98.bmp'//Hier Dateinamen einsetzen für Win98
          90
            Result := 'C:\Marwildeapps\Treiberapp\versionen\me.bmp'//Sollte klar sein was hier jetzt rein muss ;#)
        end;  
      end;


Keiner der Fälle wird zutreffen, wenn du in den Case läufst, da Win32MajorVersion 4 ist...

Dem Edit nach, wohl ein Tippfehler.


ZeitGeist87 - Mo 29.09.14 13:30

Ich weiß, ich wollte nur, dass er seinen Fehler selbst findet :lol: