Autor Beitrag
Arakis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 344



BeitragVerfasst: Sa 06.07.02 21:04 
Hi user defined image,
weiß jemand von euch wie man zur Laufzeit sagen kann, welche Prozedur aufgerufen werden soll, falls eine definiert wurde.

So wie bei einem ganz normalen Ereignis:
ausblenden Quelltext
1:
Button1.onClick:=MeineOnClick_Proc;					


Nur mit dem Unterschied, dass ich erstmal einen "Ereignis" definieren muss, also, wie erstellt man selbst so ein "onClick"? Das ist nämlich eine Eigenschaft vom Typ TNotifyEvent.

Bis dann
user defined image

_________________
Mit dem Computer löst man Probleme, die man ohne ihn nicht hätte.
Entwickler von SpaceTrek: The New Empire - Siehe Hompage!
FriFra
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 557

Win XP Prof, Win XP Home,Win Server 2003,Win 98SE,Win 2000,Win NT4,Win 3.11,Suse Linux 7.3 Prof,Suse Linux 8.0 Prof
D2k5 Prof, D7 Prof, D5 Standard, D3 Prof, K3 Prof
BeitragVerfasst: Sa 06.07.02 22:42 
Da brauchst Du im Prinzip nur eine neue Procedure anzulegen, welche die gleichen Parameter hat, wie die "original"-Procedure. Diese eigene procedure kannst du nun jederzeit dem betreffenden Ereignis belibiger kompatibler Komponenten zuordnen.
Arakis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 344



BeitragVerfasst: Sa 06.07.02 22:56 
Hmmm, sagt mir jetzt ehrlich gesagt nix. Ich glaub, das Problem ist sogar noch etwas komlizierter. Also: Ich hab eine Komponente gemacht, die einen TWebbrowser enthält, und so mit Hilfe des DesignModus des IEs eine HTMLEdit-Kompo darstellt. So mit setBold, setItalic per per Prozedurauffuf und so. Jetzt hab ich eine zweite Komponente, die nur die Buttons enthält, d.h man kann dann halt die HTMLEdit-Kompo so bequem zu bedienen, ohne jedes mal einen Haufen Buttons auf dem Formular zu erstellen. Die HTMLEdit-Komponente soll jetzt ein Ereignis "onUpdate" haben, so dass die Button-Komponente dieses abfängt und die Buttons entsprechen aktiviert oder deaktiviert. Nur wie bekomme ich das hin? Ich hab mir schon überlegt, ob ich denn nicht einfach nur ein Zeiger übergebe, aber dazu müssen sich Units im Interface-Teil gegeseitig einbinden, was aber zu einem "Überkreuzender Bezug zweier Units auf 'HTMLEditControl'" führt.

Wer gut, wenn jemand ein kleines Beispiel oder so hätte.

Bis dann
user defined image

_________________
Mit dem Computer löst man Probleme, die man ohne ihn nicht hätte.
Entwickler von SpaceTrek: The New Empire - Siehe Hompage!
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: So 07.07.02 00:42 
Hallo,

ich erkläre das jetzt anhand einer HitroySerchKombo die ich einmal erstellt habe. In anbetracht der fortgeschritenen Zeit habe ich keine Lust mehr das zu übertragen aber das solltest du auch hinbekommen ;).

Diese ComboBoc, generiert ein Ereigniss OnAddToHistory welches immer dann ausgelöst wird wenn ein neuer Eintrag der History List hinzugefügt wird.

Zuerst, muss ein Prototyp für die Ereignisbehandlungsroutine erstellt werden. In meinem Fall sieht das so aus:

ausblenden Quelltext
1:
TOnAddedToHistory = procedure (VAR Text : STRING; VAR AddIt : BOOLEAN) OF OBJECT;					


Dieses geschieht völlig uabhängig von dem Objekt in dem es verwendung findet über der Dektaration dieses Objektes im Type abschnitt.

Danach deklarierts du unter Protected (oder Private) eine Variable von diesem Prototypen:
ausblenden Quelltext
1:
FOnAddToHistory: TOnAddedToHistory;					


Als dritten Schritt richtest du ein Property unter published ein:
ausblenden Quelltext
1:
property OnAddToHistory : TOnAddedToHistory read FOnAddToHistory write SetOnAddToHistory;					


Wobei du natülich wie bei jedem Property lesende wie schreibende Behandlunsroutinen definieren kannst, die im einfachsten Fall so aussehen:
ausblenden Quelltext
1:
2:
3:
4:
5:
procedure ToHistorySearchCombo.SetOnAddToHistory(
  const Value: TOnAddedToHistory);
begin
  FOnAddToHistory := Value;
end;


Zu guter letzt, ist es natürlich noch nötig, dass du das Ereignis auslöst, wenn es denn eine Behandlungsroutine zugeordnet hat. Du musst also an den entsprechenden Stellen in deinem (komponenten) Code noch etwas äquialentes zu dem hier einfügen:
ausblenden Quelltext
1:
2:
IF Assigned(OnAddToHistory) THEN BEGIN
    OnAddToHistory(ToListText, AddIt);


So, ich hoffe das Prinzieb ist klar geworden und ich konnte ein wenig helfen.

Gruß
Klabautermann