Autor |
Beitrag |
covel
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: Mi 12.07.06 11:11
Moin, komme mal wieder nicht weiter!!
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| btn_close:= TButton.Create(form1); with btn_close do begin parent:=test; width:=10; height:=10; top:=0; left:=90; OnClick:=Close; <- Hier möchte ich dem btn_close eine procedure zuweisen!! Wird auch gemacht nur es wird kein Parameter übergeben! end; |
Hoffe es kann mir jemand helfen!
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:
| unit objekte;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls,unit1;
type TAuto= class(TObject) fx:Integer; fy:Integer; test:TPanel; btn_close:TButton; constructor Create; destructor destroy;
procedure ControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;X, Y: Integer); procedure ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure ControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure close(Sender:TObject); end;
implementation var
inReposition : boolean; oldPos : TPoint; Sender:TPanel;
constructor TAuto.Create; begin inherited; test := TPanel.Create(form1); with test do begin Visible :=true; Parent:=form1; Width :=100; Height :=100; onMouseDown:=ControlMouseDown; OnMouseUp:=ControlMouseUp; OnMouseMove:=ControlMouseMove; end; inherited; btn_close:= TButton.Create(form1); with btn_close do begin parent:=test; width:=10; height:=10; top:=0; left:=90; OnClick:=Close; end;
end;
destructor TAuto.Destroy; begin btn_close.Free; test.free; inherited; end;
procedure TAuto.close(Sender:TObject); begin TPanel(sender).Caption :='test'; end;
procedure TAuto.ControlMouseUp( Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if inReposition then begin Screen.Cursor := crDefault; ReleaseCapture; inReposition := False; end; end;
procedure Tauto.ControlMouseMove( Sender: TObject; Shift: TShiftState; X, Y: Integer); const minWidth = 20; minHeight = 20; var newPos: TPoint; frmPoint : TPoint; begin if inReposition then begin with TWinControl(Sender) do begin GetCursorPos(newPos);
if ssShift in Shift then begin Screen.Cursor := crSizeNWSE; frmPoint := ScreenToClient(Mouse.CursorPos); if frmPoint.X > minWidth then Width := frmPoint.X; if frmPoint.Y > minHeight then Height := frmPoint.Y; end else begin Screen.Cursor := crSize; Left := Left - oldPos.X + newPos.X; Top := Top - oldPos.Y + newPos.Y; oldPos := newPos; end; end; end; end;
procedure TAuto.ControlMouseDown( Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if(Sender is TWinControl) then begin inReposition:=True; SetCapture(TWinControl(Sender).Handle); GetCursorPos(oldPos); end; end;
end. |
Moderiert von Christian S.: Delphi-Tags hinzugefügt
|
|
crowley
      
Beiträge: 406
Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
|
Verfasst: Mi 12.07.06 11:35
schau dir noch mal deine Close-Procedure an:
du weist einem Button die Close-Procedure für das OnClick- Event zu... in der Procedure selber greifst du aber auf TPanel(Sender) zu, das kann nicht funktionieren, da der Sender dein Button ist. Wenn, muss es an der Stelle entweder TButton(Sender).Caption oder test.Caption heissen, je nachdem, in welches Caption du nun was schreiben willst.
|
|
covel 
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: Mi 12.07.06 11:48
ohh, da habe ich was übersehen, es funkt. nun. besten dank
|
|
crowley
      
Beiträge: 406
Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
|
Verfasst: Mi 12.07.06 11:59
vielleicht täusche ich mich ja, aber hatten wir nicht in einem ähnlichen Thread von dir schon mal gesagt, dass du deine Klasse vielleicht von TPanel und nicht von TObject ableiten solltest?
desweiteren solltest du vermeiden, ggf. zentral vorbelegte Procedure- Namen zu mißbrauchen (Close ist quasi mehrfach vorbelegt... nenne es vielleicht besser: BtnClose oder noch besser BtnCloseClick).
Wird dein ButtonClick eigentlich überhaupt aufgerufen? Habe die Befürchtung, dass du mit deinem
ControlMouseDown bzw. ControlMouseUp das schon abfängst bzw. nicht entsprechend weiterleitest.
Was soll eigentlich deine globale Variable Sender? Schmeiss die mal lieber weg... kann sein, dass die die Wurzel allen Übels ist und anstatt auf den Parameter Sender im Close greift dein Close auf die nicht initialisierte Variable Sender zu.
|
|
covel 
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: Mi 12.07.06 14:08
Jo, habe vor ein paar tagen etwas ähnliches gepostet!!! Habe deine Tips bis auf das Objekt als TPanel zudeklarieren befolgt!
Habe jedoch wieder ein Problem  Wenn ich zwei Instanzen erzeugt habe, kann ich das erste Objekt also Auto1 löschen ohne Fehlermeldung wenn ich aber Auto2 per btncloseclick löschen will kommt immer eine EAccessViolation Exeption!!!
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:
| unit objekte;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls,unit1;
type TAuto= class(TObject) fx:Integer; fy:Integer; test:TPanel; btn_close:TButton; constructor Create(AOwner: TComponent); destructor destroy;
procedure ControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;X, Y: Integer); procedure ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure ControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BtnCloseClick(Sender:TObject); end;
implementation var
inReposition : boolean; oldPos : TPoint; constructor TAuto.Create; begin test := TPanel.Create(form1); with test do begin Visible :=true; Parent:=form1; Width :=100; Height :=100; onMouseDown:=ControlMouseDown; OnMouseUp:=ControlMouseUp; OnMouseMove:=ControlMouseMove; end; btn_close:= TButton.Create(form1); with btn_close do begin parent:=test; width:=10; height:=10; caption:= 'x'; top:=0; left:=90; OnClick:=BtnCloseClick; end;
end;
destructor TAuto.Destroy; begin btn_close.Free; inherited; end;
procedure TAuto.BtnCloseClick(Sender:TObject); begin TButton(sender).parent.free; inherited; end;
procedure TAuto.ControlMouseUp( Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if inReposition then begin Screen.Cursor := crDefault; ReleaseCapture; inReposition := False; end; end;
procedure Tauto.ControlMouseMove( Sender: TObject; Shift: TShiftState; X, Y: Integer); const minWidth = 20; minHeight = 20; var newPos: TPoint; frmPoint : TPoint; begin if inReposition then begin with TWinControl(Sender) do begin GetCursorPos(newPos);
if ssShift in Shift then begin Screen.Cursor := crSizeNWSE; frmPoint := ScreenToClient(Mouse.CursorPos); if frmPoint.X > minWidth then Width := frmPoint.X; if frmPoint.Y > minHeight then Height := frmPoint.Y; end else begin Screen.Cursor := crSize; Left := Left - oldPos.X + newPos.X; Top := Top - oldPos.Y + newPos.Y; oldPos := newPos; end; end; end; end;
procedure TAuto.ControlMouseDown( Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if(Sender is TWinControl) then begin inReposition:=True; SetCapture(TWinControl(Sender).Handle); GetCursorPos(oldPos); end; end;
end. |
|
|
jakobwenzel
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Mi 12.07.06 14:11
Kanns sein, dass du Auto2 als
Delphi-Quelltext
initialisierst?
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
covel 
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: Mi 12.07.06 14:23
nein, sodern mit
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| uses objekte; {$R *.dfm}
var auto1,auto2:Tauto;
procedure TForm1.Panel1Click(Sender: TObject); begin Auto1:=TAuto.Create(self);Auto2:=TAuto.Create(self); end; |
oder ist das dass gleiche wie auto2:=auto1;?
|
|
crowley
      
Beiträge: 406
Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
|
Verfasst: Mi 12.07.06 14:28
nein... die wurzel des bösen ist, dass du nur EINEN button erzeugst...
du erzeugst ihn ja immer mit
Delphi-Quelltext 1:
| btn_close := TButton.Create(form1); |
Dabei soll der Owner des Buttons nicht das Form sondern dein Auto sein, oder ? dadurch erzeugst du eine Instanz deines btn_close nach der anderen, aber du hast immer nur den zuletzt erzeugten... gibst du diesen frei, hast du keinen button mehr, auf den du zugreifen kannst... dafür aber noch viele im speicher!
desweiteren... kann ich anfangen zu schreien, wenn ich in einem constructor eines Objektes sowas lese
Delphi-Quelltext 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:
| constructor TAuto.Create; begin test := TPanel.Create(form1); with test do begin Visible :=true; Parent:=form1; Width :=100; Height :=100; onMouseDown:=ControlMouseDown; OnMouseUp:=ControlMouseUp; OnMouseMove:=ControlMouseMove; end; btn_close:= TButton.Create(form1); with btn_close do begin parent:=test; width:=10; height:=10; caption:= 'x'; top:=0; left:=90; OnClick:=BtnCloseClick; end; end; |
Du setzt damit voraus, dass bei der Verwendung von der Klasse TAuto IMMER ein form1 vorhanden ist! lass das form1 da weg! entweder packst du da nil rein... oder Self... oder du solltest da definitiv ein Panel draus machen, dann brauchst du auch dein test nicht mehr! Im constructor solltest du als ERSTES immer das inherited Create; aufrufen.
Desweiteren solltest du auch im destructor auch test freigeben...
|
|
_frank_
      
Beiträge: 343
Erhaltene Danke: 1
Win XP
Delphi 3 Prof / Turbo Delphi Explorer
|
Verfasst: Mi 12.07.06 14:32
nein, ist nicht das gleiche...hast es schon richtig gemacht.
bei Auto2:=auto1; kopierst du nur den Pointer, d.h. es zeigen beide variablen auf 1 Objekt. wenn du es freigibst, sind beide Pointer (da gleich) ungültig.
Create erstellt ein neues Objekt und gibt den Pointer zurück, welchen du deiner variablen zuweist.
Gruß Frank
_________________ EB FE (die wahrscheinlich kürzeste Endlosschleife der Welt  )
BA 01 00 00 00 52 EB 09 BB 4D 11 86 7C FF D3 EB 0D E8 F2 FF FF FF 63 68 61 72 6D 61 70 00 C3
|
|
covel 
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: Mo 17.07.06 09:51
So ich erzeuge nun die Buttons als Array, kann die einzelnen Panels aber immer noch nicht über Btn_close löschen.
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:
| unit objekte;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls,unit1;
type
TAuto= class(TObject) fx:Integer; fy:Integer; test:Array[0..10] of TPanel; btn_close:Array [0..10] of TButton; constructor Create(AOwner: TComponent);
procedure ControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;X, Y: Integer); procedure ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure ControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BtnCloseClick(Sender:TObject); end;
implementation var inReposition : boolean; oldPos : TPoint; x,y: integer;
constructor TAuto.Create; begin test[x] := TPanel.Create(nil); with test[x] do begin Visible :=true; Parent:=form1; Width :=100; Height :=100; onMouseDown:=ControlMouseDown; OnMouseUp:=ControlMouseUp; OnMouseMove:=ControlMouseMove; caption:= inttostr(x); end;
btn_close[y]:= TButton.Create(nil); with btn_close[y] do begin parent:=test[x]; width:=10; height:=10; caption:= 'x'; top:=0; left:=90; OnClick:=BtnCloseClick; end; inc(x); inc(y); end;
procedure TAuto.BtnCloseClick(Sender:TObject); begin TButton(sender).destroy; inherited; end;
procedure TAuto.ControlMouseUp( Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if inReposition then begin Screen.Cursor := crDefault; ReleaseCapture; inReposition := False; end; end;
procedure Tauto.ControlMouseMove( Sender: TObject; Shift: TShiftState; X, Y: Integer); const minWidth = 20; minHeight = 20; var newPos: TPoint; frmPoint : TPoint; begin if inReposition then begin with TWinControl(Sender) do begin GetCursorPos(newPos);
if ssShift in Shift then begin Screen.Cursor := crSizeNWSE; frmPoint := ScreenToClient(Mouse.CursorPos); if frmPoint.X > minWidth then Width := frmPoint.X; if frmPoint.Y > minHeight then Height := frmPoint.Y; end else begin Screen.Cursor := crSize; Left := Left - oldPos.X + newPos.X; Top := Top - oldPos.Y + newPos.Y; oldPos := newPos; end; end; end; end;
procedure TAuto.ControlMouseDown( Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if(Sender is TWinControl) then begin inReposition:=True; SetCapture(TWinControl(Sender).Handle); GetCursorPos(oldPos); end; end;
end. |
|
|
crowley
      
Beiträge: 406
Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
|
Verfasst: Mo 17.07.06 10:10
Was hältst du davon ?
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:
| unit objekte;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type
TAuto= class(TObject) fx:Integer; fy:Integer; test:TPanel; btn_close:TButton; constructor Create(AOwner: TComponent); destructor destroy; procedure BtnCloseClick(Sender:TObject); end;
implementation var inReposition : boolean; oldPos : TPoint;
constructor TAuto.Create(AOwner: TComponent); begin inherited Create;
test := TPanel.Create(Self); with test do begin Visible := true; Parent := AOwner; Width := 100; Height := 100; onMouseDown:=ControlMouseDown; OnMouseUp:=ControlMouseUp; OnMouseMove:=ControlMouseMove; end;
btn_close := TButton.Create(test); with btn_close do begin parent:=test; width:=10; height:=10; caption:='x'; top:=0; left:=90; OnClick:=BtnCloseClick; end; end;
destructor TAuto.Destroy; begin test.free; btn_close.free;
inherited; end;
procedure TAuto.BtnCloseClick(Sender:TObject); begin Close; end;
end. |
Noch einmal: Leite dir TAuto von TPanel ab. Desweiteren kannst du in einer Ereignis-Routine die aufrufende Komponente nicht freigeben. Das gibt dir immer einen Zugriffsfehler, da diese Komponente ja quasi "noch in Benutzung" ist. Dein Code ist seeeehr fehleranfällig, so wie du ihn da zusammenbaust... und noch etwas: benutze den destructor, da solltest du ALLE im Panel integrierten Komponenten frei geben.
|
|
covel 
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: Mo 17.07.06 11:01
wie leite ich TAuto den von TPanel genau ab?? Bei deinem Quellcode bekommen ich ne fehlermeldung
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| test := TPanel.Create(self); with test do begin Visible := true; Parent := AOwner; Width := 100; Height := 100; onMouseDown:=ControlMouseDown; OnMouseUp:=ControlMouseUp; OnMouseMove:=ControlMouseMove; end; |
|
|
crowley
      
Beiträge: 406
Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
|
Verfasst: Mo 17.07.06 11:10
Ist gar nicht mal so schwer
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:
| unit objekte; interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TAuto= class(TPanel) fx:Integer; fy:Integer; btn_close:TButton; constructor Create(AOwner: TComponent); destructor destroy; procedure BtnCloseClick(Sender:TObject); procedure ControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;X, Y: Integer); procedure ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure ControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); end;
implementation var inReposition : boolean; oldPos : TPoint; constructor TAuto.Create(AOwner: TComponent); begin inherited Create(AOwner);
Visible := true; Width := 100; Height := 100; OnMouseDown:=ControlMouseDown; OnMouseUp:=ControlMouseUp; OnMouseMove:=ControlMouseMove;
btn_close := TButton.Create(Self); with btn_close do begin parent:=Self; width:=10; height:=10; caption:='x'; top:=0; left:=90; OnClick:=BtnCloseClick; end; end;
destructor TAuto.Destroy; begin btn_close.free; inherited; end; procedure TAuto.BtnCloseClick(Sender:TObject); begin Self.Free; end;
procedure TAuto.ControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if inReposition then begin Screen.Cursor := crDefault; ReleaseCapture; inReposition := False; end; end;
procedure TAuto.ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); const minWidth = 20; minHeight = 20; var newPos: TPoint; frmPoint : TPoint; begin if inReposition then begin with TWinControl(Sender) do begin GetCursorPos(newPos);
if ssShift in Shift then begin Screen.Cursor := crSizeNWSE; frmPoint := ScreenToClient(Mouse.CursorPos); if frmPoint.X > minWidth then Width := frmPoint.X; if frmPoint.Y > minHeight then Height := frmPoint.Y; end else begin Screen.Cursor := crSize; Left := Left - oldPos.X + newPos.X; Top := Top - oldPos.Y + newPos.Y; oldPos := newPos; end; end; end; end; procedure TAuto.ControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if(Sender is TWinControl) then begin inReposition:=True; SetCapture(TWinControl(Sender).Handle); GetCursorPos(oldPos); end; end; end. |
|
|
covel 
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: Mo 17.07.06 11:30
bekomme ne fehlermeldung bei
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| TAuto= class(TPanel) fx:Integer; <---[Fehler] objekte.pas(193): Das Published-Feld 'fx' ist weder vom Typ class noch interface fy:Integer; <---[Fehler] objekte.pas(194): Das Published-Feld 'fy' ist weder vom Typ class noch interface btn_close:TButton; constructor Create(AOwner: TComponent); destructor destroy; |
habe die zeilen gelöscht!
Jedoch wenn ich nun mit
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Panel1Click(Sender: TObject); begin Auto1:=TAuto.Create(self); end; |
Auto1 erzeugen will wird es mir auf der Form1 nicht angezeigt!! Muss ich nen parent setzen?ß
Grüße Michael
|
|
crowley
      
Beiträge: 406
Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
|
Verfasst: Mo 17.07.06 11:40
Mein Fehler:
du solltest in einem Objekt/Klasse/Komponente immer zwischen private/public/published- properties/procedure etc differenzieren. fx, fy hattest du ja gar nicht benutzt, warum somit sowieso überflüssig.
Delphi-Quelltext 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:
| type TAuto= class(TPanel) private btn_close:TButton; procedure BtnCloseClick(Sender:TObject); procedure ControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;X, Y: Integer); procedure ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure ControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); public constructor Create(AOwner: TComponent); destructor destroy; end;
implementation
constructor TAuto.Create(AOwner: TComponent); begin inherited Create(AOwner);
Parent := AOwner; Visible := true; Width := 100; Height := 100; OnMouseDown:=ControlMouseDown; OnMouseUp:=ControlMouseUp; OnMouseMove:=ControlMouseMove; |
|
|
covel 
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: Mo 17.07.06 11:44
|
|
crowley
      
Beiträge: 406
Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
|
Verfasst: Mo 17.07.06 12:09
tu mir mal einen gefallen und poste mal deine ganze unit (oder pack mir das ganze projekt mal in eine zip datei)... mit dieser flickenarbeit kommen wir ja nicht wirklich voran
C.
|
|
covel 
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: Mo 17.07.06 12:16
here it is!! Erstmal besten dank das du dir so viel mühe gibst!!!!
Einloggen, um Attachments anzusehen!
|
|
crowley
      
Beiträge: 406
Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
|
Verfasst: Mo 17.07.06 12:35
momentan ist unsere firmenfirewall auf "paranoid" eingestellt und ich kann die datei von hier aus nicht herunterladen. ich schau mir das heute abend mal von zuhause an.
hoffe, du kannst noch so lange warten
C.
|
|
covel 
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: Mo 17.07.06 12:38
alles klar ich warte 
|
|
|