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 Viele Trackbars aber 1 Procedur (https://www.delphipraxis.net/26977-viele-trackbars-aber-1-procedur.html)

Opal 2. Aug 2004 12:06


Viele Trackbars aber 1 Procedur
 
Hi,

so hab mich mal in der genialen CL umgeschaut aber nix gefunden. Vielleicht ist es auch ein logisches Problem was ich selbst hinbekommen müsste.

Also..ich habe ein Programm geschrieben was viele Werte aus einer Datei liest, welche einem Spiel als
Konfigurations Datie dienst.

Das ganze Ding sieht so aus:

Bild - Trackbar - Label
Bild - Trackbar - Label
Bild - Trackbar - Label
Bild - Trackbar - Label

Das Bild ist dazu dar, damit der USer weuiss um was es sich handelt. Die Trackbar um den Wert zu erhöhen oder zu verringern. Und das Label natürlich zum anzeigen.

Nun habe ich ca. 30 Trackbars. Wenn der User diese Verschiebt soll sich das Label natürlich dementsprechend ändern. Aber muss ich jetzt 30 CHange Proceduren machen oder geht das auch mit nem bisschen weniger Code ??

Ich bin ein Newbie also seid nicht zu hart :-D

Phoenix 2. Aug 2004 12:09

Re: Viele Trackbars aber 1 Procedur
 
Du kannst allen Trackbars das gleiche Ereignis zuweisen.

Dort wird als Parameter ein sender übergeben. Das ist genau diejenige Trackbar, die das Ereignis auslöst. Du kannst also z.B.
Delphi-Quellcode:
begin
   if sender = Trackbar1 then
   begin
      //
   end
   else if sender = Trackbar2 then
   begin
      //
   end;
end;
direkt abfragen.

Du kannst dann ggf. auch aus dem Namen die Nummer extrahieren.
Delphi-Quellcode:
(sender as TTrackbar).Name[ length((sender as TTrackbar).Name) -1]
Darüber kannst Du dann auch das Label referenzieren.

Edit Nachtrag: Opal: Herzlich Willkommen in der DP! :party:

Steve 2. Aug 2004 12:14

Re: Viele Trackbars aber 1 Procedur
 
Du kannst auch den Trackbars verschiedene Tag-Werte geben und sie darüber identifizieren. Allen Trackbars die gleiche OnChange-Methode zuweisen und darin die unterscheidung treffen:
Delphi-Quellcode:
IF Sender IS TTrackBar THEN
CASE TTrackBar(Sender).Tag OF
  1 : {...} // Erste Trackbar wurde geändert
  2 : {...} // Zweite Trackbar wurde geändert
END; { Case }
Gruß
Stephan

shmia 2. Aug 2004 12:26

Re: Viele Trackbars aber 1 Procedur
 
Zitat:

Zitat von Opal
Nun habe ich ca. 30 Trackbars. Wenn der User diese Verschiebt soll sich das Label natürlich dementsprechend ändern.

Bei der Menge an Trackbars wäre es sinnvoll, eine modifizierte Trackbar-Komponente zu verwenden,
die ihren Wert gleich mit anzeigt. Die Labels wären dann überflüssig und damit auch die Eventhandler
für OnChange.
siehe auf Torry's Trackbars speziell die Komponente TExTrackBar v.2.0.

Opal 2. Aug 2004 12:29

Re: Viele Trackbars aber 1 Procedur
 
THX a lot...sieht irgendwie kompliziert aus. Was sind denn Tags ???

Habe noch ein Problem. Schaut euch mal diesen Code an :

Delphi-Quellcode:
// Setzten der Werte Label
  frmMain.lblEisenerz.Caption  := WertEisenerz;
  frmMain.lblGold.Caption      := WertGold;
  frmMain.lblSalzstein.Caption := WertSalzstein;
  frmMain.lblSteine.Caption    := WertStein;
  frmMain.lblEdelsteine.Caption := WertEdelstein;
  frmMain.lblMamorstein.Caption := WertMamorstein;

  frmMain.lblWerkzeuge.Caption := WertWerkzeug;
  frmMain.lblHolz.Caption      := WertHolz;
  frmMain.lblZiegel.Caption    := WertZiegel;
  frmMain.lblMamor.Caption     := WertMamor;

  frmMain.lblNahrung.Caption   := WertNahrung;
  frmMain.lblLeder.Caption     := WertLeder;
  frmMain.lblStoffe.Caption    := WertStoffe;
  frmMain.lblWein.Caption      := WertWein;
  frmMain.lblPelze.Caption     := WertPelze;
  frmMain.lblHeilkrauter.Caption:= WertHeilkrauter;

  frmMain.lblSchwert.Caption   := WertSchwert;
  frmMain.lblBogen.Caption     := WertBogen;
  frmMain.lblArmbrust.Caption  := WertArmbrust;
  frmMain.lblMuskete.Caption   := WertMuskete;
  frmMain.lblRustung.Caption   := WertRustung;
  frmMain.lblLanze.Caption     := WertLanze;
  frmMain.lblAxt.Caption       := WertAxt;
  frmMain.lblKanonen.Caption   := WertKanonen;
 
  // Setzten der Werte Trackbar
  frmMain.tbEisenerz.Position  := StrToInt(WertEisenerz);
  frmMain.tbGold.Position      := StrToInt(WertGold);
  frmMain.tbSalzstein.Position := StrToInt(WertSalzstein);
  frmMain.tbSteine.Position    := StrToInt(WertStein);
  frmMain.tbEdelsteine.Position := StrToInt(WertEdelstein);
  frmMain.tbMamorstein.Position := StrToInt(WertMamorstein);

  frmMain.tbWerkzeuge.Position := StrToInt(WertWerkzeug);
  frmMain.tbHolz.Position      := StrToInt(WertHolz);
  frmMain.tbZiegel.Position    := StrToInt(WertZiegel);
  frmMain.tbMamor.Position     := StrToInt(WertMamor);

  frmMain.tbNahrung.Position   := StrToInt(WertNahrung);
  frmMain.tbLeder.Position     := StrToInt(WertLeder);
  frmMain.tbStoffe.Position    := StrToInt(WertStoffe);
  frmMain.tbWein.Position      := StrToInt(WertWein);
  frmMain.tbPelze.Position     := StrToInt(WertPelze);
  frmMain.tbHeilkrauter.Position:= StrToInt(WertHeilkrauter);

  frmMain.tbSchwert.Position   := StrToInt(WertSchwert);
  frmMain.tbBogen.Position     := StrToInt(WertBogen);
  frmMain.tbArmbrust.Position  := StrToInt(WertArmbrust);
  frmMain.tbMuskete.Position   := StrToInt(WertMuskete);
  frmMain.tbRustung.Position   := StrToInt(WertRustung);
  frmMain.tbLanze.Position     := StrToInt(WertLanze);
  frmMain.tbAxt.Position       := StrToInt(WertAxt);
  frmMain.tbKanonen.Position   := StrToInt(WertKanonen);
Das müsste doch acuh einfacher gehen oder ??? Habe versucht ne Funktion zu schreiben wo man einfach den wert ( zum Beispiel: Kanonen ) übergibt. Aber das Funktioniert nicht.

Zum Beispiel : frmMain.tb+Übergebener Wert+.Position := ect....
Was anderes fällt mir nicht ein :wall:
Wie gesagt Newbie :?

Opal 2. Aug 2004 12:32

Re: Viele Trackbars aber 1 Procedur
 
Zitat:

Zitat von shmia
Bei der Menge an Trackbars wäre es sinnvoll, eine modifizierte Trackbar-Komponente zu verwenden,
die ihren Wert gleich mit anzeigt. Die Labels wären dann überflüssig und damit auch die Eventhandler
für OnChange.
siehe auf Torry's Trackbars speziell die Komponente TExTrackBar v.2.0.

THX A LOOOOOOOOOOOOOOOOOOT. Das löst das Problem :lol:

Phoenix 2. Aug 2004 12:37

Re: Viele Trackbars aber 1 Procedur
 
Such hier mal in der nach Hier im Forum suchenFindComponent. Du kannst hier eine Komponente nach dem Namen suchen.

Dann gibts Du z.B. rüber
[code]procedure SetValue(name: string; wert: integer);[code]

In der Mehode suchst Du dann einmal nach lbl+name und einmal nach tb+name.
Dann hast Du das enstrpechende Panel bzw. deen namen und kannst dann Position bzw. Caption entsprechend setzen. Du musst diese Methode dann halt pro Dingsbums ;-) einmal aufrufen.

Ps: Bitte in Zukunft für eine neue Frage auch einen neuen Thread starten. Das ist einfach übersichtlicher ;-)

Opal 2. Aug 2004 20:15

Re: Viele Trackbars aber 1 Procedur
 
Danke auch dir :thumb:


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