colorbox oder RGB Farbe benutzen[nicht gelöst]

Für Fragen von Einsteigern und Programmieranfängern...
Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

colorbox oder RGB Farbe benutzen[nicht gelöst]

Beitrag von Bauer321 »

Code: Alles auswählen

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, ColorBox, Spin, Buttons, ExtCtrls, LCLIntf; 
//[...]
procedure TForm1.Button2Click(Sender: TObject);
 var farbe, r, g, b, groesse : integer;
begin
  groesse := round(strtofloat(edit3.text));
  r := strtoint(Spinedit1.text);
  g := strtoint(Spinedit2.text);
  b := strtoint(Spinedit3.text);
  if (r = 0) and (g = 0) and (b = 0)   (* hier soll entschieden werden ob die Farbe der ColorBox oder eine RGB Farbe verwendet werden soll. Das ganze soll später über eine Variable aufrufbar sein. *)
     then farbe := colorbox1.selected
     else farbe := (RGB(r,g,b));
 
with Form2.PaintBox1.Canvas do begin
                   pen.color := farbe;  (* da bei farbe soll der die farbe von oben übernehmen. Allerdings kann er nur die Farbe der Colorbox nutzen die RGB farben gehen nicht *)
                   pen.width := groesse;
                   moveto(breite,0);
                   lineto((breite * 2),0)
     end; 
 
//[...]
Ich hoffe das reicht an informationen sonst muss ich das nochmal ergänzen.

Also mit dem klick auf den Button sollen ungefähr 200 Canvas zeichnungen vorgenommen werden und für die gilt immer die selbe farbe

Und mein problem ist halt so wies oben steht gehts nicht nicht. und meine Frage ist ob das so möglich ist oder ob man da andere wege gehen muss
Zuletzt geändert von Bauer321 am Do 4. Nov 2010, 13:00, insgesamt 1-mal geändert.
www.mcpatcher.net | www.hoeper.me

Benutzeravatar
theo
Beiträge: 10928
Registriert: Mo 11. Sep 2006, 19:01

Re: colorbox oder RGB Farbe benutzen

Beitrag von theo »

Was muss man sich unter "die RGB Farben gehen nicht" vorstellen?

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: colorbox oder RGB Farbe benutzen

Beitrag von MAC »

Hallo.
Ich weis irgendwie nicht wie du 200 Zeichnungen machen willst.
Im moment sollte es so aussehen:

Mit der Farbe sollte das klappen
die variable breite ist nicht definiert ( wird wol irgendwo vorher stehen)
Und du malst einen einzigen Strich.

moveto bedeutet, hol den stift hoch, setzt es auf pixelx = breite, pixely = 0; und setzt den stift wieder ab.
lineto bedeutet , ziehe eine Linie zur neuen position.

Probier mal folgendes :

Code: Alles auswählen

Brush.Style := bsSolid; // Art der Musterfüllung
Pen.Style := psSolid; // ist solid, könnte auch gestrichelt, ... sein
Brush.Color := clWhite; // Füllfarbe
Pen.Color := farbe;
Rectangle(0,0,Form2.PaintBox1.Width,Form2.PaintBox1.Height);
 
for i := 1 to 200 do
   begin
   moveto(breite,i*2);
   lineto((breite * 2),i*2)
end;

Die ersten 5 Zeilen malen ein Weises 4Eck mit Schwarzem Rand, so als Hintergrund.
Jetzt malt er 200 Striche übereinander... die höhe ist immer das i*2 ( damit abstand zwichen den Strichen ist.)

Ich weis nicht wie es mit einer Paintbox ist, aber bei einem Shape verschwindet das Bild wenn man das Programm mal minimiert und wieder aufruft.
Wenn das mit der Paintbox auch der Fall ist, versuch mal ein Image zu verfenden. Die Befehle sollten so ziemlich die gleichen sein.

Code: Alles auswählen

Uptade Verwende SpinEdit1.Value nicht .text... dann sollte es klappen
mfg Marcel

Code: Alles auswählen

Signatur := nil;

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: colorbox oder RGB Farbe benutzen

Beitrag von Bauer321 »

danke. ich weiß nicht woran es jetzt lag wahrscheinlich an dem das ich vorher nicht value benutzt habe aber aber so gehts:

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
 var farbe, r, g, b, groesse : integer;
begin
  Memo1.Clear;
  Form2.PaintBox1.Refresh;
  groesse := round(strtofloat(edit3.text));
  farbe := colorbox1.selected;
 
  r := Spinedit1.value;
  g := Spinedit2.value;
  b := Spinedit3.value;
 
if (r = 0) and (g = 0) and (b = 0)
  then farbe := colorbox1.selected
  else farbe := (RGB(r,g,b));
 
  Memo1.Lines.Add('with Paintbox1.Canvas do begin');
  Memo1.Lines.Add('pen.color := ' + inttostr(farbe) + ' ;');
  Memo1.Lines.Add('pen.with := ' + inttostr(groesse) + ' ;');
 
  if checkbox1.state = cbchecked
     then with Form2.PaintBox1.Canvas do begin
                   pen.color := farbe;
                   pen.width := groesse;
                   moveto(0,0);
                   lineto(breite,0);
                   Memo1.Lines.Add('moveto(0,0);');
                   Memo1.Lines.Add('lineto(' + inttostr(breite) + ',0);');
               end;

vielen dank und die anderen tipps werde ich auch mal alle ausprobieren.
theo hat geschrieben:Was muss man sich unter "die RGB Farben gehen nicht" vorstellen?
es wird immer schwarz genommen (hat sich jetzt ja aber geklärt)

edit:
Ich weis nicht wie es mit einer Paintbox ist, aber bei einem Shape verschwindet das Bild wenn man das Programm mal minimiert und wieder aufruft.
Wenn das mit der Paintbox auch der Fall ist,
ja ist es
versuch mal ein Image zu verfenden. Die Befehle sollten so ziemlich die gleichen sein.
könnte mir vll das hier nochmal wer erläutern?

edit2
Probier mal folgendes :

Code: Alles auswählen

Brush.Style := bsSolid; // Art der Musterfüllung
    Pen.Style := psSolid; // ist solid, könnte auch gestrichelt, ... sein
    Brush.Color := clWhite; // Füllfarbe
    Pen.Color := farbe;
    Rectangle(0,0,Form2.PaintBox1.Width,Form2.PaintBox1.Height);
 
    for i := 1 to 200 do
       begin
       moveto(breite,i*2);
       lineto((breite * 2),i*2)
end;
heist das wenn ich ca. 200 mal eine checkbox überprüfen möchte und wenn sie gecheckt ist etwas machen möchte das ich mir das so deutlich einfacher machen kann? und wenn ja wie könnte ich dann jedes mal die checkbox mit der nächsten nummer "nehmen"
www.mcpatcher.net | www.hoeper.me

Benutzeravatar
theo
Beiträge: 10928
Registriert: Mo 11. Sep 2006, 19:01

Re: colorbox oder RGB Farbe benutzen

Beitrag von theo »

Erkläre doch mal, was das werden soll. 200 Checkboxen klingt irgendwie "ungesund" ;-)

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: colorbox oder RGB Farbe benutzen

Beitrag von MAC »

@ theo: stimmt irgendwie.

Nicht ganz.
Er prüft also 1 mal welche farbe und dann zeichnet der 200 Linien.

Gesunder währe es zum beispiel ein 4tes SpinEdit zu nehmen und dann
for i := 1 to SpinEdit4.Value
zu verwenden
also wenn man 30 eingibt malt der 30 linien, bei 60 malt er 60. mit nen bisschen mathe kann man dann noch den abstand so berechnen das immer das ganze bild ausgefüllt wird...

Ein Image zu benutzen ist ganz einfach.
Du ziehst einfach von der Palette ein Image auf deine Form, (Aditional) und änders Paintbox1 zu Image1 in Quelltext. Dann löschst du die Paintbox.
normalerweise sollte es dann laufen. ( kann sein das Paintbox nen paar spezialfunktionen hat , aber wahrscheinlich benutzt du keine von denen ...)

Oder schreib einfach nochmal was du jetzt genau meinst...

Code: Alles auswählen

Signatur := nil;

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: colorbox oder RGB Farbe benutzen

Beitrag von Bauer321 »

MAC hat geschrieben:Ein Image zu benutzen ist ganz einfach.
Du ziehst einfach von der Palette ein Image auf deine Form, (Aditional) und änders Paintbox1 zu Image1 in Quelltext. Dann löschst du die Paintbox.
normalerweise sollte es dann laufen. ( kann sein das Paintbox nen paar spezialfunktionen hat , aber wahrscheinlich benutzt du keine von denen ...)
Stimmt nur muss man aus welchem grund auch immer ein Bild in das TImage eibauen da es sonst schwarz ist. das habe ich gemacht einfach ein ein mal 1 pixel großes weißes bild und jetzt gehts.
damits einfacher ist habe ich es einfach in PaintBox1 umbenannt(eure meinung ist da uninteressant :D)
aso und wie ich gerade festgestellt habe, das gezeichnete geht trotzdem weg
MAC hat geschrieben:Oder schreib einfach nochmal was du jetzt genau meinst...
Also da ich wie man wahrscheinlich merkt noch kaum ahnung habe, was ganz einfach damit zu begründen ist das wir das in der schule machen und dort nix lernen xD(langweilig)
ja und ich hatte mir halt überlegt mal so ganz simpel so ne canvas figur zu erstellen und da habe ich mir übelegt ich programmier das vor und man kann auswählen was man zeichenn will.
so siehts aus:
Bild
(ich weiß es gibt bestimmt bessere lösungen aber naja ich weiß nicht ob ich die sch hinbekomme
www.mcpatcher.net | www.hoeper.me

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: colorbox oder RGB Farbe benutzen[nicht gelöst]

Beitrag von Bauer321 »

bitte helt mir xD

am wichtigsten wäre für mich erstma zu wissen on man irgendwas für alle elemente iener art machen kann.
also das man z.B. bei Checkbox mit der ersten Check box anfängt und der dann die nummer der checkbox automatisch hochzählt.

meine idee war:

Code: Alles auswählen

for x := 1 to 220 do
begin
Checkbox(x).State := cbunchecked;
end;
www.mcpatcher.net | www.hoeper.me

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: colorbox oder RGB Farbe benutzen[nicht gelöst]

Beitrag von Teekeks »

Code: Alles auswählen

for i:=1 to 220 do
  TCheckBox(Form1.ControlByName('CheckBox'+inttostr(i))).checked:=false;

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: colorbox oder RGB Farbe benutzen[nicht gelöst]

Beitrag von Bauer321 »

danke aber scheint nicht zu gehen-.- da kommt dann so ne fehlermeldung...
ich werde aber morgen nochmal weiterprobirenen un analysieren woran es liegt
www.mcpatcher.net | www.hoeper.me

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: colorbox oder RGB Farbe benutzen[nicht gelöst]

Beitrag von MAC »

So , schritt für schritt:

1. Da gehts dir wie mir, ich hab auch total langweiligen Info.unterricht, 1/4 Jahr "Niki" , das ist so ein Roboter womit 3 Jährige das lernen, aber wir haben darüfer ne Arbeit geschriben. Und der Roboter kann sich nicht mal nach rechts drehen, geschweigedenn Variablen zu benutzen...

2.Ja die Fehlermeldung ist normal der Code von Teekeks sagt folgenden

für 1 bis 220 tue:
Gehe auf Form1
Schau ob es da ein Objekt gibt mit den namen Checkbox1 (Checkbox2 , Checkbox3...)
Dann nimm an dieses objekt ist eine TCheckbox, weil nur dann der wert Checked abgefragt wird.
Bei dir gibts aber wahrscheinlich keine 220 Checkboxen. Und selbst wenn wäre das wie schon erwähnt ungesund.
Also gibt es 2 Möglichkeiten,

1. Aus interesse

Code: Alles auswählen

var
   VObject:TObject; // TObject algemeine Klasse OOP // hab leider selbst keine Ahnung von OOP :(
begin
for i := 0 to 200 do
  begin
  VObject := Form1.ControlByName('CheckBox'+inttostr(i));
  // jetzt , wird geprüft ob überhaupt was gefunden wurde
  if VObject = nil then break; // nil = nichts
  // denn wenn ich versuche bei nichts etwas zu ändern (checked) dann error
  // jetzt noch eine 2te Sicherheitsprüfung, wenn ich was gefunden hab, woher will ich sein das das kein Button ist der einfach Checkbox1 heißt ??? 
  if not(VObject is TCheckbox) then exit;
  TCheckbox(VObject).checked := false;
  end;
end;
2. Was ich dir empfehle:
in Additional : TChecklistbox.
Ist sowas wie ne Listbox nur halt mit Häckchen. integriert.
Kannst ja al nen bisl mir rumspielen.

3. Einfaches umbenennen ist toll, mach ich auch, aber nicht ziemlich übersichtlich, also kommt trotzdem meine Meinung:
Strg+f PaintBox ersetzen mit Image1 alle Ersetzen alle Bestätigen, 4 Sekunden arbeit viel Ordentlicher

4. Das mit dem Schwarzen bild ist normal. Schwarz ist = 0 und 0 ist standartfarbe.
Versuch mal sowas

Code: Alles auswählen

Image1.Canvas.Pen.Color:= clwhite;  // rand
Image1.Canvas.Brush.Color:= clwhite;  //mitte
Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
Das malt einfach ein weißes Rechteck, ist schöner statt nen 1x1 Pixel bild, und wichtig wenn du das alte bild überschreiben willst.

Code: Alles auswählen

Signatur := nil;

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: colorbox oder RGB Farbe benutzen[nicht gelöst]

Beitrag von Bauer321 »

Code: Alles auswählen

procedure TForm1.Button4Click(Sender: TObject);
 var i : integer;
     VObject:TObject; // TObject algemeine Klasse OOP // hab leider selbst keine Ahnung von OOP :(
begin
  Memo1.Clear; // generierten Code löschen
  Form2.PaintBox1.Refresh;  //Bisher gezeichnetes löschen
 
for i := 0 to 220 do
  begin
  VObject := Form1.ControlByName('CheckBox'+inttostr(i)); // jetzt , wird geprüft ob überhaupt was gefunden wurde
 
  if VObject = nil then break; // nil = nichts
  // denn wenn ich versuche bei nichts etwas zu ändern (checked) dann error
  // jetzt noch eine 2te Sicherheitsprüfung, wenn ich was gefunden hab, woher will ich sein das das kein Button ist der einfach Checkbox1 heißt ???
  if not(VObject is TCheckbox) then exit;
  TCheckbox(VObject).checked := false;
end;
end;
das geht nicht. kommt kein fehler aber es passiert einfach nix
und ja ich habe 220 Checkboxen -.- edit: hier ist auch nen sreen: http://www.lazarusforum.de/viewtopic.php?p=42015#p42015
und ich möchte die alle mit möglichst wenig code auf unchecked/checked bekommen
www.mcpatcher.net | www.hoeper.me

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: colorbox oder RGB Farbe benutzen[nicht gelöst]

Beitrag von Teekeks »

Gut, scheinbar liegen die CheckBoxen nicht direkt auf der Form, ersetze also das "Form1" durch den Namen der Komponente, auf der die auch draufliegen.

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: colorbox oder RGB Farbe benutzen[nicht gelöst]

Beitrag von Bauer321 »

Teekeks hat geschrieben:Gut, scheinbar liegen die CheckBoxen nicht direkt auf der Form, ersetze also das "Form1" durch den Namen der Komponente, auf der die auch draufliegen.
das ist es wär ich nie drauf gekommen^^

Code: Alles auswählen

//so gehts jetzt
  for i:=1 to 220 do begin
  TCheckBox(Page1.ControlByName('CheckBox'+inttostr(i))).checked:=false;
  end;
MAC hat geschrieben:2. Was ich dir empfehle:
in Additional : TChecklistbox.
Ist sowas wie ne Listbox nur halt mit Häckchen. integriert.
Kannst ja al nen bisl mir rumspielen.
Werd ich mir dann ma angucken ist aber wie dieses vorhaben nicht geignet

MAC hat geschrieben:3. Einfaches umbenennen ist toll, mach ich auch, aber nicht ziemlich übersichtlich, also kommt trotzdem meine Meinung:
Strg+f PaintBox ersetzen mit Image1 alle Ersetzen alle Bestätigen, 4 Sekunden arbeit viel Ordentlicher

4. Das mit dem Schwarzen bild ist normal. Schwarz ist = 0 und 0 ist standartfarbe.
Versuch mal sowas

Code: Alles auswählen

Image1.Canvas.Pen.Color:= clwhite;  // rand
Image1.Canvas.Brush.Color:= clwhite;  //mitte
Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
Das malt einfach ein weißes Rechteck, ist schöner statt nen 1x1 Pixel bild, und wichtig wenn du das alte bild überschreiben willst.
echt geil das geht super nice tipp thx
aber wofür ist " Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);" hab ich eingetragen aber ich würde gerne wissen was es macht
und dann wäre evtl auch ganz gut zu wissen ob es ne möglichkeit gibt das erstellte zu speichern(sofern das so einfach möglich ist sonst nicht)

und die von mac vorgstellte methode oben zum button auf unckecked setzten würde ich gerne uach noch verstehen ;) (kann nicht schaden xD)

edit: wenn man die grafik einmal via canvas erstellt und danach die größe ändert, wird der weiße bereich leider nicht größer
www.mcpatcher.net | www.hoeper.me

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: colorbox oder RGB Farbe benutzen[nicht gelöst]

Beitrag von Teekeks »

Code: Alles auswählen

Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
Das Zeichnet ein Rechteck von (0,0) (oben links) nach (Image1.Width,Image1.Height) (unten rechts).
Bei dem davor wird nur die Farbe, die bei diesem Zeichnen genutzt werden soll, gesetzt.

Antworten