Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   DBGrid Zeilen Wechsel (https://www.delphipraxis.net/177928-dbgrid-zeilen-wechsel.html)

Andidreas 9. Dez 2013 10:36

AW: DBGrid Zeilen Wechsel
 
Zitat:

Zitat von baumina (Beitrag 1239075)
Du musst das Event einfach nur zuweisen ADataset.AfterScroll := xxprocedure und die Procedure dann schreiben xxprocedure(Sender : TDataset)

Also die Prozedur hatte ich schon im Source drinnen... Die wurde nur nie aufgerufen!

Wie funktioniert die Event zuweisung?

baumina 9. Dez 2013 10:40

AW: DBGrid Zeilen Wechsel
 
ADataset.AfterScroll := xxprocedure

Perlsau 9. Dez 2013 10:59

AW: DBGrid Zeilen Wechsel
 
Ergänzung zu Bauminas Hinweis: Die Zuweisung verhält sich analog zum Objektinspektor: Das Property AfterScroll erhält die Adresse deiner Procedure, indem du diese Procedure dem Property zuweist. Danach wird deine Procedure auch aufgerufen, wenn gescrollt wird. Wenn du im OI auf AfterScroll doppelt klickst, passiert genau dasselbe: Es wird ein Procedur-Rumpf erstellt und im OI eingetragen.

Einfach mal ausprobieren ...

Übrigens hatte Baumina diesen Hinweis bereits geliefert.

Andidreas 9. Dez 2013 12:37

AW: DBGrid Zeilen Wechsel
 
Ja den Hinweis von Baumina hab ich gelesen, aber ich hab sowas noch nie gemacht ;-) Deshalb meine Frage...

DeddyH 9. Dez 2013 12:42

AW: DBGrid Zeilen Wechsel
 
Es muss aber eine Methode sein, eine reguläre Prozedur lässt sich nicht zuweisen.

Andidreas 9. Dez 2013 12:50

AW: DBGrid Zeilen Wechsel
 
Also das folgende habe ich gemacht:

Delphi-Quellcode:

unit view;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, AdvGlowButton, Uni, StdCtrls, ShlObj, Grids, DBGrids, DB,
  MemDS, DBAccess;

type
  Tform = class(TForm)
    timerstart: TTimer;
    pnl_insertedit: TPanel;
    lbl_materialdescription: TLabel;
    lbl_tablecontent: TLabel;
    advglowbtn_search: TAdvGlowButton;
    advglowbtn_showall: TAdvGlowButton;
    edt_materialdescription: TEdit;
    dbgrid_data: TDBGrid;
    datsrc_data: TDataSource;
    procedure FormDestroy(Sender: TObject);
    procedure timerstartTimer(Sender: TObject);

    procedure SQLiteFile_DisplayAfterScroll(DataSet: TDataSet);

  private
    procedure prButtonandFieldControl(blLocked : Boolean);
    procedure prDisplayDESADVCommissionData(sCommissionNo, sDescription, sDSMin, sDSMax : String; blSearch : Boolean);
    procedure prDisplayDESADVCommissionDetails(sCommissionNo, sDSMin, sDSMax : String);
    procedure prGetDESADVCommissionMinMaxDS(sDESADVModule : String);
  public

  end;

.
.
.

procedure Tform.SQLiteFile_DisplayAfterScroll(DataSet: TDataSet);

begin

  If (gblViewCommissions) Then ShowMessage('New Record Selected');

end;
Mit diesem Source wird das AfterScroll nicht ausgelöst da das Event noch nicht zugewiesen ist, und da häng ich grad da ich nicht weiß wie sowas geht...

Perlsau 9. Dez 2013 12:53

AW: DBGrid Zeilen Wechsel
 
Wo weist du denn dem Property OnAfterScroll deines Datasets die Methode
Delphi-Quellcode:
Tform.SQLiteFile_DisplayAfterScroll(DataSet: TDataSet);
zu?

baumina 9. Dez 2013 13:02

AW: DBGrid Zeilen Wechsel
 
Also dann mal ausführlich zum Abschreiben:

Delphi-Quellcode:
procedure ErstelleDataset;
var
  aDataset : TDataset;

begin
  aDataSet := TDataset.Create;
  ...
  aDataset.AfterScroll := DoAferScroll;
  ...
end;

procedure DoAfterScroll(Sender : TDataset);
begin
 ...
end;

DeddyH 9. Dez 2013 13:19

AW: DBGrid Zeilen Wechsel
 
Das ist keine Methode, daher wird das so nicht funktionieren.

Andidreas 9. Dez 2013 13:29

AW: DBGrid Zeilen Wechsel
 
Schon mal vielen Dank Baumina! :thumb:

Ich weiß es wird hier im Forum nicht gern gesehen wenn man sich die Lösung vorkauen lässt ohne eigen Initiative.
Aber Ihr könnt mir glauben das ich gerade nicht vor meinem PC hocke und die ganze Zeit F5 drücke um auf Antworten zu warten... Habe nebenher auch Hr. Google bemüht aber irgendwie steh ich aufm Schlauch...

Nochmal von vorn...

Ich hab mir ein simples Programm zum Anzeigen von Daten gemacht.
Dort verwende ich das AfterScroll Ereignis der TUniQuery um den Wechsel von Daten Zeilen mitzubekommen und meine gewünschten Aktionen durchzuführen...
Funktioniert wunderbar...

In meiner DLL ist die vorgehensweise wie folgt...

Ich erstelle meine TUniQuery Komponente mit der ich die Daten von der DB abhole.
Mittlerweile habe ich mir die folgende Procedure angelegt die den Source beinhalten soll für das AfterScroll:
Delphi-Quellcode:
procedure Tform.prAfterScroll(Sender: TDataSet);

begin

  If (gblView) Then ShowMessage('New Record Selected');

end;
Nun versuche ich beim Laden der DLL der dynamisch erstellen TUniQuery im AfterScroll Ereignis meine Procedure zu zuweisen:

Versuch 1

Delphi-Quellcode:
  SQLiteFile_DisplayCommissions.DataSource.DataSet.AfterScroll := prAfterScroll(SQLiteFile_DisplayCommissions);

Versuch 2

Delphi-Quellcode:
  SQLiteFile_DisplayCommissions.AfterScroll := prAfterScroll(SQLiteFile_DisplayCommissions);

Beides mal kommt beim kompilieren die Fehlermeldung:
E2010 Inkompatible Typen: 'TDataSetNotifyEvent' und 'procedure, untyped pointer or untyped parameter'

Ich will niemand ärgern oder nerven, aber was das betrifft ist mein Wissen jungfräulich, ich hab noch nie eigene Events einer Komponente zugewiesen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:02 Uhr.
Seite 2 von 3     12 3      

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