Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Farbauswahl (https://www.delphipraxis.net/7809-farbauswahl.html)

Matze 21. Aug 2003 19:42


Farbauswahl
 
Hi!

Wie kann ich so eine Farbauswahl proggen, wie sie hier im Forum verwendet wird, um Texte zu schreiben.
Geht das überhaupt?

Gruß Matze

Pseudemys Nelsoni 21. Aug 2003 19:53

Re: Farbauswahl
 
hoi, ich würd sagen mit dem ColorDialog, oder meinst du genauso wie hie rim forum also ohne extra dialog? (dann weiss ichs leider nicht ^^)

Matze 21. Aug 2003 19:58

Re: Farbauswahl
 
Ich meinte ohne Dialog, so wie hier. :mrgreen:
Ich nehme sonst aber den Color-Dialog, der ist auch OK, aber anders wär's besser. :wink:

JoelH 21. Aug 2003 21:03

hmm,
 
gernerie dir eben eine Farbleiste und fang die onmousemoves ab

Matze 21. Aug 2003 21:24

Re: Farbauswahl
 
Danke!
Aber wie generiere ich die?
Wie mach ich den Farbverlauf?

Gruß Matze

JoelH 22. Aug 2003 05:34

hmm,
 
how about a paintbox zB.
und da malst du einfach bunte Striche drauf.

Matze 22. Aug 2003 09:27

Re: Farbauswahl
 
Das ist nicht das Problem. Das Problem ist, wie ich einen Farbverlauf hinbekomme, indem alle Farben enthalten sind.

Ich kann es nur so, dass ich eine Startfarbe angebe und eine Endfarbe, dann wird der Verlauf gezeichnet, aber alle Farben sind dort natürlich nicht drin. :(

ruß Matze

Illuminator-23-5 22. Aug 2003 09:31

Re: Farbauswahl
 
du könntest 3 verschachtelte for-schleifen nehmen, je eine für alle 3 RGB-werte!

Matze 22. Aug 2003 09:36

Re: Farbauswahl
 
Danke für den Tipp Illu! :D
Das werde ich mal probieren...

Matze 22. Aug 2003 10:08

Re: Farbauswahl
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi!

Nochmals danke!!!
Hat ganz schön lang gedauert, bis ich's hinbekommen hab (bin halt Anfänger :lol: )

Das ist ja ein Mega-Code! :mrgreen:

Gruß Matze

Naja, jetzt hab ich's ja. So sieht's aus:

Sharky 22. Aug 2003 10:09

Re: Farbauswahl
 
Zitat:

Zitat von Matze
....Naja, jetzt hab ich's ja. So sieht's aus:

Wie hast Du es denn nun gemacht?

overmoon 22. Aug 2003 10:09

Re: Farbauswahl
 
Einen Verlauf, in dem alle Farben enthalten sind, das wird recht schwierig;
ich würde fast sagen, das geht nicht.

Man muss sich nur folgendes Überlegen:
- Jede Farbe ist ein Tripel bestehend aus den drei Teilen rot, grün und blau
- Für rot, grün und blau gibt es jeweils 256 Möglichkeiten (0..255)

Das Ergibt: 256*256*256 = 16777216 verschiedene Farben !

Würde man jedem Pixel eine andere Farbe geben und ein Panel nehmen,
das 1024 Pixel breit ist, so müsste es 16777216 / 1024 = 16384 Pixel hoch sein.
Das wird wohl auch auf dem größten Monitor schwierig.

Also muss man die Anzahl der Farben verringern oder eine andere Darstellungsart finden.
Ich denke mal in die erste Richtung weiter.

Verringern wir z.B. auf 16 Abstufungen innerhalb von rot, grün und blau,
so haben wir nur noch: 16*16*16 = 4096 Farben.
Diw könnte man "Problemlos" auf einem Panel von 128*32 Pixel Größe darstellen.

Ich finde eine Aufteilung in 18 Schritte sinnvoll:

r,g,b € F = {0,15,30,45,60,75,90,105,120,135,150,165,180,195,2 10,225,240,255}
|F| = 5832 = 2^3 * 3^6

Diese könnte man z.B. in einem Bereich von 216*27 Pixeln alle darstellen,
was einen Bereich von einer Größe ist, der mir sinnvoll erscheint.

Nun müsste man sich jetzt überlegen,
wie man alle möglichen Tripel (r,g,b) mit r,g,b € F darstellt.

Dafür bietet sich die Möglichkeit über die drei For-Schleifen an, die Illuminator-23-5 vorgeschlagen hat. :hello:

overmoon

ps: ohh, zu spät....

Matze 22. Aug 2003 10:22

Re: Farbauswahl
 
Zitat:

Zitat von Sharky
Wie hast Du es denn nun gemacht?

Betriebsgeheimnis. :wink:

Das ist einfach eine lange procedure, mehr nicht. :wink:

Muss aber noch was ändern, da ich die PaintBox, auf der es ist, nicht kleiner machen kann, da sonst Farben fehlen.

Gruß Matze.

Illuminator-23-5 22. Aug 2003 10:35

Re: Farbauswahl
 
codevorschlag:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  step = 25;
  lines = 1;
var
  r, g, b, x: integer
begin
  PaintBox1.Width := (255 div step)*(255 div step)*(255 div step) mod lines;
  PaintBox1.Height := 5*(lines + 1);
  x := 0;
  for r := 0 to 255 div step do
    for g := 0 to 255 div step do
      for b := 0 to 255 div step do
        with PaintBox1 do begin
          inc(x);
          Canvas.Brush.Color := RGB(r*step, g*step, b*step);
          Canvas.Pen.Color := RGB(r*Step, g*step, b*step);
          Canvas.MoveTo(x mod lines, x div lines);
          Canvas.LineTo(x mod lines, x div lines + 5);
        end;
end;
müsste theoretisch funzen

Matze 22. Aug 2003 10:51

Re: Farbauswahl
 
Da passiert nichts. :mrgreen:

Height ist dann 10 und Width: 0.

Illuminator-23-5 22. Aug 2003 10:57

Re: Farbauswahl
 
denkfehler:
Delphi-Quellcode:
PaintBox1.Width := (255 div step)*(255 div step)*(255 div step) DIV
lines
PaintBox1.Height := 5*lines;
müsst jetzt funzen, kanns aber nicht probieren

Matze 22. Aug 2003 11:15

Re: Farbauswahl
 
Danke, aber dann ist
Height: 5
Width: 1000

Alexander 22. Aug 2003 16:33

Re: Farbauswahl
 
Da es sich ja um eine Farbauswahl handelt, kommt sicherlich gleich die Frage wie ich die Farbe unterm Mauscursor auslesen kannst :mrgreen:
Dazu solltest du dir GetRValue, GetGValue und GetBValue in der Hilfe anschauen ;-)

Matze 22. Aug 2003 16:43

Re: Farbauswahl
 
So blöd bin ich auch nicht. :wink:

Code:
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Panel1.Color:=PaintBox1.Canvas.Pixels[x,y];
end;
Gruß Matze

Alexander 22. Aug 2003 16:56

Re: Farbauswahl
 
Habe ich auch nciht gesagt, nur habe ich gerade jemand anders per ICQ gesagt wie er die einzelnen RGB-Werte rausbekommt, dann den Thread gesehen und dann gleich gepostet :mrgreen:
Sorry

Matze 22. Aug 2003 17:18

Re: Farbauswahl
 
War auch nicht so ernst gemeint. :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz