![]() |
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? |
Re: 2 Farben auf einer Form mit weichen Übergängen
ja
|
Re: 2 Farben auf einer Form mit weichen Übergängen
Suche im Forum nach "Gradient" oder schaue dir das mal an
![]() |
Re: 2 Farben auf einer Form mit weichen Übergängen
Ok, hab was gefunden. Dankeschön :D
@ sirius: bist du Microsoft-Mitarbeiter? Zitat:
|
Re: 2 Farben auf einer Form mit weichen Übergängen
Zitat:
Fazit: lerne Fragen ordentlich zu stellen, dann bekommst Du auch ordentliche Antworten. Das konnte ich mir jetzt nicht verkneifen... :stupid: |
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 |
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: |
Re: 2 Farben auf einer Form mit weichen Übergängen
OT:
Zitat:
gruß reli |
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:
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.
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; Kann man das irgendwie ändern so dass alles richtig gefärbt wird? |
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 |
Re: 2 Farben auf einer Form mit weichen Übergängen
Ich werd ma gucken ob das funktioniert :)
|
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? |
Re: 2 Farben auf einer Form mit weichen Übergängen
Zitat:
|
Re: 2 Farben auf einer Form mit weichen Übergängen
Danke, ich werds mal damit probieren :thumb:
|
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? |
Re: 2 Farben auf einer Form mit weichen Übergängen
Zitat:
|
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.
|
Re: 2 Farben auf einer Form mit weichen Übergängen
Zitat:
|
Re: 2 Farben auf einer Form mit weichen Übergängen
Hm, das versteh ich leider immer noch nicht. Meinst du sowas wie
Delphi-Quellcode:
BTW: Was bewirkt Invalidate?
Button1.Repaint;
|
Re: 2 Farben auf einer Form mit weichen Übergängen
Zitat:
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 ... |
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) |
Re: 2 Farben auf einer Form mit weichen Übergängen
Ich nutze diesen Code
Delphi-Quellcode:
Das hilft aber leider nicht, der Hintergrund der einzelnen Controls wird immer noch nicht geändert. Auch .Repaint hilft da nicht.
for i := 0 to ControlCount - 1 do frmMain.Controls[i].Invalidate;
|
Re: 2 Farben auf einer Form mit weichen Übergängen
Du hast recht :gruebel: ...
Delphi-Quellcode:
Das sollte zumindest klappen. Ruf es aber nicht im OnPaint auf, sondern da, wo du auch den Hintergrund änderst.
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; 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?) |
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! |
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: |
Re: 2 Farben auf einer Form mit weichen Übergängen
Zitat:
|
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: |
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... |
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. |
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; |
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 ^^) |
Re: 2 Farben auf einer Form mit weichen Übergängen
?
ICh ahbs das ganze doch schon vorher eingebaut, d.h. unter
Delphi-Quellcode:
Ist da was falsch dran?
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; |
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 22:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz