Autor |
Beitrag |
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Di 16.01.07 14:21
Mein Infolehrer hat auf dem PC in der schule uns eine Komponente zur verfügung gestellt. Is eine *.Pas ohne Copyrigth hinweis. ich weiß jetzt nicht ob er das programmiert hat aber ist egal.
ich hab mir die Komponente mit nach Hause genommen und wollte learning-by-doing neue funktionen hinzufügen. in der schule hat die rohversion (ohne meinem Code) keine probs beim installieren gemacht (Delphi 3 in der Schule).
Bei mir macht die version grundsätzlich mal probleme.
mit meinem Code kommen folgende Fehlermeldungen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| [Warning] Messenger.pas(95): Property declaration references ancestor private 'TMainMessenger.FComputer' [Warning] Messenger.pas(96): Property declaration references ancestor private 'TMainMessenger.FUser' [Warning] Messenger.pas(97): Property declaration references ancestor private 'TMainMessenger.FBoxName' [Warning] Messenger.pas(98): Property declaration references ancestor private 'TMainMessenger.FInterval' [Error] Messenger.pas(181): Types of actual and formal var parameters must be identical [Error] Messenger.pas(184): Types of actual and formal var parameters must be identical [Error] Messenger.pas(472): Invalid Typecast [Fatal Error] mailsl.dpk(33): Could not compile used unit 'Messenger.pas' |
könnt ihr mir erklären was Delphi von mir will??
lg el
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
freak4fun
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Di 16.01.07 15:21
Poste mal die Header der Methoden der Properties und die deklaration des Properties selbst.
MfG
freak
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
elundril 
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Di 16.01.07 15:29
meine proceduren sind in dem noch nicht wirklich ausgereift aber der rest ist fix:
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: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 404: 405: 406: 407: 408: 409: 410: 411: 412: 413: 414: 415: 416: 417: 418: 419: 420: 421: 422: 423: 424: 425: 426: 427: 428: 429: 430: 431: 432: 433: 434: 435: 436: 437: 438: 439: 440: 441: 442: 443: 444: 445: 446: 447: 448: 449: 450: 451: 452: 453: 454: 455: 456: 457: 458: 459: 460: 461: 462: 463: 464: 465: 466: 467: 468: 469: 470: 471: 472: 473: 474: 475: 476: 477:
| unit Messenger;
interface
{$LONGSTRINGS ON} uses ExtCtrls, Windows, SysUtils, Classes,Dialogs,Graphics;
type TMainMessenger = Class; TSignalThread = class(TThread) private FMailSlot : TMainMessenger; protected procedure Execute; override; Public Constructor Create(MailSlot : TMainMessenger); end; TTimerThread = class(TThread) private FMailSlot : TMainMessenger; protected procedure Execute; override; Public Constructor Create(MailSlot : TMainMessenger); end;
TNELineArrival = Procedure (Sender : TObject;Origin,Time,Line : string) of Object; TNEMemoArrival = Procedure (Sender : TObject;Origin,Time : string;MsgLines : TStrings) of Object; TNEUserListChange = Procedure (Sender : TObject; UserList : TStrings) of Object; TNEError = Procedure (Sender : TObject;ErrorMsg : string) of object; TNETimer = Procedure (Sender : TObject) of object; TNEImage = Procedure (Sender : TObject; Origin,Time: String; MsgImage: TGraphic) of Object;
TMainMessenger = class(TComponent) private FWaitThread : TSignalThread; FTimerThread : TTimerThread; LocalHandle,RemoteHandle : THandle; ActiveFlag : Boolean; FComputer,FUser : string; Server,FBoxName,LocalPath,RemotePath : string; MaxMsgSize,MsgCount,NextMsgSize,MsgSize : DWORD; MsgType,MsgTime,MsgSender,MsgText : string; OutStrings,InStrings,UserList,MemoLines : TStringList; MsgImage: TGraphic; NewLine : String; FInterval : word; FLineArrival : TNELineArrival; FMemoArrival : TNEMemoArrival; FUserListChange : TNEUserListChange; FError : TNEError; FTimer : TNETimer; FImage : TNEImage; Procedure SendOutStrings(Recipient : string); Procedure SendOutImage(Recipient : string); Procedure SendCommand(Recipient,Command : string); Procedure AddUser(Name : string); Procedure DeleteUser(Name : string); protected Procedure DoLineArrival(Const FMSender,FMTime,FMText : string); virtual; Procedure DoMemoArrival(const FMSender,FMTime : string;MLines : Tstrings); virtual; Procedure DoUserListChange(Const CompList : TStringList); virtual; Procedure DoErrorReport(const Error : string); virtual; procedure DoImageArrival(Const FMSender,FMTime: string; FMImage:TGraphic); virtual; public Constructor Create(AOwner : TComponent); Override; Destructor Destroy; override; Procedure Activate; Procedure DeActivate; Procedure SetName(const NewName : TComponentName); override; Procedure SetBoxName(NewName : string); Procedure SetInterval(time : word); Procedure ReadMessage; Procedure ProcessCommand; Procedure SendLine(Recipient,Text : string); Procedure SendMemo(Recipient : string;Lines : TStrings); Procedure Broadcast(text : string); procedure DoTimer; Property OnNewLine : TNELineArrival read FLineArrival write FLineArrival; Property OnNewMemo : TNEMemoArrival read FMemoArrival write FMemoArrival; Property OnUserListChange : TNEUserListChange Read FUserListChange Write FUserListChange; Property OnError : TNEError read FError write FError; Property OnTimer : TNETimer read FTimer write FTimer; Property OnNewImage : TNEImage read FImage write FImage; published end;
TMessenger = class(TMainMessenger) Published Property Computer : string read FComputer; Property User : string read FUser; Property BoxName : string read FBoxName write SetBoxName; Property Interval : word read FInterval write SetInterval; Property OnNewLine; Property OnNewMemo; Property OnUserListChange; Property OnError; Property OnTimer; Property OnNewImage; end;
procedure Register;
implementation
procedure Register; begin RegisterComponents('3rdParty', [TMessenger]); end;
Constructor TSignalThread.Create(MailSlot : TMainMessenger); Begin Inherited Create(False); Priority := tpNormal; FMailSlot := MailSlot; end;
Procedure TSignalThread.Execute; Begin While Not Terminated do Begin GetMailSlotInfo(FMailSlot.LocalHandle,NIL, FMailSlot.NextMsgSize, @FMailSlot.MsgCount, NIL); If FMailSLot.MsgCount > 0 Then Synchronize(FMailSLot.ReadMessage); Sleep(1); end; end;
Constructor TTimerThread.Create(MailSlot : TMainMessenger); Begin Inherited Create(False); Priority := tpNormal; FMailSlot := MailSlot; end;
Procedure TTimerThread.Execute; Begin While Not Terminated do begin Synchronize(FMailSLot.DoTimer); Sleep(FMailslot.FInterval); end; end;
Procedure TMainMessenger.DoTimer; begin if assigned(FTimer) then FTimer(Self); end;
Constructor TMainMessenger.Create(AOwner : TComponent); var temp : array[0..255] of char; {$IFDEF VER120} len : cardinal; {$ELSE} len : Integer; {$ENDIF} Begin Inherited Create(AOwner); FBoxName := 'SignalBox'; FInterval := 1000; FWaitThread := NIL; FTimerThread := NIL; len := 255; GetComputerName(temp,len); FComputer := StrPas(temp); len := 255; GetUserName(temp,len); FUser := StrPas(temp); OutStrings := TStringList.Create; InStrings := TStringList.Create; UserList := TStringList.Create; MemoLines := TStringList.Create; end;
Destructor TMainMessenger.Destroy; begin if ActiveFlag = true then DeActivate; UserList.Free; OutStrings.Free; InStrings.Free; MemoLines.Free; inherited Destroy; end;
Procedure TMainMessenger.Activate; begin If ActiveFlag = true then begin DoErrorReport('You tried to Activate an active TMessenger component'); exit; end; FWaitThread := TSignalThread.Create(Self); if FWaitThread = nil then begin DoErrorReport('Could not Start TMessenger Timer Thread'); exit; end; FTimerThread := TTimerThread.Create(Self); Server := '.'; LocalPath := '\\' + Server + '\mailslot\' + FBoxName; LocalHandle := CreateMailSlot(PChar(LocalPath),MaxMsgSize,0,nil); if LocalHandle = INVALID_HANDLE_VALUE then begin FWaitThread.Terminate; FWaitThread := nil; FTimerThread.Terminate; FTimerThread := nil; DoErrorReport('Could not Create Mail Slot'); exit; end; SendCommand('*','ONLINE_NOTIFY'); ActiveFlag := true; end;
Procedure TMainMessenger.DeActivate; begin if ActiveFlag = false then begin DoErrorReport('Cannot Deactivate an Inactive TMessenger Component'); exit; end; if FWaitThread <> nil then begin FWaitThread.Terminate; FWaitThread := nil; end; if FTimerThread <> nil then begin FTimerThread.Terminate; FTimerThread := nil; end; CloseHandle(LocalHandle); SendCommand('*','OFFLINE_NOTIFY'); ActiveFlag := False; end;
Procedure TMainMessenger.SetName(const NewName: TComponentName); Begin Inherited SetName(NewName); end;
Procedure TMainMessenger.SetBoxName(NewName : string); begin if FBoxName <> NewName then begin FBoxName := NewName; if ActiveFlag = true then begin DeActivate; Activate; end; end; end;
Procedure TMainMessenger.SetInterval(Time : word); begin if FInterval <> Time then FInterval := Time; end;
Procedure TMainMessenger.ReadMessage; var i : integer; begin Instrings.Clear; SetLength(NewLine,NextMsgSize); ReadFile(LocalHandle,PChar(NewLine)^,NextMsgSize,MsgSize,nil); Instrings.Text := NewLine; FWaitThread.Suspend; if Instrings.Count > 3 then begin MsgType := Instrings[0]; MsgTime := Instrings[1]; MsgSender := Instrings[2]; MsgText := Instrings[3]; end; if Instrings.Count > 5 then begin MemoLines.Clear; for i := 4 to Instrings.Count - 2 do begin MemoLines.Add(Instrings[i]); end; end; if MsgType = 'COMMAND_MSG' then ProcessCommand; if MsgType = 'LINE_MSG' then DoLineArrival(MsgSender,MsgTime,MsgText); if MsgType = 'MEMO_MSG' then DoMemoArrival(MsgSender,MsgTime,MemoLines); Instrings.Clear; FWaitThread.Resume; end;
Procedure TMainMessenger.ProcessCommand; begin if MsgSender = FComputer then exit; if MsgText = 'ONLINE_NOTIFY' then begin AddUser(MsgSender); SendCommand(MsgSender,'ONLINE_RESPONSE'); end; if MsgText = 'ONLINE_RESPONSE' then AddUser(MsgSender); if MsgText = 'OFFLINE_NOTIFY' then DeleteUser(MsgSender); end;
Procedure TMainMessenger.AddUser(Name : string); var i : Integer; j : boolean; begin j := false; if UserList.Count > 0 then begin for i := 0 to UserList.Count - 1 do begin if UserList[i] = Name then j := true; end; end; if j = true then exit; UserList.Add(Name); DoUserListChange(UserList); end;
Procedure TMainMessenger.DeleteUser(Name : string); var i,Num : Integer; j : boolean; begin j := false; Num := 0; if UserList.Count > 0 then begin for i := 0 to UserList.Count - 1 do begin if UserList[i] = Name then begin j := true; Num := i; end; end; end; if j = false then exit; UserList.Delete(Num); DoUserListChange(UserList); end;
Procedure TMainMessenger.SendOutStrings(Recipient : string); var len : DWORD; begin if OutStrings.Count > 0 then begin RemotePath := '\\' + Recipient + '\mailslot\' + FBoxName; RemoteHandle := CreateFile(PChar(RemotePath),GENERIC_WRITE,FILE_SHARE_READ, nil,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0); if RemoteHandle = INVALID_HANDLE_VALUE then begin DoErrorReport('Could not Open a Remote Mail Slot'); exit; end; WriteFile(RemoteHandle,Pointer(Outstrings.text)^,Length(OutStrings.text),len,nil); OutStrings.Clear; CloseHandle(RemoteHandle); end; end;
Procedure TMainMessenger.SendLine(Recipient,Text : string); begin if Recipient = '*' then exit; Outstrings.Add('LINE_MSG'); Outstrings.Add(TimeToStr(Time)); OutStrings.Add(FComputer); OutStrings.Add(text); OutStrings.Add('END_MESSAGE'); SendOutStrings(Recipient); end;
Procedure TMainMessenger.Broadcast(text : string); begin Outstrings.Add('LINE_MSG'); Outstrings.Add(TimeToStr(Time)); OutStrings.Add(FComputer); OutStrings.Add(text); OutStrings.Add('END_MESSAGE'); SendOutStrings('*'); end;
Procedure TMainMessenger.SendMemo(Recipient : string;Lines : TStrings); var i : integer; begin if Recipient = '*' then exit; Outstrings.Add('MEMO_MSG'); Outstrings.Add(TimeToStr(Time)); OutStrings.Add(FComputer); OutStrings.Add('BEGIN_MEMO'); if Lines.Count > 0 then begin for i := 0 to Lines.Count -1 do begin OutStrings.Add(Lines[i]); end; end; OutStrings.Add('END_MESSAGE'); SendOutStrings(Recipient); end;
Procedure TMainMessenger.SendCommand(Recipient,Command : string); begin Outstrings.Add('COMMAND_MSG'); Outstrings.Add(TimeToStr(Time)); OutStrings.Add(FComputer); OutStrings.Add(Command); OutStrings.Add('END_MESSAGE'); SendOutStrings(Recipient); end;
Procedure TMainMessenger.DoLineArrival(const FMSender,FMTime,FMText : string); begin if Assigned(FLineArrival) then FLineArrival(Self,MsgSender,MsgTime,MsgText); end;
Procedure TMainMessenger.DoMemoArrival(const FMSender,FMTime : string;MLines : Tstrings); begin if Assigned(FMemoArrival) then FMemoArrival(Self,MsgSender,MsgTime,MemoLines); end;
Procedure TMainMessenger.DoUserListChange(Const CompList : TStringList); begin If Assigned(FUserListChange) Then FUserListChange(Self,CompList); end;
Procedure TMainMessenger.DoErrorReport(const Error : string); begin If Assigned(FError) Then FError(Self,Error); end;
Procedure TMainMessenger.DoImageArrival(FMSender,FMTime:string;FMImage:TGraphic); begin If Assigned(FImage) then FImage(self,MsgSender,MsgTime,MsgImage); end;
procedure TMainMessenger.SendImage(Recipient:string; SImage:TGraphic); begin if Recipient = '*' then exit; Outstrings.Add('Image_MSG'); Outstrings.Add(TimeToStr(Time)); OutStrings.Add(FComputer); MsgImage.assign(SImage); OutStrings.Add('END_MESSAGE'); SendOutImage(Recipient); end;
Procedure TMainMessenger.SendOutImage(Recipient : string); var len : DWORD; begin if OutStrings.Count > 0 then begin RemotePath := '\\' + Recipient + '\mailslot\' + FBoxName; RemoteHandle := CreateFile(PChar(RemotePath),GENERIC_WRITE,FILE_SHARE_READ, nil,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0); if RemoteHandle = INVALID_HANDLE_VALUE then begin DoErrorReport('Could not Open a Remote Mail Slot'); exit; end; WriteFile(RemoteHandle,Pointer(MsgImage)^,size(MsgImage),len,nil); OutStrings.Clear; MsgImage.Assign(nil); CloseHandle(RemoteHandle); end; end; end. |
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Di 16.01.07 17:44
elundril hat folgendes geschrieben: | ..hat auf dem PC in der schule uns eine Komponente zur verfügung gestellt. Is eine *.Pas ohne Copyrigth hinweis. ich weiß jetzt nicht ob er das programmiert hat aber ist egal.
|
Fragen :
1. Wo kommen die englischen Fehlermeldungen denn her ?
2. Ist D3 in der Schule auch englisch ?
3. Welche Schule/Klasse ? Denn Komponentenentwicklung ist nicht trivial.
"Is eine *.Pas ohne Copyrigth" das deutet nicht gerade auf Eliteschule hin mit unbeschränktem Budget und kurz vor Abitur. 
_________________ Gruß
Hansa
|
|
ManniTwo
      
Beiträge: 46
Win XP SP III, Ubuntu 8.04, Debian 5.0
Delphi 5 Pro; Delphi 2005; C++,C# (VS 2005); Java, Ruby (Eclipse)
|
Verfasst: Di 16.01.07 18:28
elundril hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4:
| [Warning] Messenger.pas(95): Property declaration references ancestor private 'TMainMessenger.FComputer' [Warning] Messenger.pas(96): Property declaration references ancestor private 'TMainMessenger.FUser' [Warning] Messenger.pas(97): Property declaration references ancestor private 'TMainMessenger.FBoxName' [Warning] Messenger.pas(98): Property declaration references ancestor private 'TMainMessenger.FInterval' |
|
Nun ja, du deklarierst in der abgeleiteten TMessenger-Klasse published properties, die sich auf private Felder in TMainMessenger beziehen. Damit die abgeleitete Klasse Zugriff
auf solche Felder hat, sollten sie protected sein und nicht private.
elundril hat folgendes geschrieben: |
Delphi-Quelltext 1: 2:
| [Error] Messenger.pas(181): Types of actual and formal var parameters must be identical [Error] Messenger.pas(184): Types of actual and formal var parameters must be identical |
|
Genau weiß ich's an dieser Stelle auch nicht, aber wahrscheinlich ist array of char hier nicht wirklich der richtige Datentyp für die Windows-API-Funktion oder für StrPas. Hab grad kein Delphi da.
_________________ Wer andern eine Bratwurst brät, der hat ein Bratwurst-Brat-Gerät, oder anders:
Delphi-Quelltext 1:
| if Self.BraetAndernEineBratwurst then Self.HasBratwurstBratGeraet := true; |
|
|
elundril 
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mi 17.01.07 13:20
hansa hat folgendes geschrieben: | elundril hat folgendes geschrieben: | ..hat auf dem PC in der schule uns eine Komponente zur verfügung gestellt. Is eine *.Pas ohne Copyrigth hinweis. ich weiß jetzt nicht ob er das programmiert hat aber ist egal.
|
Fragen :
1. Wo kommen die englischen Fehlermeldungen denn her ?
2. Ist D3 in der Schule auch englisch ?
3. Welche Schule/Klasse ? Denn Komponentenentwicklung ist nicht trivial.
"Is eine *.Pas ohne Copyrigth" das deutet nicht gerade auf Eliteschule hin mit unbeschränktem Budget und kurz vor Abitur.  |
die englischen fehlermeldungen kommen von daher dass ich zuhause die Komponente weiterentwickeln will und zuhause nur D7 Pers. auf englisch habe.
Die D3 in der Schule ist nicht englisch.
AHS/8.Klasse (Ich mach dieses Jahr meinen Abschluss). Denn Komponentenentwicklung ist nicht trivial.
hansa hat folgendes geschrieben: | "Is eine *.Pas ohne Copyrigth" das deutet nicht gerade auf Eliteschule hin mit unbeschränktem Budget und kurz vor Abitur.  |
versteh ich nicht was du damit aussagen willst.
lg el
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 17.01.07 13:55
Es ist schon etwas suspekt, dass ein englischsprachiges Programm angeblich in einer deutschen Schule vewendet wird.  Komponentenentwicklung setzt einiges an Wissen voraus. Und dieser Zweig ist für eine allgemeinbildende Schule eigentlich uninteressant.
Zum Thema :
Du wagst Dich auf Glatteis, sofern die Wörter private, protected usw. nicht kompett klar sind. Wenn ich eine Klasse vererbe, dann müssen/sollten die verwendeten Prozeduren die gleiche Sichtbarkeit haben und die Parameterlisten müssen/sollten übereinstimmen.
Du verwendest protected. D.h. die Methoden/Properties sind den direkten Nachfahren bekannt. Aber sonst keinem. Daher die Fehlermeldungen. Wo wirklich von Delphi "Error" und nicht "Warning" angezeigt wird, also hier :
Zitat: | Types of actual and formal var parameters... |
das liegt an der falschen Parameterliste/Sichtbarkeit. Wird die Methode vererbt, dann kann man nicht einfach hingehen und aus dem Vorfahr, z.B.: Berechne (x : integer); beim Nachfahren ein Berechne (x,y : real); machen. Zumindest, sofern es nicht private ist.
_________________ Gruß
Hansa
|
|
elundril 
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mi 17.01.07 14:07
in der schule haben wir eh ne deutsche version. nur halt D3.^^
Komponentenentwicklung mach ich privat.
Protected usw weiß ich was das tut nur hab ich keine Ahnung von der entwicklung von kompos.  ich hab auch nirgendwo gute tuts gefunden. kennt irgendwer gute kompoentwickeln tuts??
lg el
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
freak4fun
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Mi 17.01.07 14:18
Wie wäre es mit dsdt.info?
MfG
freak
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 17.01.07 14:18
_________________ Gruß
Hansa
|
|
elundril 
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mi 17.01.07 14:23
@freak: sry aber ist nicht gut.
@hansa: sry aber das hab nicht ich verbockt. Der grundstock ist von ?????? k.a! Ich hab nur ein bissal dazugeproggt was aber eh kompletter müll ist.
lg el
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
freak4fun
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Mi 17.01.07 14:26
Warum ist das nicht gut? Du solltest vielleicht erstmal die Grundlagen lernen, bevor du versuchst dich an fremden (nicht gerade einfachen) Komponenten zu versuchen. Hast du vorher schonmal eine Komponente geschrieben? Es bringt dir doch auch nichts, wenn du es jetzt zum laufen bekommst, aber es nicht verstehst.
MfG
freak
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
elundril 
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mi 17.01.07 14:28
verstehen!!!! du sagst es. ich versteh das tut nicht! entweder ich bin zu blöd oder es ist zu unverständlich geschrieben.
lg el
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 17.01.07 14:36
Das Tut bei DSDT ? Das mit dem Panel ? Gut, ist auch eher mittelmäßig, aber als Einstieg gibts kaum was zusammenhängendes. Programmiere das doch mal nach, um überhaupt ein Gefühl für die Zusammenhänge zu kriegen. In 1 Woche ist das sowieso alles auf keinen Fall hinzukriegen.
_________________ Gruß
Hansa
|
|
elundril 
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Do 18.01.07 15:30
das tutorial bei DSDT benutzt ja nur schon geerbte eingenschaften. Aner z.b: was ist wenn ich die Scrollbar mit einer onMouseUp und OnMouseDown versehen will. Da gibt es keine Eigenschaft von den Vorgängern. da muss ich alles selbst proggen und dazu gibt es kein tutorial.
lg el
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 18.01.07 16:14
Da ist nicht viel zu programmieren...
Hier siehst du bei der Frage wie das geht, darunter steht wie die Botschaften richtig heißen.
www.delphi-forum.de/...c1ff83ca7e0565d4f098
Und das ist bei neuen Sachen dann meistens so, dass du da die entsprechenden Botschaften abfangen musst.
|
|
elundril 
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Do 18.01.07 16:18
und wie kann ich dann die beiden messages in einer property vereinen??
lg el
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 18.01.07 16:32
Nun ja, du solltest dir vielleicht mal irgendwelche kleinen Komponenten aus dem Netz ansehen.
Wie es zunächst mal geht ist so:
1. Du deklarierst eine neue Property
Delphi-Quelltext 1:
| property OnMouseDown: TMouseEvent read FOnMouseDown write FOnMouseDown; |
Und das passende "Prozeduraussehen":
Delphi-Quelltext 1: 2: 3:
| type TMouseEvent = procedure(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) of object; |
2. Du reagierst wie eben schon gesehen auf die Botschaft:
Delphi-Quelltext 1:
| procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN; |
Und dort leitest du das an die Property weiter, sofern diese eine Handler-Routine hat (eine zugewiesen, assigned, ist):
Delphi-Quelltext 1: 2: 3:
| inherited; if Assigned(FOnMouseDown) then FOnMouseDown(Self, Button, Shift, X, Y); |
// EDIT: Ach so, das brauchst du auch noch (das ist so definiert, wie die Message von Windows aus aussieht; steht im PSDK):
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| type TWMLButtonDown = packed record Msg: Cardinal; Keys: Longint; case Integer of 0: ( XPos: Smallint; YPos: Smallint); 1: ( Pos: TSmallPoint; Result: Longint); end; |
So sieht das in etwas längerer Form auch im Quelltext der Delphi-Formulare aus... 
|
|
elundril 
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Do 18.01.07 16:38
die geben nur sehr ungern ihren quellcode her.
lg el
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 18.01.07 16:43
elundril hat folgendes geschrieben: | die geben nur sehr ungern ihren quellcode her. |
Bitte???
Du bekommst im Internet doch tausende vom Komponenten inklusive Source...
Nimm alleine die mehreren tausend bei Torry, da sind viele mit Source (FWS - Freeware With Source):
torry.net/pages.php?id=20
|
|
|