Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi 2 Farben auf einer Form mit weichen Übergängen (https://www.delphipraxis.net/102286-2-farben-auf-einer-form-mit-weichen-uebergaengen.html)

Aurelius 26. Okt 2007 08:48


2 Farben auf einer Form mit weichen Übergängen
 
Hallo DP'ler :hi:

Kann man irgendiwe erreichen dass es in einem Formular 2 Farben mit weichen Übergängen gibt? Also dass z.b. die linke Seite Dunkel ist und sich die Farbe, je weiter man nach rechts kommt, ins helle wandelt?

sirius 26. Okt 2007 09:01

Re: 2 Farben auf einer Form mit weichen Übergängen
 
ja

Brainshock 26. Okt 2007 09:02

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Suche im Forum nach "Gradient" oder schaue dir das mal an Form gradient fill.

Aurelius 26. Okt 2007 09:15

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Ok, hab was gefunden. Dankeschön :D

@ sirius: bist du Microsoft-Mitarbeiter?

Zitat:

Ein kleines amerikanisches Flugzeug hat sich im dichten Nebel verflogen.Der Pilot kreist um das oberste Stockwerk eines Bürohauses, lehnt sich aus dem Cockpit und brüllt durch ein offenes Fenster:"Wo sind wir?"
Ein Mann blickt von seinem PC auf: "In einem Flugzeug!"Der Pilot dreht eine scharfe Kurve und landet fünf Minuten später mit dem letzten Tropfen Treibstoff auf dem Flughafen von Seattle.Die verblüfften Passagiere wollen wissen, wie der Pilot es geschafft habe, sich zu orientieren."Ganz einfach", sagt der Pilot.
"Die Antwort auf meine Frage war kurz, korrekt und völlig nutzlos. Ich hatte also mit der Microsoft-Hotline gesprochen. Das Microsoft-Gebäude liegt 5 Meilen westlich vom Flughafen Seattle, Kurs 87 Grad."
Den konnt ich mir jetzt nicht verkneifen...:D

Dunkel 26. Okt 2007 09:32

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Zitat:

Zitat von xX0815Xx
@ sirius: bist du Microsoft-Mitarbeiter?

{ ... }

Den konnt ich mir jetzt nicht verkneifen...:D

Moment! Du hast gefragt ob es geht, nicht wie es geht. Auf Deine Frage war die Antwort von sirius völlig ausreichend.
Fazit: lerne Fragen ordentlich zu stellen, dann bekommst Du auch ordentliche Antworten.

Das konnte ich mir jetzt nicht verkneifen... :stupid:

Aurelius 26. Okt 2007 09:37

Re: 2 Farben auf einer Form mit weichen Übergängen
 
In dem Zusammenhang hast du wohl recht, aber ich kann mit der Antwort nicht viel anfangen. War ja uch nur als kleiner Witz gedacht :stupid:

Egal, lassen wir das

sirius 26. Okt 2007 14:18

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Fragen zu stellen ist auch nicht einfach.
Und mir fielen spontan einige Lösungsmöglichkeiten zu deiner Frage ein. Nur ich kenne den Zusammenhang in deinem Programm nicht, um dir dafür eine favorisierte Variante vorzustellen. Und alle aufzuschreiben und zu erklären,w ar mir zu viel :nerd:

Relicted 26. Okt 2007 14:36

Re: 2 Farben auf einer Form mit weichen Übergängen
 
OT:
Zitat:

Zitat von Dunkel
Moment! Du hast gefragt ob es geht, nicht wie es geht. Auf Deine Frage war die Antwort von sirius völlig ausreichend.
Fazit: lerne Fragen ordentlich zu stellen, dann bekommst Du auch ordentliche Antworten.

Das konnte ich mir jetzt nicht verkneifen... :stupid:

und auf "wiefragen" ist die beste antwort "gut!"

gruß
reli

Aurelius 28. Okt 2007 20:07

Re: 2 Farben auf einer Form mit weichen Übergängen
 
So, ich hab nochmal eine Frage zum Thema. Ich würde gerne per Befehl zur LAufzeit diesen Übergang schaffen.

Delphi-Quellcode:
procedure TfrmMain.FormPaint(Sender: TObject);
begin
 DrawGradientH(Canvas, clGreen, clTeal, Rect(0, 0, Width, Height));
end;

procedure TfrmMain.chkbHorizontalClick(Sender: TObject); //horizontaler Übergang
begin
  if chkbHorizontal.Checked then
  begin
    chkbVertikal.Checked := FALSE;
    DrawGradientH(Canvas, clbColor1.Selected, clbColor2.Selected, Rect(0, 0, Width, Height));
  end;
end;

procedure TfrmMain.chkbVertikalClick(Sender: TObject); //vertikaler Übergang
begin
  if chkbVertikal.Checked then
  begin
    chkbHorizontal.Checked := FALSE;
    DrawGradientV(Canvas, clbColor1.Selected, clbColor2.Selected, Rect(0, 0, Width, Height))
  end;
end;
Ich nutze ein XPManifest, dh. die ganzen Felder wie eine Combobox werden auch nach diesem Design gefärbt. Wenn ich das Ganze jetzt aber zur Laufzeit per Checkboxen ändere wird die Form richtig gefärbt, aber alle anderen Felder wie die Combobox bleiben in der ursprünglichen Farbe.

Kann man das irgendwie ändern so dass alles richtig gefärbt wird?

lbccaleb 28. Okt 2007 20:28

Re: 2 Farben auf einer Form mit weichen Übergängen
 
bei einigen komponenten kannst du ja transparenz einschalten, das sollte für dich reichen nur wenn ich das jetzt gerade richtig in erinnerung habe, kannst du das natürlich ausgerechnet bei checkboxen nicht, in dem fall würde mir im mom nichts anderes einfallen als nach einer entsprechenden komponente zu suchen, die transparenz unterstützt!!! ich glaube die checkbox auder der jedi vcl kann das...

mfg

Aurelius 28. Okt 2007 21:21

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Ich werd ma gucken ob das funktioniert :)

Aurelius 28. Okt 2007 21:42

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Die COmboBoxen kennen keine Transparenz...

Ich hab nochmal 2 Screens gemacht die mein Problem veranschaulichen.

Noch eine Frage: mit dem befehl im "OnPaint" der Form funktioniert das ja einwandfrei. Gibt es eine Möglichkeit dieses "OnPaint" nochmals aufzurufen, z.B. per Checkbox oder so?

mkinzler 28. Okt 2007 22:20

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Zitat:

Noch eine Frage: mit dem befehl im "OnPaint" der Form funktioniert das ja einwandfrei. Gibt es eine Möglichkeit dieses "OnPaint" nochmals aufzurufen, z.B. per Checkbox oder so?
Ja indem du .Repaint() aufrufst.

Aurelius 29. Okt 2007 07:06

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Danke, ich werds mal damit probieren :thumb:

Aurelius 1. Nov 2007 07:38

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Ui, wieder eine Frage:

Funktioniert alles soweit wie ichs haben will :D

Nur hab ich jetzt ein Problem: ändere ich die Formularfarbe bleibt der Hintergrund aller Trackbars bei der ursprünglichen Farbgebung. Erst wenn man drauf klick verändert sich die Farbe.

Kann man das irgendwie lösen?

Deep-Sea 1. Nov 2007 07:42

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Zitat:

Zitat von xX0815Xx
Nur hab ich jetzt ein Problem: ändere ich die Formularfarbe bleibt der Hintergrund aller Trackbars bei der ursprünglichen Farbgebung. Erst wenn man drauf klick verändert sich die Farbe.

Kann man das irgendwie lösen?

Invalidate oder Repaint aufrufen ?!

Aurelius 1. Nov 2007 08:02

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Ich ändere die Form-Farbe zur Laufzeit, indem ich Form.Repaint aufrufe. Das klappt wunderbar. Nur eben beim Hintergrund der Trackbars (und auch der Checkboxen und Buttons, fällt mir grad ein) nicht. Die haben noch die Ursprüngliche Farbe. Wenn diese jetzt aber Anklicke (oder auch nur mit der Maus drüberfahre) wird die korrekte Farbe angezeigt.

Deep-Sea 1. Nov 2007 08:04

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Zitat:

Zitat von xX0815Xx
Ich ändere die Form-Farbe zur Laufzeit, indem ich Form.Repaint aufrufe. Das klappt wunderbar. Nur eben beim Hintergrund der Trackbars (und auch der Checkboxen und Buttons, fällt mir grad ein) nicht. Die haben noch die Ursprüngliche Farbe. Wenn diese jetzt aber Anklicke (oder auch nur mit der Maus drüberfahre) wird die korrekte Farbe angezeigt.

Ich meinte ya auch Invalidate oder Repaint aufrufen bei den Buttons, etc ...

Aurelius 1. Nov 2007 08:13

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Hm, das versteh ich leider immer noch nicht. Meinst du sowas wie
Delphi-Quellcode:
Button1.Repaint;
BTW: Was bewirkt Invalidate?

Deep-Sea 1. Nov 2007 08:18

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Zitat:

Zitat von xX0815Xx
Hm, das versteh ich leider immer noch nicht. Meinst du sowas wie
Delphi-Quellcode:
Button1.Repaint;
BTW: Was bewirkt Invalidate?

So ungefähr, ya.

Man drücke F1: "TControl.Invalidate Methode - Aktualisiert das Steuerelement auf dem Bildschirm."
Desweiteren zu Repaint: "Andernfalls ruft Repaint zunächst Invalidate und danach Update auf" - dh. das Repaint das Neuzeichnen sofort erzwingt, Invalidate nicht.

Für diesen Fall wäre Invalidate besser. Allerdings würde ich nicht so fix arbeiten wie "Button1.Repaint" sondern die TWinControl (und somit auch TForm) Eigenschaft "Controls" nutzen ...

Aurelius 1. Nov 2007 08:25

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Danke sehr :D

Delphi hab ich hier auf Arbeit nicht ;) (hab grad Pause und wenig zu tun :D)

Aurelius 1. Nov 2007 18:54

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Ich nutze diesen Code
Delphi-Quellcode:
for i := 0 to ControlCount - 1 do frmMain.Controls[i].Invalidate;
Das hilft aber leider nicht, der Hintergrund der einzelnen Controls wird immer noch nicht geändert. Auch .Repaint hilft da nicht.

Deep-Sea 2. Nov 2007 08:40

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Du hast recht :gruebel: ...

Delphi-Quellcode:
procedure TMeineForm.MyRepaint;
var
  I: Integer;
begin
  DisableAlign;
  For I := 0 to ControlCount - 1 do With Controls[0] do
  begin
    Parent := nil;
    Parent := Self;
  end;
  EnableAlign;
end;
Das sollte zumindest klappen. Ruf es aber nicht im OnPaint auf, sondern da, wo du auch den Hintergrund änderst.
PS: Das "Controls[0]" ist kein Fehler, es muss so sein :wink:


(Und wer schlägt mich jetzt, weil die Lösung so doof ist?)

Aurelius 2. Nov 2007 08:48

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Sehr schön :thumb:

Vielen Dank für deine Hilfe, hast mir bis jetzt sehr geholfen. Nachher gleich testen!

Aurelius 4. Nov 2007 14:59

Re: 2 Farben auf einer Form mit weichen Übergängen
 
So, ich habs ausprobiert, funktioniert leider nicht :(

Trotzdem ein großes Danke für deine Hilfe :thumb:

Deep-Sea 5. Nov 2007 08:37

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Zitat:

Zitat von xX0815Xx
So, ich habs ausprobiert, funktioniert leider nicht :(

Echt nicht? Ich hab's probiert, bei mir ging's :shock: :? ...

Aurelius 5. Nov 2007 08:42

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Bei mir eben nicht :D Kann aber auch sein dass ich mich vertan hab. Ich kanns ja nochmal testen.

P.S.: Kannst du mir erklären wieso im Code Controls[0] verwendet wird? Das versteh ich nämlich nicht. :gruebel:

Deep-Sea 5. Nov 2007 08:47

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Ganz einfach ^^
Wenn du den Parent eines Controls auf nil setzt und anschließend wieder zuweist, wird das Control aus der Controls-Liste des Parents entfernt und beim zuweisen am Ende der Controls-Liste des Parents wieder gehängt. Das zweite Control rutscht beim entfernen an die erste Stelle - sprich Index 0. Nachdem der Parent auch hier neu gesetzt wurde, rückt das nächste Control nach, usw...

Aurelius 5. Nov 2007 08:59

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Ach so, ist ja logisch. Danke für die Erklärung!

Ich werds heut abend nochmal testen und meld mich dann.

Aurelius 6. Nov 2007 07:45

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Wenn ich das Ganze so mache funktioniert es leider nicht...:(

Delphi-Quellcode:
procedure TfrmMain.chkbHorizontalClick(Sender: TObject);
begin
  if chkbHorizontal.Checked then
  begin
    chkbVertikal.Checked := FALSE;
    frmMain.Repaint;
    MyRepaint;
  end;
end;

procedure TfrmMain.chkbVertikalClick(Sender: TObject);
begin
  if chkbVertikal.Checked then
  begin
    chkbHorizontal.Checked := FALSE;
    frmMain.Repaint;
    MyRepaint;
  end;
end;

Deep-Sea 6. Nov 2007 07:50

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Tja ... was soll ich dazu sagen ... kurz um: Doof! ...
(Ich nehme natürlich an, dass "MyRepaint" eine Methode von TfrmMain ist ^^)

Aurelius 6. Nov 2007 09:57

Re: 2 Farben auf einer Form mit weichen Übergängen
 
?

ICh ahbs das ganze doch schon vorher eingebaut, d.h. unter
Delphi-Quellcode:
private
procedure MyRepaint;

...

procedure TfrmMain.MyRepaint;
var
  I: Integer;
begin
  DisableAlign;
  For I := 0 to ControlCount - 1 do With Controls[0] do
  begin
    Parent := nil;
    Parent := Self;
  end;
  EnableAlign;
end;
Ist da was falsch dran?

Deep-Sea 6. Nov 2007 10:04

Re: 2 Farben auf einer Form mit weichen Übergängen
 
Nein nein, soweit richtig (vlt. sollte man, wenn man DisableAlign drinnen lässt, noch Try-finally nutzen ^^) ...
Warum es bei dir nicht geht ... ka :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 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