AGB  ·  Datenschutz  ·  Impressum  







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

Mehrere ScrollBars & Editboxes verknüpfen

Ein Thema von afentis · begonnen am 30. Apr 2007 · letzter Beitrag vom 2. Mai 2007
Antwort Antwort
afentis

Registriert seit: 30. Apr 2007
2 Beiträge
 
#1

Mehrere ScrollBars & Editboxes verknüpfen

  Alt 30. Apr 2007, 14:44
hallo

Folgender Sachverhalt:
Ich habe > 500 Scrollbars in einem Formular (auf verschiedene Panels verteilt). Zu jeder Scrollbar gehört eine Edit-Box in welcher entweder der aktuelle Wert der Scrollbar angezeigt (wenn diese bewegt wird), oder ein Wert für die Scrollbar festgelegt werden soll (wenn man denWert direkt eingibt). Das funktioniert auch soweit gut, wenn ich für jede Scrollbar-Editbox-Kombination eine eigene Procedure schreibe. Für eine variable Anzahl dieser Kombinationen ist das aaber nicht möglich.

Jetzt zu meiner Frage:
Wie kann ich anhand des Senders die entsprechende Kombination, z.b. Scrollbar 385 <-> Editbox 385, ermitteln?


Delphi-Quellcode:
procedure TForm1.changeValue(Sender: TObject); // Ändern des Wertes im Edit-Feld wenn die Scrollbar bewegt wird
begin

    i:= 100 - Form1.Ch1.Position;
    Form1.Ch1Text.Text := IntToStr(i);
end;

procedure TForm1.changeValueBar(Sender: TObject); // Ändern der Scrollbar-Position, wenn ein Wert im Edit-Feld eingegeben wird
begin
        i:= StrToInt(Form1.Ch1Text.Text);
        Form1.Ch1.Position := 100 - i;
end;
mfg
afentis
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Mehrere ScrollBars & Editboxes verknüpfen

  Alt 30. Apr 2007, 15:01
(Sender as TComponent).Name ?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Mehrere ScrollBars & Editboxes verknüpfen

  Alt 30. Apr 2007, 15:25
Wenn du die Scrollbar bewegst:
(FindComponent('eValue' + IntToStr((Sender as TScrollBar).Tag)) as TEdit).Text := (Sender as TScrollBar).Position Und wenn du dann das Edit bewegst:
(FindComponent('sbValue' + IntToStr((Sender as TEdit).Tag)) as TScrollBar).Position := (Sender as TEdit).Text Erklärung:
"FindComponent" findet die Komponente mit den übergebenen Namen auf der Form.
Also musst du in die Klammern den Namensstring davon schreiben. Bei mir heißen sie demnach "eValueX" wobei X die EditNummer ist. Die Scrollbars heißen bei mir "sbValueX"...
"Sender" gibt dir die Komponente an, welche diese Prozedur ausgelöst hat. Da es sich um den Typ "TObject" handelt, musst du ihn in ein TEdit oder in die TScrollbar casten (s.u.).
".Tag" ist eine Eigenschaft in der du ein Integer speicherst. In deinen Besonderen Fall haben sie die Nummer der Scrollbar.
Also muss die Scrollbar, welche mit dem "eValue1" verknüpft wird, den/die Tag "1" haben.

Zum Casten:
Ein Cast funzt so: <Variable> as <Datentyp> oder <Datentyp>(<Variable>). Im ersten Fall sollte man darum eine Klammer machen um die Eigenschaften abzurufen ((<Variable> as <Datentyp>).<Eigenschaft>)
Um sicher zu gehen, dass ein Cast funktioniert, kann man das mit "is" testen "<Variable> is <Datentyp>".

Ich hoffe mal du verstehst dieses Konstrukt.
Um es dir einfacher zu machen, splitte ich mal die 1. Zeile auf:
Delphi-Quellcode:
var
  e : TEdit; // Das Edit, wo wir den Wert reinschreiben
  sb : TScrollBar; // Die ScrollBar, welche sich bewegt
  tag : string; // Der/Doe/Das Tag, gleich als bequemen string
begin
  sb := (Sender as TScrollBar); // Wir schreiben unsere Scrollbar in die Variable... Dabei müssen wir casten!
  tag := IntToStr(sb.Tag); // Unser Tag wird ein string

  e := FindComponent('eValue' + // Wir suchen nun nach der Komponente mit dem namem "eValue ...
                     tag) // ... und dem/der... Tag ...
       as TEdit; // ... und casten das als Edit
  e.Text := IntToStr(sb.Position) // Zuletzt schreiben wir die Position der Scrollbar in das Edit
end;
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
afentis

Registriert seit: 30. Apr 2007
2 Beiträge
 
#4

Re: Mehrere ScrollBars & Editboxes verknüpfen

  Alt 2. Mai 2007, 10:30
Danke für die Antwort!
Mir war die Funktion FindComponent nicht bekannt.

mfg
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Mehrere ScrollBars & Editboxes verknüpfen

  Alt 2. Mai 2007, 14:51
Aber an sich ist diese Variante unelegant...
Eleganter, aber wahrscheinlich nicht in deinem Verständis ( ), wäre die dynamische Erstellung von einem Edit und Scrollbar array... Sodass man mithilfe des Tags einfacher an den Index rankommt:
Delphi-Quellcode:
const SCROLLBARS_EDITS_COUNT = 10;

type
  Form1 = class(TForm)
  public
    {...}
    eValues : array [0..SCROLLBARS_EDITS_COUNT - 1] of TEdit;
    sbValues : array [0..SCROLLBARS_EDITS_COUNT - 1] of TScrollBar;
  end;

{...}
procedure TForm1.FormCreate(Sender : TObject);
var
  i : Integer;
begin
  for i := 0 to SCROLLBARS_EDITS_COUNT - 1 do
  begin
    { ... }
    eValues[i].Tag := i;
    sbValues[i].Tag := i;
  end;
end;
Später wenn du dann darauf zugreifst:
Für das Setzen des Edits:
eValues[(Sender as TScrollBar).Tag].Text := IntToStr((Sender as TScrollBar).Postion); Für das Setzen der Scrollbarposition:
sbValues[(Sender as TEdit).Tag].Position:= StrToInt((Sender as TEdit).Text);
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  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 15:49 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