![]() |
Objekt übergeben
Hallo,
ich habe mehrere TTrackBar´s deren Event "OnChange" in der selben Procedure landet.
Delphi-Quellcode:
Wie bekomme ich das Object in myTrackBar, geht das überhaupt?
procedure Tfrm_Server.tb_ACh1Change(Sender: TObject); {insgesamt 8 Trackbars}
var myTrackBar: TTrackBar; begin ?????? ShowMessage(IntToStr(myTrackBar.Position)); end; Danke |
AW: Objekt übergeben
Guck dir mal den Parameter an, der übergeben wird ;)
|
AW: Objekt übergeben
ich bin leider in objecten überhaupt nicht fit.
übergeben wird ein objekt, aber wie bekomme ich das in ein Trackbar? |
AW: Objekt übergeben
Zitat:
Delphi-Quellcode:
oder für Paranoide etwas schöner:
procedure Tfrm_Server.tb_ACh1Change(Sender: TObject);
var myTrackBar: TTrackBar; begin myTrackBar := TTrackBar(Sender); ShowMessage(IntToStr(myTrackBar.Position)); end;
Delphi-Quellcode:
procedure Tfrm_Server.tb_ACh1Change(Sender: TObject);
var myTrackBar: TTrackBar; begin if Sender is TTrackbar then begin myTrackBar := TTrackBar(Sender); ShowMessage(IntToStr(myTrackBar.Position)); end; end; |
AW: Objekt übergeben
:bouncing4:
OK, ich geb zu, das hätte man wirklich hinbekommen können! |
AW: Objekt übergeben
Zitat:
Delphi-Quellcode:
Paranoid: (auf nummer sicher, und wenn was nicht stimmt, dann läßt man's knallen)
procedure Tfrm_Server.tb_ACh1Change(Sender: TObject);
begin if Sender is TTrackbar then ShowMessage(IntToStr(TTrackBar(Sender).Position)); end;
Delphi-Quellcode:
procedure Tfrm_Server.tb_ACh1Change(Sender: TObject);
begin ShowMessage(IntToStr((Sender as TTrackBar).Position)); end; |
AW: Objekt übergeben
OK, wird ja immer besser... :-D
Von den objektorientierten Grundzügen habe ich eine Vorstellung. Leider hapert es mit der Syntax und der detailirten Vorgehensweise. Letztendlich möchte ich eine Prozedur schreiben. Ich habe in einer Groupbox 8 Trackbars + labels ect. sowie ein globales array[1..8] für die Position der Trackbars. Nun möchte ich nicht jedem Trackbar.OnChange eine eigene Prozedur zuweisen die dann das entsprechende array füllt. Ich habe mir das "schematisch" so vorgestellt:
Delphi-Quellcode:
oder
procedure Tfrm_Server.TrackBarChange(Sender: TObject);
var TrackBar_Value: array[1..8] of integer; i as integer; begin i := 1; For TTrackBar(Sender) in Groupbox do begin TrackBar_Value[i] := IntToStr(TTrackBar(Sender).Position); end; end;
Delphi-Quellcode:
Könnte mir jemand bei der richtigen Syntax / Struktur behilflich sein?
procedure Tfrm_Server.TrackBarChange(Sender: TObject);
var TrackBar_Value: array[1..8] of integer; i,j as integer; begin i := 1; For j := 1 to Groupbox.objects.count {alle Objekte auch Label ect.} begin if Sender is TTrackbar then begin TrackBar_Value[i] := IntToStr(TTrackBar(Sender).Position); i := i+1; end; end; end; Macht das o.g. so überhaupt Sinn? Danke für eure Hilfe. |
AW: Objekt übergeben
Zitat:
|
AW: Objekt übergeben
Du kannst auch mit dem Tag property arbeiten, dann ist die Zuordnung sicher
Chuck |
AW: Objekt übergeben
Zitat:
Um mein Object-Verständnis zu vertiefen, wäre es für mich trotzdem von interesse zu wissen, ob meine "Objekt-Gedanken" richtig und machbar sind. Zitat:
Am meiseten würde es mir weiterhelfen, wenn ihr die von mir vorgeschlagenen Proceduren richtigstellen könntet bzw. mir meine Gedankenfehler aufzeigen könntet. Danke für die schnellen Antworten. |
AW: Objekt übergeben
Also, du könntest ein
Delphi-Quellcode:
anlegen, anstatt deines jetzigen Arrays, darüber hast du jederzeit direkten Zugriff auf eine Trackbars.
array[1..8] of TTrackBar
> Dieses Array befüllst du dann im OnCreate deiner Form. Dabei Helfen kann auch ![]() ![]() Zitat:
Dieses Property wird von der VCL (Delphi) nicht genutzt und ist für den Programmierer gedacht, dieser kann dort sonstwas reinmachen ... was er nur will und was in diesen Integer reinpaßt. Da könnte man z.B. im OI irgendwelche Zahlen eintragen und dann im Programm schauen was da drinsteht und jeweils anders reagieren. |
AW: Objekt übergeben
Die vorgeschlagenen Varianten als Realisierungsvorschlag:
Delphi-Quellcode:
type
TForm1 = class(TForm) Groupbox: TGroupbox; Trackbar1: TTrackbar; Trackbar2: TTrackbar; {...} private function GetTrackbar(AIndex: Integer): Trackbar; {...} public property Trackbar[AIndex: Integer]: TTrackbar read GetTrackbar; {...} end; implementation function TForm1.GetTrackbar(AIndex: Integer): Trackbar; {Variante 1: über den Namen suchen} begin Result := FindComponent('Trackbar' + IntToStr(AIndex)); end; {Variante 2: über den Tag suchen, der Tag muss im Objektinspektor zugewiesen sein} var i: Integer; begin with Groupbox do begin for i := 0 to Controls.Count - 1 do begin if (Controls[i] is TTrackbar) and (Controls[i].Tag = AIndex) then begin Result := TTrackbar(Controls[i]); Exit; end; end; end; Result := nil; end;
Delphi-Quellcode:
{Variante 3: über initialisiertes Array zugreifen}
type TForm1 = class(TForm) Groupbox: TGroupbox; Trackbar1: TTrackbar; Trackbar2: TTrackbar; {...} procedure FormCreate(Sender: TObject); // <- muss im Objektinspektor zugewiesen sein private FTrackbar: array[1..8] of TTrackBar; function GetTrackbar(AIndex: Integer): Trackbar; {...} public property Trackbar[AIndex: Integer]: TTrackbar read GetTrackbar; {...} end; implementation procedure TForm1.FormCreate(Sender: TObject); begin FTrackbar[1] := Trackbar1; FTrackbar[2] := Trackbar2; {...} end; function TForm1.GetTrackbar(AIndex: Integer): Trackbar; begin Result := FTrackbar[AIndex]; end; |
AW: Objekt übergeben
Suuupiee,
danke für die ausführlichen Antworten. :bounce2: Das mit dem Tag hab ich jetzt auch verstanden. Wenn ich im Form das (den?) Tag der TrackBars durchnummeriere (Tag 1-8) dann frage ich das (den?) im Event einfach ab. Klasse, werd ich nachher gleich ausprobieren. Danke.... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:05 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