Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Panel - Farbe wechseln (https://www.delphipraxis.net/140892-panel-farbe-wechseln.html)

yasR 28. Sep 2009 13:18


Panel - Farbe wechseln
 
Hey,

mein Panel soll nach einem OnClick Ereignis für kurze Zeit (ca. 10 Millisekunden) eine andere Farbe bekommen.
Gibt es dafür eventuell schon fertige Routinen oder könnt ihr mir sagen wie man das löst?


Delphi-Quellcode:
procedure TForm5.Panel10Click(Sender: TObject);
begin



end;

Neutral General 28. Sep 2009 13:27

Re: Panel - Farbe wechseln
 
Weißt du wie du generell die Farbe änderst?

Du musst das Problem in kleinere unterteilen. Und wenn du bei nem Unterproblem nicht weißt, wie dus machen kannst, dann kannst du hier in der DP suchen und wenn du nichts gefunden hast darfst du fragen ;)

Also ich helfe dir mal:

Farbe wechseln
Warten
Farbe zurücksetzen

Das ist dein "Schlachtplan" wenn du die Farbe eines Panels ändern kannst dann hast du schon 2/3 geschafft ;)

yasR 28. Sep 2009 13:30

Re: Panel - Farbe wechseln
 
procedure TForm5.Panel10Click(Sender: TObject);
begin
Panel10.Color := RGB(195,195,195);
sleep(10);
Panel10.Color := clred;
end;

ist das denn elegant? ;-P

Neutral General 28. Sep 2009 13:31

Re: Panel - Farbe wechseln
 
Klappt doch^^

Elegant.. joo. Wüsste nicht wie mans wirklich anders machen sollte. Du kannstes natürlich noch in ne procedure verbauen. Aber ansonsten hätte ichs jetzt auch so gemacht.

yasR 28. Sep 2009 13:34

Re: Panel - Farbe wechseln
 
merke aber gerade das es nicht klappt -.-

Neutral General 28. Sep 2009 13:36

Re: Panel - Farbe wechseln
 
Doch es klappt. Kann nur sein, dass 10ms zu kurz sind.

Was klappt denn nicht?

EDIT: Ah du brauchst wahrscheinlich DelayDelay bzw ein Application.ProcessMessages nach dem ersten Farbwechsel.

Larsi 28. Sep 2009 13:38

Re: Panel - Farbe wechseln
 
Delphi-Referenz durchsuchendelay Es gibt in der Code Lib einen Beitrag dazu. Das ist eine Alternative zu Sleep mit dem Unterschied das das Programm nicht einfriert während der Zeit. Weiß nicht ob das bei so kurzen Zeit einen Unterschied macht.

yasR 28. Sep 2009 13:40

Re: Panel - Farbe wechseln
 
procedure TForm5.Panel11Click(Sender: TObject);
begin
Panel11.Color := clGreen; // RGB(195,195,195);
sleep(5000); // mal etwas mehr ;-)
Panel11.Color := clWhite;
end;


nach dieser Procedure klappt es aber nicht o.O. Es passiert nichts ;-(


EDIT: Okay, ich werde mal Delay testen ^^

Neutral General 28. Sep 2009 13:42

Re: Panel - Farbe wechseln
 
Ich hab ja gesagt du sollst es so machen:

Delphi-Quellcode:
procedure TForm5.Panel11Click(Sender: TObject);
begin
  Panel11.Color := RGB(195,195,195);
  Application.ProcessMessages;
  sleep(10); // mal etwas mehr
  Panel11.Color := clWhite;
end;
Das Programm kommt sonst nicht dazu das Fenster neu zu malen bevor sleep ausgeführt wird und man sieht nichts von der Farbänderung.

Edit: Delay ist quasi ein Sleep mit eingebautem Application.ProcessMessages ;)

himitsu 28. Sep 2009 13:44

Re: Panel - Farbe wechseln
 
Da du ja nun schon ein Bitmap als Hintergrund hast, zeichne dieses mit der anderen Hintergrundfarbe neu, starte einen Timer und zeichne es dann wieder mit der alten Farbe, aber bei 10ms könnte man den Timer weglassen und einfach nur ein Sleep verwenden.

Die Hintergrundfarbe kannst du eh ändern, wie du willst, bei deinen abgerundeten Panels würde man die eh nicht sehn (versteckt sich ja hinter dem Bitmap) und selbst bei einem normalen Panel übernimmt oftmals das (XP)-Design die Darstelltung, welches nicht grad die Angabe des zugehörigen Color-Attributes beachtet.

[edit]
das Zuweisen von Color lößt nicht sofort ein Neuzecihnen aus, das wirst du Manuell anstoßen müssen.

yasR 28. Sep 2009 13:52

Re: Panel - Farbe wechseln
 
Was bedeutet für dich manuell anstoßen? ^^

EDIT: Mit Delay funktioniert es, danke!

Neutral General 28. Sep 2009 13:55

Re: Panel - Farbe wechseln
 
Also soweit ich weiß löst es schon direkt ein neuzeichnen aus. Wobei direkt = Sofort nach dem eintreffen der Antwort-Message auf die Farbänderung?

Wobei man, jetzt wo dus sagst, auch einfach statt Application.ProcessMessages Panel10.Repaint benutzen kann :mrgreen:

yasR 28. Sep 2009 13:57

Re: Panel - Farbe wechseln
 
Ich muss diesen Effekt aber bei 15 weiteren Panels machen, muss ich diese Procdure bei allen anderen Panels übenehmen? :O

procedure TForm5.Panel11Click(Sender: TObject);
begin
Panel11.Color := RGB(195,195,195);
delay(280);
Panel11.Color := clWhite;
end;

DeddyH 28. Sep 2009 14:05

Re: Panel - Farbe wechseln
 
Delphi-Quellcode:
procedure TForm5.Panel11Click(Sender: TObject);
begin
  (Sender as TPanel).Color := RGB(195,195,195);
  delay(280);
  (Sender as TPanel).Color := clWhite;
end;
So kannst Du die Methode allen Panels im Objektinspektor zuweisen.

himitsu 28. Sep 2009 14:07

Re: Panel - Farbe wechseln
 
Handelt es sich dabei zufällig um die abgerundeten Panels?
(wenn ja, dann Antwort siehe oben ... ändern der Farbe des Panels ist sinnlos)

yasR 28. Sep 2009 14:08

Re: Panel - Farbe wechseln
 
Himitsu, nein ist etwas anderes ;-)

himitsu 28. Sep 2009 14:12

Re: Panel - Farbe wechseln
 
na dann ^^

Aber NUR ein Ändern von Panel.Color bringt nichts, da, wie gesagt dieses nicht sofort zeichnen läßt, sondern nur eine Nachricht ala "zeichne dich bei Gelegenheit neu" an das Panel sendet

Delay oder Application.ProcessMessages+Sleep dürften Zeit zum Neuzeichnen lassen.


Und sobald du das XP-Design für deine Anwendung aktivierst, wird für Panels immer die Hintergrundfarbe des Systems verwendet und .Color ignoriert.

yasR 28. Sep 2009 14:21

Re: Panel - Farbe wechseln
 
@DeddyH

procedure TForm5.Panel11Click(Sender: TObject);
begin
(Sender as TPanel).Color := RGB(195,195,195);
delay(260);
(Sender as TPanel).Color := clWhite;
end;


Diese Variante schein nicht zu funktionieren -.-

himitsu 28. Sep 2009 14:25

Re: Panel - Farbe wechseln
 
Welche Delphi-Version nutzt du, bzw hast du die Unit XPMan irgendwo in deinem Programm eingebunden oder TXPManifest auf irgendeiner Form der Anwendung rumliegen?

yasR 28. Sep 2009 14:27

Re: Panel - Farbe wechseln
 
Nutze Delphi 06 und habe auch kein XPMan in den Uses und auch kein XPManifest auf meinem Formular.

himitsu 28. Sep 2009 14:32

Re: Panel - Farbe wechseln
 
ja dann sollte es funktionieren :stupid:

Hawkeye219 28. Sep 2009 14:39

Re: Panel - Farbe wechseln
 
Hallo,

wenn du mit "06" die Version "Delphi 2006" meinst, dann setze einmal die Eigenschaft ParentBackground deines Panels auf den Wert False.

Gruß Hawkeye

yasR 28. Sep 2009 15:10

Re: Panel - Farbe wechseln
 
Es klappt auch mit ParentBackground = false nicht, es klappt nur bei Panel11 der Effekt aber nicht bei den restlichen -.-

Delphi-Quellcode:
procedure TForm5.Panel11Click(Sender: TObject);
begin
 (Sender as TPanel).Color := RGB(195,195,195);
 delay(260);
 (Sender as TPanel).Color := clWhite;
end;

himitsu 28. Sep 2009 15:12

Re: Panel - Farbe wechseln
 
hast du Panel11Click auch den OnClick-Ereignissen der anderen Panels zugewiesen?

yasR 28. Sep 2009 15:14

Re: Panel - Farbe wechseln
 
Ahhhhhh.... Es liegt daran das sie noch kein OnClick Event haben.. aber muss ich das jetzt so machen:

Delphi-Quellcode:
procedure TForm5.Panel11Click(Sender: TObject);
begin

end;



procedure TForm5.Panel12Click(Sender: TObject);
begin
//...
end;



procedure TForm5.Panel13Click(Sender: TObject);
begin
//...
end;


procedure TForm5.Panel14Click(Sender: TObject);
begin
 //...
end;

DeddyH 28. Sep 2009 15:31

Re: Panel - Farbe wechseln
 
Das kannst Du im OI machen, dann haben alle Panels dieselbe Behandlungsroutine, aber sie steht nur einmal im Quälkot.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 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-2025 by Thomas Breitkreuz