Autor Beitrag
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
[Warning] Messenger.pas(95): Property declaration references ancestor private 'TMainMessenger.FComputer'      //-> hab ich keine ahnung was er will
[Warning] Messenger.pas(96): Property declaration references ancestor private 'TMainMessenger.FUser'      //->hab ich auch keine ahnung was er will
[Warning] Messenger.pas(97): Property declaration references ancestor private 'TMainMessenger.FBoxName'      //->hab ich auch keine ahnung was er will
[Warning] Messenger.pas(98): Property declaration references ancestor private 'TMainMessenger.FInterval'      //->hab ich auch keine ahnung was er will
[Error] Messenger.pas(181): Types of actual and formal var parameters must be identical      //->hab ich auch keine ahnung was er will
[Error] Messenger.pas(184): Types of actual and formal var parameters must be identical      //->hab ich auch keine ahnung was er will
[Error] Messenger.pas(472): Invalid Typecast   //-> weis ich was er will aber nicht wie mans umsetzt
[Fatal Error] mailsl.dpk(33): Could not compile used unit 'Messenger.pas'   //->schon klar


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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 16.01.07 15:29 
meine proceduren sind in dem noch nicht wirklich ausgereift aber der rest ist fix:

ausblenden volle Höhe 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:
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}  // Equal {$H+}

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 : stringof 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 : stringof 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

//---------- Component Registration ------------------------------------------

procedure Register;
begin
  RegisterComponents('3rdParty', [TMessenger]);
end;



//---------- Thread Procedures -----------------------------------------------

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;


//----------- Signaler StartUp/ShutDown -----------------------------------------

Constructor TMainMessenger.Create(AOwner : TComponent);
var
 temp : array[0..255of 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;


//-------------- Set Property Procedures --------------------------------------

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;


//------------- Message Retrieval Procedures ----------------------------------

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;

//------------- Message Sending Procedures ------------------------------------

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;

//----------- Event Handler Procedures ---------------------------------------

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;

//----------- Send Data Procedures ---------------------------------------
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;

//----------- Get Data Procedures ---------------------------------------
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Di 16.01.07 17:44 
user profile iconelundril 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. 8)

_________________
Gruß
Hansa
ManniTwo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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)
BeitragVerfasst: Di 16.01.07 18:28 
user profile iconelundril hat folgendes geschrieben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
[Warning] Messenger.pas(95): Property declaration references ancestor private 'TMainMessenger.FComputer'      //-> hab ich keine ahnung was er will
[Warning] Messenger.pas(96): Property declaration references ancestor private 'TMainMessenger.FUser'      //->hab ich auch keine ahnung was er will
[Warning] Messenger.pas(97): Property declaration references ancestor private 'TMainMessenger.FBoxName'      //->hab ich auch keine ahnung was er will
[Warning] Messenger.pas(98): Property declaration references ancestor private 'TMainMessenger.FInterval'      //->hab ich auch keine ahnung was er will



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.

user profile iconelundril hat folgendes geschrieben:

ausblenden Delphi-Quelltext
1:
2:
[Error] Messenger.pas(181): Types of actual and formal var parameters must be identical      //->hab ich auch keine ahnung was er will
[Error] Messenger.pas(184): Types of actual and formal var parameters must be identical      //->hab ich auch keine ahnung was er will


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:
ausblenden Delphi-Quelltext
1:
if Self.BraetAndernEineBratwurst then Self.HasBratwurstBratGeraet := true;					
elundril Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 17.01.07 13:20 
user profile iconhansa hat folgendes geschrieben:
user profile iconelundril 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. 8)


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.

user profile iconhansa hat folgendes geschrieben:
"Is eine *.Pas ohne Copyrigth" das deutet nicht gerade auf Eliteschule hin mit unbeschränktem Budget und kurz vor Abitur. 8)


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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mi 17.01.07 13:55 
Es ist schon etwas suspekt, dass ein englischsprachiges Programm angeblich in einer deutschen Schule vewendet wird. 8) 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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. :oops: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mi 17.01.07 14:18 
Was ist denn das überhaupt :

user profile iconelundril hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
type
 TMainMessenger = Class;
 TSignalThread = class(TThread)
  private
    FMailSlot : TMainMessenger;
  protected
    procedure Execute; override;
  Public
    Constructor Create(MailSlot : TMainMessenger);
  end;

Wie soll das gehen ? :shock: Du überschreibst per override eine protected Methode eines Vorgängers, die der gar nicht kennt. 8)

_________________
Gruß
Hansa
elundril Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: 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. :gruebel:

MfG
freak

_________________
"Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
elundril Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 18.01.07 16:14 
Da ist nicht viel zu programmieren... :zwinker:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
    property OnMouseDown: TMouseEvent read FOnMouseDown write FOnMouseDown;					

Und das passende "Prozeduraussehen":
ausblenden 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:
ausblenden 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):
ausblenden 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):
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 18.01.07 16:43 
user profile iconelundril hat folgendes geschrieben:
die geben nur sehr ungern ihren quellcode her.

Bitte???
Du bekommst im Internet doch tausende vom Komponenten inklusive Source... :rofl:
Nimm alleine die mehreren tausend bei Torry, da sind viele mit Source (FWS - Freeware With Source):
torry.net/pages.php?id=20