Ich hab vor ein paar Monaten angefangen, zusammen mit meik einen möglichst flexiblen (d.h umrüstbaren) Stellwerkssimu zu konzipieren und zu bauen. Der soll zunächst rein das DrS2 unterstützen, weil es unter den Drucktastenstellwerken das Einfachste ist und es sich wahrscheinlich relativ leicht zu anderen Typen aus- und umbauen liesse. Dabei sind wir auf verschiedene Möglichkeiten gekommen, die Tischfelder zu zeichnen und zu animieren. Meik plädiert auf die Canvas-Mehode, bei der er hauptsächlich mit Flood-Fill arbeiten möchte. Meine Idee war, Bitmaps mit Palette zu benutzen und die Palettenfarben zu ändern, um diverse Lamperln an- und auszuschalten. Die Canvas-Methode würde wohl auf jeden Fall funktionieren, ist aber irgendwie in meinen Augen bissle undynamisch, weil man die Animationen mehr oder weniger hardcoden müsste. Ich hab mit meiner Palettenmethode schon etwas rumgespielt und bin dabei leider auf Probleme gestoßen. Die Programmierumgebung ist Delphi 6, der Problemcode sieht wie folgt aus:
Code: Alles auswählen
procedure TForm1.Timer1Timer(Sender: TObject);
var
NewPalette: HPalette;
Format: TPixelFormat;
begin
Format := bWeiche.PixelFormat;
inc(iCounter);
bIsAn := not bIsAn;
NewPalette := bWeiche.ReleasePalette;
GetPaletteEntries(NewPalette, 0, 256, pPalette[0]);
pPalette[0].peFlags := PC_RESERVED;
if bIsAn = True then
begin
pPalette[0].peRed := 255;
pPalette[0].peGreen := 255;
end
else
begin
pPalette[0].peRed := 0;
pPalette[0].peGreen := 0;
end;
SetPaletteEntries(NewPalette, 0, 256, pPalette[0]);
bWeiche.Palette := NewPalette;
Form1.Canvas.Draw(iCounter*100,100, bWeiche);
end;
Das Problem äußert sich dabei so, dass die Palettenfarbe nur beim ersten Wechsel tatsächlich geändert angezeigt wird. Das heißt, ich habe ein Bild mit einer Weiche drauf und zwei Stellungsmeldern. Die Melder haben eine bestimmte Farbe, in dem Fall die mit dem Index 0. Sobald der Timer das erste mal tickt wird die Farbe logischerweise umgestellt von Gelb auf Grau. (Sollte es nicht eigentlisch schwarz sein?!) Ab dem zweiten Tick wird aber die Farbe nicht mehr wieder gelb angezeigt, sondern es bleibt grau. Ich hab's mit Watches nachgeprüft: Die Variablen werden anstandslos geändert und beim Auslesen der Palette wird auch immer die richtige Farbe ausgelesen. Es wird nur nicht geändert angezeigt. [Er]kennt da einer das Problem?
Noch was: Wenn hier zufällig jemand ein DrS2-Stellwerk in der Nähe rumstehn hat, da auch mal rein darf und sich auch Eigentümer einer gut auflösenden Digicam nennt: Wir könnten abfotografierte Tischfelder wirklich gut brauchen! Also, wenn da einer was hat oder so.. Wir nehmen's gern.