Hi thewulf00,
Sehr schönes Tool, was du da gebastelt hast. Was ist denn das für eine Komponente, mit der man Pixel malen kann?
sast
Druckbare Version
Hi thewulf00,
Sehr schönes Tool, was du da gebastelt hast. Was ist denn das für eine Komponente, mit der man Pixel malen kann?
sast
Hi Andree,
ich habe Dir eine rotate-Funktion eingefügt. Bitte schau mal, ob die's tut. V0.2 ist jetzt oben und zum Download bereit.
Edit: Ich sehe gerade, die wolltest ja auch eine andere Spaltenreihenfolge. Hab ich noch schnell integriert.
@sast:
Das ist keine Komponente.
Ich benutze einfach die Canvas-Oberfläche des Formulars: (Für das Zeichnen)
Code:procedure TForm1.img_rePaint;
var r :Trect;
I,J :Integer;
begin
For I:=0 to 31 do
For J:=0 to 31 do begin
r.Left := img_offset+i*10+1;
r.Top := img_offset+j*10+1;
r.Right := r.Left+9;
r.Bottom := r.Top+9;
if img_array[I,J] then
Canvas.Brush.Color := clPurple
else
Canvas.Brush.Color := clWhite;
Canvas.FillRect(r);
end;
Canvas.Pen.Color := clLtGray;
For I:=0 to 32 do begin
canvas.MoveTo(img_offset,img_offset+i*10);
canvas.LineTo(img_offset+32*10,img_offset+i*10);
canvas.MoveTo(img_offset+i*10,img_offset);
canvas.LineTo(img_offset+i*10,img_offset+32*10);
end;
Canvas.Brush.Color := Form1.Color;
canvas.TextOut(img_offset,img_offset-15, '0');
canvas.TextOut(img_offset-15,img_offset, '0');
For I:=1 to 4 do begin
canvas.TextOut(img_offset+10*I*8-10,img_offset-15, IntToStr(8*I-1));
canvas.TextOut(img_offset-15,img_offset+10*I*8-10, IntToStr(8*I-1));
end;
end;
Aufgerufen wird diese Funktion bei allen Aktionen, die den Datenbestand ändern, und beim Windows-Repaint-Signal (TForm1.FormPaint).
Zum Ändern der Pixel benutze ich folgende Funktion, die ich in die Ereignisse TForm1.FormMouseMove und TForm1.FormMouseUp eingefügt habe:
Wie Du siehst, wird hier auch das Neumalen wieder angestoßen. Ebenso wie das Neuberechnen der Liste.Code:procedure TForm1.PaintItem(X,Y :Integer; mLeft,mRight :Boolean);
VAR iX, iY :Integer;
changed :Boolean;
begin
iX := (X-img_offset) DIV 10;
iY := (Y-img_offset) DIV 10;
if (iX < 0) OR (iX > 31) OR (iY < 0) OR (iY > 31) THEN
exit;
StatusBar1.Panels[0].Text := '('+IntToStr(iX)+'|'+IntToStr(iY)+')';
changed := False;
IF mLeft THEN begin
if not(img_array[iX,iY]) then
changed := True;
img_array[iX,iY] := True;
end;
IF mRight THEN begin
if (img_array[iX,iY]) then
changed := True;
img_array[iX,iY] := False;
end;
if (changed) then
list_recalc;
img_rePaint;
end;
Für alle Interessierten ist jetzt der Source zum Download verfügbar.
Die Breite heißt dann "nach unten", also die Anzahl der Data-Zeilen?
@Andree-HB
Dein Projekt sieht ja schon recht fertig aus. Gratulation!
Durch was kommen denn die Wellen zustande?
Hast du geplant, auch eine Änderung der Anzeige zu implementieren, ohne dass du den Controller neu programmierst? Thewulf00's Programm hat ja noch ausreichend Potential.
@thewulf00
Ist ja eine wirklich genial einfache (einfach geniale) Möglichkeit. Meistens denkt man viel zu kompliziert.
Da wirst du wohl jetzt noch etwas mehr Dynamik in das Array bringen müssen ;-)
Die Wünsche der Anwender sind unerschöpflich ;o)
sast
genau, die Spaltenanzahl der Pixel beliebig verbreitern (Höhe/Zeilen bleibt immer gleich, da 4x8-Bit=32), und dann entsprechend die Datazeilen nach unten erweitern....
Bild hier
Ja, ich habe ne Weile drüber nachgedacht und einfach mal probiert. Es hat gut geklappt. Das Ganze auf Scrollbarkeit zu erweitern, ist jetzt die Herausforderung.Zitat:
Zitat von sast
JAAA, endlich mal ne Aufgabe... ;)Zitat:
Zitat von sast
Jetzt wirds langsam interessant...
Richtig - mal sehen, wie lange ich mithalten kann. Falls Du Delphi beherrscht, kannst Du mir auch gern Tipps geben.Zitat:
Zitat von sast
Durch das Zittern in den Händen...*g*Zitat:
Dein Projekt sieht ja schon recht fertig aus. Gratulation!
Durch was kommen denn die Wellen zustande?
...der Versuchsaufbau hat ja schliesslich auch eine Höhe von einem Meter (!)
Mal gucken, erstmal ist nur statischer Text/Grafik angesagt....vielleicht werde ich die Inhalte von SD-Card einlesen...aber soweit bin ich noch nicht....Zitat:
Hast du geplant, auch eine Änderung der Anzeige zu implementieren, ohne dass du den Controller neu programmierst?
Sehr coool....das Projekt kostet bisher lediglich ein bestücktes Snugboard und ca. weitere 7,- Euro an Teilen.
Ja, mit Freeware geht alles billiger und schneller... :D
Die Breite nehme ich mir jetzt mal vor. Das ist anstrengend. Mal sehen, ob mir was Einfaches einfällt.
...gar nicht mal so einfach, das Alles alleine mit Fernauslöser im dunklen Badezimmer zu koordinieren ! ;-)
Bild hier