maheca - Sa 26.03.11 18:08
Titel: Shape / andere Komponente Blitzen lassen
Hallo zusammen!
Ich probiere jetzt schon einige Zeit herum und bin auch ungefähr genauso lang am googeln, leider ohne Erfolg :(
Folgendes Problem: Ich möchte vom PC aus einige Lichteffekte (Blitzer, LED-Fluter etc) steuern. Das ganze funktioniert auch ganz gut, allerdings möchte ich das, was mit den Geräten passiert, auch auf dem Computer darstellen. Dazu habe ich eine sehr einfache Ansicht aus TShapes erstellt, denen ich dann z.B. eine Farbe zuweise. Funktioniert auch super. Problematisch wird es allerdings bei allen Geräten, die blitzen können: Eigentlich sollte das Blitzen von einem Timer aus gesteuert werden, aber leider sind die Blitze mal zu sehen und mal nicht...
Folgender Code im Timer:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TDMXDevMon.LED2Strobe(Sender: TObject); var OutputBuffer: TDMXArray; i: Integer;
begin OutputBuffer := DMXConnection.getDMX_Out; for i := 1 to 8 do begin TShape(LED2.Items[i-1]).Brush.Color := round(OutputBuffer[Ch_LED2]/250 * OutputBuffer[(i-1)*3+Ch_LED2+2]) * $00000001 + round(OutputBuffer[Ch_LED2]/250 * OutputBuffer[(i-1)*3+1+Ch_LED2+2]) * $00000100 + round(OutputBuffer[Ch_LED2]/250 * OutputBuffer[(i-1)*3+2+Ch_LED2+2]) * $00010000; end; for i := 1 to 15 do begin Application.ProcessMessages; Sleep(2); end; for i := 1 to 8 do begin TShape(LED2.Items[i-1]).Brush.Color := $00000000; end; end; |
Je früher die einzelnen Shapes erzeugt wurden, desto schlechter werden sie aktualisiert, sprich desto mehr Blitze werden "verschluckt". Ich habe es auch schon mit Invalidate, Repaint, Refresh, Kombinationen von allem versucht --> nichts wird besser. Ich bin echt verzweifelt, das kann doch nicht so schwer sein...
Hat irgendjemand einen Vorschlag, wie ich das ganze verbessern könnte? Bin für jede Hilfe dankbar!
jaenicke - So 27.03.11 21:02
Hallo und :welcome: im Forum!
Versuche es mit Delay statt Sleep, denn das Problem ist bei Sleep, dass du die Oberfläche einfrierst.
http://www.delphipraxis.net/6620-delay.html
Ja, das Problem warum niemand geantwortet hat könnte sein, dass es ohne Beispiel schlecht nachzuvollziehen ist. ;-)