Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi OnChange Event Handler: wie muss die Procedure heissen und wie weise ich richtig zu? (https://www.delphipraxis.net/202926-onchange-event-handler-wie-muss-die-procedure-heissen-und-wie-weise-ich-richtig-zu.html)

hochundweit 25. Dez 2019 18:03

Delphi-Version: 5

OnChange Event Handler: wie muss die Procedure heissen und wie weise ich richtig zu?
 
Hallo Leute,
ich versuche mich gerade an einem Wiedereinstieg in die Materie der Pascal-Programmierung (unter Lazarus/fpc), bin aber offenbar mittlerweile komplett vernagelt/verkalkt. Ich moechte 5 nebeneinanderliegende ScrollBars ueber eine Array derselben erzeugen. Wie schreibe ich jetzt den
Eventhandler for den OnChange Event ? Als Procedure TForm1.ScrollBarChange und wie weise ich korrekt zu ? In der Change Procedure soll mit den Min- und Max-Werte des Scrollbars gerechnet werden...
Vielen Dank im voraus fuer die Hilfestellung.



Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;
  scrbr: Array of TScrollBar;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  SetLength(scrbr,5);
  for i:=0 to 4 do begin
    scrbr[i]:=TScrollBar.Create(self);
    scrbr[i].Parent:=self;
    scrbr[i].Top:=90;
    scrbr[i].Width:=250;
    scrbr[i].Height:=30;
    scrbr[i].Left:=i*40;
    scrbr[i].Kind:=sbVertical;
    scrbr[i].Min:=0;
    scrbr[i].Max:=100;
    scrbr[i].OnChange:=ScrollBarChange; // <- da hake ich
  end;
end;


end.

dummzeuch 25. Dez 2019 18:18

AW: OnChange Event Handler: wie muss die Procedure heissen und wie weise ich richtig
 
Wie die Methode heißt, ist völlig egal, wichtig ist, dass sie zum Event passt:

1. Es muss eine Methode sein, keine Prozedur.
2. Sie muss die passenden Parameter haben. Welche das sind, kannst Du in der Deklaration des Event-Typs nachsehen. Beispiel:
Delphi-Quellcode:
type
  TNotifyEvent = procedure(Sender: TObject) of object;
Zugewiesen wird sie einfach als

Delphi-Quellcode:
  Component.Event := Eventhandler;


EDIT: Ich sehe gerade, dass Du anscheinend Lazarus benutzt. Da ist das mit der Zuweisung anders:

Delphi-Quellcode:
  Component.Event := @Eventhandler;

hochundweit 25. Dez 2019 18:30

AW: OnChange Event Handler: wie muss die Procedure heissen und wie weise ich richtig
 
Danke, hat geholfen. Das mit dem Zuweisungsklammeraffen bei Lazarus war mir komplett entfallen. Da fall ich in 5 Jahren bestimmt wieder darauf rein :)

scrat1979 25. Dez 2019 18:34

AW: OnChange Event Handler: wie muss die Procedure heissen und wie weise ich richtig
 
Wenn ich es richtig interpretiere hakt es beim Zuweisen verschiedener Events in der Schleife. Man kann ja nicht schreiben

Delphi-Quellcode:
ComponentArray[i].Eventhandler := Eventhandler + [i]
Als Workaround könnte man in der for-Schleife mittels Case-Anweisung auf den Wert von i prüfen und ein entsprechendes Event zuweisen:

Delphi-Quellcode:
CASE i of
1: ComponentArray[i].Eventhandler := EventHandler1;
2: ComponentArray[i].Eventhandler := EventHandler2;
end;
Eine einfachere/universellere Lösung fällt mir gerade nicht ein.

Frohe Weihnachten meinerseits,


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