AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

label farbe verändern

Ein Thema von TylerDurden · begonnen am 11. Okt 2006 · letzter Beitrag vom 8. Jan 2007
Antwort Antwort
TylerDurden

Registriert seit: 11. Okt 2006
Ort: Bretten
22 Beiträge
 
#1

label farbe verändern

  Alt 11. Okt 2006, 16:39
Hallo,

bin ganz neu hier und hoffe das ich alles so richtig mache!

Kann mir evtl. jemand helfen folgenden Quellcode zu vereinfachen bzw. zu verkürzen???
Delphi-Quellcode:
procedure TForm1.Label11Klick(Sender: TObject);
begin
  LabelKlick(Sender);
  if Label11.Color = clWindow then Label11.Color:= clRed else Label11.Color:= clWindow;
  if Label10.Color = clWindow then Label10.Color:= clRed else Label10.Color:= clWindow;
  if Label12.Color = clWindow then Label12.Color:= clRed else Label12.Color:= clWindow;
  if Label7.Color = clWindow then Label7.Color:= clRed else Label7.Color:= clWindow;
  if Label15.Color = clWindow then Label15.Color:= clRed else Label15.Color:= clWindow;
  WinGame;
end;

procedure TForm1.Label12Klick(Sender: TObject);
begin
  LabelKlick(Sender);
  if Label12.Color = clWindow then Label12.Color:= clRed else Label12.Color:= clWindow;
  if Label11.Color = clWindow then Label11.Color:= clRed else Label11.Color:= clWindow;
  if Label8.Color = clWindow then Label8.Color:= clRed else Label8.Color:= clWindow;
  if Label16.Color = clWindow then Label16.Color:= clRed else Label16.Color:= clWindow;
  WinGame;
end;
geht so weiter bis Label16 soll aber wenn möglich noch weiter gehen!

Schon mal vielen Dank im voraus!

P.S.: Hab es übrigens schon mit einem Array of TLabel probiert komm aber nicht wirklich weiter

[edit=sakura] [delphi]-Tags Mfg, sakura[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#2

Re: label farbe verändern

  Alt 11. Okt 2006, 16:43
Mit FindComponent() alle Komponenten auf deinem Formular durchgehen.

Beispiele gibts's zu Hauf hier per Suchfunktion.
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3

Re: label farbe verändern

  Alt 11. Okt 2006, 16:47
Zitat von TylerDurden:
bin ganz neu hier und hoffe das ich alles so richtig mache!
Fast, aber wir helfen gerne. Ich habe für Dich mal die [delphi]-Tags eingefügt, um Deinen Code zu formatieren

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
TylerDurden

Registriert seit: 11. Okt 2006
Ort: Bretten
22 Beiträge
 
#4

Re: label farbe verändern

  Alt 12. Okt 2006, 07:59
Erstmal vielen Dank für die Unterstützung!

Werde das mal so versuchen!
Aber noch ne Frage: funktioniert das mit Arrays nicht???
Wenn doch wie ???

Über weitere Hilfe wäre ich dankbar!
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#5

Re: label farbe verändern

  Alt 12. Okt 2006, 08:18
Delphi-Quellcode:

var
  MyArray: Array[1..16] {oder wieviele du brauchst} of TLabel;

// ins Form1.Create
for i := 1 to 16 do
  begin
    MyArray[i] := Tlabel.Create(Form1);
    MyArray[i].show;
    //Diverse Einstellungen Wie Farbe Größe etc...
    
  end;

// ins Form1.close

for i := 1 to 16 do
  MyArray[i].free;
Richard Mahr
  Mit Zitat antworten Zitat
TylerDurden

Registriert seit: 11. Okt 2006
Ort: Bretten
22 Beiträge
 
#6

Re: label farbe verändern

  Alt 12. Okt 2006, 11:41
Weiß nicht evtl. ne dumme Frage aber ich kapiers nicht!!!

erstellt es mir die Labels so automatisch (16 Stück) oder muss ich die Labels selbst noch einfügen???

Wenn es mir die Labels automatisch erstellt, welche Eigenschaften muss ich denn mindestens angeben ???

Außerdem soll die Farbe nur bei einem Klick aufs Label verändert werden und zusätzlich die Farbe der Labels drüber drunter und daneben (wie ein Kreuz sozusagen)
Angehängte Dateien
Dateityp: pas piko_115.pas (10,9 KB, 5x aufgerufen)
Dateityp: exe project_197.exe (401,0 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#7

Re: label farbe verändern

  Alt 8. Jan 2007, 10:35
Also in diesem Fall würde ich folgendermaßen vorgehen:

Als erstes solltest du einen 2-Dimensionalen Array Typ verwenden

Delphi-Quellcode:
type
  TMy2DArray = Array[0..3,0..3] of boolean;
  // Der Inhalt des Feldes ist entweder Rot oder nicht rot, also sollte Boolean genügen
{ ... }

var // und noch eine Variable, die das Feld darstellt
  My2DArray: TMy2DArray;
Als nächstes brauchst du eine Zeichenfläche, die dein Feld darstellt, es ist in diesem fall zwar
möglich, 16 Labels zu nehmen, aber es ist viel schöner, wenn wir das alles auf ein Canvas Objekt zeichnen.
Ein TImage sollte hier genügen. und was Machst du, wenn du nicht 16, sondern 160 Labels hast...

Jetzt sollten wir uns überlegen, wie wir das Ganze zeichnen. Da wir ein zweidimensionales Array haben,
können wir bequem mit zwei For-Schleifen arbeiten.
Delphi-Quellcode:
procedure Zeichne(Arr: TMy2DArray; img: TImage);
var x,
    y, // Das sind die beiden Variablen für die Schleifen
    breite,
    hoehe: integer;
    Buffer: TBitmap; // Zunächst auf den Buffer zeichnen;
begin
  Buffer := TBitmap.Create; // Den Konstruktor des Buffers aufrufen,
    // Damit wir darauf Zeichnen können
  Buffer.Width := img.Width;
  Buffer.Height := img.Height; // Dem Buffer die Richtige Größe zuweisen
  Breite := Buffer.Width div Length(Arr); // Breite und Hoehe eines Feldes
  Hoehe := Buffer.Height div Length(Arr[x]); // ausrechnen
  for x := low(Arr) to high(Arr) do // Die Schleifen
    for y := low(Arr[x]) to high(Arr[x]) do
      begin
        if Arr[x,y] // Wenn das Feld true ist...
          then
            Buffer.Canvas.Brush.Color := clred
          else
            Buffer.Canvas.Brush.Color := clwhite;
        Buffer.Canvas.Rectangle(x*breite,y*hoehe,(x+1)*breite,(y+1)*hoehe);
        //jetzt zeichnen wir an die Dementsprechende Stelle ein Rechteck
      end;
  img.Canvas.Draw(0,0,Buffer); //Den Buffer auf das Image zeichnen
  Buffer.Free; // Den Buffer wieder freigeben
end;
Aber wie können wir durch klicken den Gewünschten effekt erzielen? Ganz einfach:
Im OnMouseDown Ereignis deines TImage werden die Koordinaten mitübergeben, also können
wir daraus die Position errechnen:
Delphi-Quellcode:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
Var PosX,
    PosY: integer;
begin
  PosX := X div (image1.Width div length(My2DArray));
  PosY := Y div (image1.Height div length(My2DArray[x]));
    // Die Positionen im Array ausrechnen
  if (PosX in [low(My2DArray)..high(My2DArray)]) and
     (PosY in [low(My2DArray[PosX])..high(My2DArray[PosY])])
    then // Liegen die Werte auch wirklich innerhalb des Arrays?
      begin
        My2DArray[PosX,PosY] := not My2DArray[PosX,PosY];
        // Jeweils überprüfen, ob man sich am Rand befindet
        if PosX > low(My2DArray)
          then
            My2DArray[PosX-1,PosY] := not My2DArray[PosX-1,PosY];
        if PosX < high(My2DArray)
          then
            My2DArray[PosX+1,PosY] := not My2DArray[PosX+1,PosY];
        if PosY > low(My2DArray[PosX])
          then
            My2DArray[PosX,PosY-1] := not My2DArray[PosX,PosY-1];
        if PosY < high(My2DArray[PosX])
          then
            My2DArray[PosX,PosY+1] := not My2DArray[PosX,PosY+1];
      end;
  Zeichne(My2DArray,image1); // Jetzt nur noch zeichen
  if AlleTrue(My2DArray) // Siehe unten
    then
      showmessage('Geschafft');
end;
Jetzt müssen wir nur noch überprüfen, ob nach dem Klicken alle Felder Rot sind
Delphi-Quellcode:
function AlleTrue(Arr: TMy2DArray): boolean;
var Bool: boolean; // Hilfsvariable
    x,
    y: integer; // Zählvariablen für die Schleife
begin
  Bool := true;
  for x := low(Arr) to high(Arr) do // Die Schleifen
    for y := low(Arr[x]) to high(Arr[x]) do
      if not Arr[x,y]
        then
          bool := false;
  result := bool;
end;
Und schon haben wir das Spiel fertig! Und das beste daran ist: Das Ganze ist so dynamisch gehalten,
dass du einfach die Werte oben in der Arraydeklaration ändern kannst, und es wird weiterhin funktionieren, z.B.:
  TMy2DArray = Array[0..5,0..9] of boolean; So viel Spaß damit und ich hoffe, mein Erklärungen waren ausführlich genug

Gruß Richard

PS: Grob getestet, sollte keine Fehler aufweisen...

Übrigens: Eine Feldgröße von 4*4 würde ich nicht empfehlen, da man in 4 Klicks gewinnen kann...
Richard Mahr
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22: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