Autor |
Beitrag |
M. Raab
Beiträge: 334
Erhaltene Danke: 1
WIN 7
Delphi XE
|
Verfasst: Sa 17.08.02 15:57
Hallo NG,
irgendwas mache ich falsch:
Hier mal die Prozedur:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70:
| Procedure PROFILE_SCREEN;
Var lauf1 : integer;
procedure form_loeschen; begin profil[lauf1].destroy; profil[lauf1]:=nil; end;
procedure form_anlegen; begin Application.CreateForm(TForm,Profil[lauf1]); with profil[lauf1] do begin caption:=inttostr(lauf1)+'. Profil von : '+form1.table1.FieldByName('BEZ').asstring; autosize:=false; borderstyle:=bssingle; clientheight:=550; clientwidth:=750; constraints.maxheight:=600; constraints.maxwidth:=800; constraints.minheight:=600; constraints.minwidth:=800; cursor:=crHandPoint;
weiter:=TButton.Create(Profil[lauf1]); weiter.parent:=profil[lauf1]; weiter.top:=1; weiter.left:=100; weiter.width:=100; weiter.caption:='Profil vorwärts'; weiter.visible:=true; weiter.onclick:=weiterclick;
Bild:=TImage.Create(Profil[lauf1]); bild.parent:=profil[lauf1]; bild.cursor:=crHandPoint; Bild.visible:=true; Bild.Top:=8; Bild.Left:=20; Bild.height:=550; bild.width:=750; bild.visible:=true; bild.visible:=true; bild.enabled:=true; bild.canvas.Pen.width:=2;
profil_zeichnen(lauf1);
windowstate:=wsminimized; show; end; end;
begin
setlength(profil,BLMAX+1);
for lauf1:=1 to BLMAX do if profil[lauf1]=nil then begin form_anlegen; end else begin form_loeschen; form_anlegen; end;
end; |
TPROFIL habe ich am Programmanfang wie folgt definiert:
Quelltext 1: 2: 3: 4: 5: 6:
| TProfil = class(Tform) private { Private-Deklarationen } public { Public-Deklarationen } end; |
BILD und WEITER sind global definiert und vom Typ TImage bzw. TBUtton
Mit dem Programm sollen mehrere Fenster geöffnet werden, in dem sich verschiedene Profile befinden. Mit dem Button WEITER möchte ich, dass man auch schnell weiterblättern kann. Also das Profil 1 (=PROFIL[1]) schließt sich, und Nr.2 öffnet sich. Der Benutzer kann dies auch manuell üner die SYstemknöpfe machen. Das hier soll das ein wenig erleichetern.
Problem nun: ich schaffe es nicht, dem Button das Ereignis zuzuordnen. Entwerder meldet er, dass weiterclick nicht existiert oder aber nur eine normale PRozedur sei oder eine ungenügende FORWARD Klausel hat.
Kann mir jemand helfen ?
Gruß
Markus
|
|
MathiasH
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: So 18.08.02 09:52
Iss ne ganze weile her, aber ich dachte es geht so:
1:Prozedur deklarieren (im var Bereich der Unit), sie muss identisch mit Button1.click sein!!!(Parameter!!!)
2:Button1.onclick := procname;
Das müsste funzen.
wieso überhaupt mehrere Fenster, man könnte das ganze do in so ne Tab Sheet-Kompo oä reinbasteln, oder willst du unbedignt mehrere Profile sync anzeigen?
MathiasH
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
M. Raab
Beiträge: 334
Erhaltene Danke: 1
WIN 7
Delphi XE
|
Verfasst: So 18.08.02 10:31
Hallo
vielen Dank - aber das funzt nicht.
Wenn ich die Prozedur deklariere, kommt immer die Fehlermeldung: ungenügende Forward Klausel bzw. External Deklaration.
Deklariere ich sie in der Subroutine kommt die Fehlermeldung: inkompatible Typen Methodenzeiger und reguläre Prozedur.
Zweck dieser Fenster ist, dass dort Schnitte aus einem Scanner dargestellt werden und man so mehere gleichzeitig sehen kann. Gleichzeitig kann man dann die Fenster übereinander schieben und so Unterschiede betrachten.
Vielleicht hast DU noch nen Tipp - langsam verzweifle ich......
Danke und Gruß
Markus
|
|
Tino
Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: So 18.08.02 13:09
M. Raab hat folgendes geschrieben: | Wenn ich die Prozedur deklariere, kommt immer die Fehlermeldung: ungenügende Forward Klausel bzw. External Deklaration |
Kannst Du mal den Code posten wie Du die Methode implementierst.
Gruß
TINO
|
|
SvenAbeln
Beiträge: 334
Erhaltene Danke: 3
|
Verfasst: So 18.08.02 14:36
Hallo,
deine Procedure weiterclick muß innerhalb einer Klasse definiert sein,
z.B. in deinem TProfil
Quelltext 1: 2: 3: 4: 5: 6: 7:
| TProfil = class(Tform) private { Private-Deklarationen } public { Public-Deklarationen } procedure weiterclick(Sender: TObject); end; |
und die Implementierung sieht sieht dann so aus
Quelltext 1: 2: 3: 4:
| procedure TProfil.weiterclick(Sender: TObject); begin
end; |
So sollte es wie gewünscht funktionieren.
bis denn,
|
|
M. Raab
Beiträge: 334
Erhaltene Danke: 1
WIN 7
Delphi XE
|
Verfasst: Sa 24.08.02 14:07
Hallo
vielen Dank für Eure Hilfe - funzt immer noch nicht.
Quelltext 1: 2: 3: 4: 5: 6: 7:
| TProfil = class(Tform) private { Private-Deklarationen } public { Public-Deklarationen } --> procedure weiterclick(Sender: TObject); end; |
Nun kommt dort sofort die Fehlermeldung ungenügende Forward bzw. External Klausel (also dort wo ich den Pfeil hin gemacht habe).
Die Implementierung der Prozedur mache ich am Anfang der Unit unter implementation, wo auch die anderen SRT sind.
Kann jemand noch helfen ?
Gruß
Markus
|
|
aogwaba
Beiträge: 109
|
Verfasst: Sa 24.08.02 14:25
Wenn das eine Klassenmethode ist, musst du's machen wie
SvenAbeln geschrieben hat.
Wenn der Code nicht zu gross ist, lass doch mal was sehen, ist sicher
Erfolversprechender als dieses Rätselraten.
Was ist SRT?
cu
waba
|
|
M. Raab
Beiträge: 334
Erhaltene Danke: 1
WIN 7
Delphi XE
|
Verfasst: Sa 24.08.02 16:37
Hallo,
hier der Code. Das Programm besteht z.Zt. nur aus einer Unit: WEST1, und die beginnt so:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193:
| unit WEST1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, comm_async, Grids, Math, Printers, DBTables, DBGrids, Mask, DBCtrls, Menus, StdCtrls,ExtCtrls,GIFCtrl, Db, RXClock, Animate;
type TProfil = class(TForm) private { Private-Deklarationen } public { Public-Deklarationen } end;
TForm1 = class(TForm) GroupBox1: TGroupBox; Button1: TButton; Button2: TButton; Panel1: TPanel; Memo1: TMemo; Button3: TButton; ComboBox1: TComboBox; Label1: TLabel; Label2: TLabel; ComboBox2: TComboBox; Button4: TButton; Button8: TButton; Button9: TButton; DBGrid1: TDBGrid; DataSource1: TDataSource; Table1: TTable; DBEdit1: TDBEdit; DBEdit2: TDBEdit; Label3: TLabel; Label4: TLabel; RxGIFAnimator2: TRxGIFAnimator; Label5: TLabel; DBEdit3: TDBEdit; RxGIFAnimator1: TRxGIFAnimator; CommSer1: TCommSer; Timer1: TTimer; Label6: TLabel; Label7: TLabel; RxClock1: TRxClock; GroupBox2: TGroupBox; ComboBox3: TComboBox; ComboBox4: TComboBox; ComboBox5: TComboBox; Button5: TButton; Button6: TButton; Label8: TLabel; StringGrid1: TStringGrid; Label9: TLabel;
procedure FormShow(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Comm1CharReceived(Sender: TObject; cbInQue: Cardinal); procedure Button8Click(Sender: TObject); procedure DBEdit1KeyPress(Sender: TObject; var Key: Char); procedure DBEdit2KeyPress(Sender: TObject; var Key: Char); procedure DBGrid1KeyPress(Sender: TObject; var Key: Char); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure Button4Click(Sender: TObject); procedure ComboBox2Change(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure CommSer1CharReceived(Sender: TObject; cbInQue: Cardinal); procedure DBGrid1DblClick(Sender: TObject); procedure DBEdit3KeyPress(Sender: TObject; var Key: Char); procedure StringGrid1KeyPress(Sender: TObject; var Key: Char); procedure ComboBox4Change(Sender: TObject); procedure ComboBox4KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ComboBox5KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ComboBox3KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ComboBox4KeyPress(Sender: TObject; var Key: Char); procedure ComboBox5KeyPress(Sender: TObject; var Key: Char); procedure ComboBox3KeyPress(Sender: TObject; var Key: Char); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); private { Private-Deklarationen } public { Public-Deklarationen } end;
var
PROFIl : array of TProfil; Bild : TImage;
**** hier kommen dann die restlichen Variablendefs **** **** diese Variablen sind auch global definiert ************* . . . .
implementation
{$R *.DFM}
Procedure PROFILE_SCREEN;
Var lauf1 : integer; Weiter : TButton; Zurueck : TButton;
procedure form_loeschen; begin profil[lauf1].destroy; profil[lauf1]:=nil; end;
procedure form_anlegen; begin Application.CreateForm(TForm,Profil[lauf1]); with profil[lauf1] do begin caption:=inttostr(lauf1)+'. Profil von : '+form1.table1.FieldByName('BEZ').asstring; autosize:=false; borderstyle:=bssingle; clientheight:=550; clientwidth:=750; constraints.maxheight:=600; constraints.maxwidth:=800; constraints.minheight:=600; constraints.minwidth:=800; cursor:=crHandPoint; position:=poscreencenter;
weiter:=TButton.Create(Profil[lauf1]); weiter.parent:=Profil[lauf1]; weiter.top:=10; weiter.left:=100; weiter.width:=100; weiter.caption:='Profil vorwärts'; weiter.visible:=true;
zurueck:=TButton.Create(Profil[lauf1]); zurueck.parent:=Profil[lauf1]; zurueck.top:=10; zurueck.left:=201; zurueck.width:=100; zurueck.caption:='Profil zurück'; zurueck.visible:=true;
Bild:=TImage.Create(Profil[lauf1]); bild.parent:=profil[lauf1]; bild.cursor:=crHandPoint; Bild.visible:=true; Bild.Top:=8; Bild.Left:=20; Bild.height:=550; bild.width:=750; bild.visible:=true; bild.visible:=true; bild.enabled:=true; bild.canvas.Pen.width:=2;
profil_zeichnen(lauf1); windowstate:=wsminimized; show; end; end;
begin
setlength(profil,BLMAX+1);
for lauf1:=1 to BLMAX do if profil[lauf1]=nil then begin form_anlegen; end else begin form_loeschen; form_anlegen; end;
profil[1].windowstate:=wsnormal;
end; |
Die Sache von Sven habe ich bereits ausprobiert - da kam dann die vorhin gepostete Meldung.
Sorry wegen der Abkürzung: SRT=Subroutine.
Ich hoffe, mir kann jemand helfen.
Gruß und vielen Dank für Eure Bemühungen. Ich habe selten ein so nettes und hilfsbereites Forum gesehen.
Gruß
Markus
|
|
aogwaba
Beiträge: 109
|
Verfasst: Sa 24.08.02 17:37
und wo ist die 'weiterclick' Implementation...
|
|
M. Raab
Beiträge: 334
Erhaltene Danke: 1
WIN 7
Delphi XE
|
Verfasst: So 25.08.02 10:16
|
|
Tino
Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: So 25.08.02 10:52
M. Raab hat folgendes geschrieben: | Ich habe es aber so gemacht, wie Sven das beschrieben hat. |
Nein hast Du nicht! Lies Dir noch mal das Posting von Sven durch.
M. Raab hat folgendes geschrieben: | Und in meiner Subroutine FORM_ANLEGEN in der Routine PROFILE_SCREEN käme eine Zeile hinzu:
Code:
Quelltext 1: 2: 3: 4:
| weiter.width:=100; weiter.caption:='Profil vorwärts'; weiter.visible:=true; weiter.onclick:=weiterclick(Sender:TObject); | |
Nein. Die Zuweiseung des OnClick-Events erfolgt genauso wie jede andere Objektzuweisung auch:
Quelltext 1:
| weiter.onclick:=weiterclick; |
M. Raab hat folgendes geschrieben: | Wenn ich meine zur Laufzeit erzeugten Forms (also PROFILE) schließe, möchte ich auf das Ereignis onclosequery reagieren. Wie kann man dann das machen ? |
Genau so wie bei "weiterclick"!
M. Raab hat folgendes geschrieben: | Und die Definition von aus(Sender:TProfil) wieder so wie weiterclick(..) ? |
wie gesagt: ließ Dir noch mal das Posting von Sven durch dann weißt Du auch wie Du das mit "aus" machen musst
Gruß
TINO
|
|
M. Raab
Beiträge: 334
Erhaltene Danke: 1
WIN 7
Delphi XE
|
Verfasst: So 25.08.02 12:27
Hallo NG,
vielen Dank - es funzt !!!!!
Ich glaub, ich hätte da noch 10x drüber gelesen.....
Ansonsten --- D A N K E !!!
Gruß
Markus
|
|