User CPFAQMembers ListCalendarToday's PostsSearch





Prova Gratis 30gg l'hosting fooweb
Reply
 
LinkBack Thread Tools Display Modes
 
Old 13-10-08, 10:59 AM
Klaus Dewald
 
Posts: n/a
Default OnMouseEnter im TEdit

Hallo NG,
ich möchte in einem TEdit beim Drüberfahren mit der Maus unter
bestimmten Bedingungen ein Hint anzeigen. Dazu sind wohl die Ereignisse
OnMouseEnter und OnMouseLeave verfügbar. Leider funktionieren die bei
mir nicht. Es passiert einfach nichts. Scheinbar werden die Ereignisse
auch nicht gefeurt, da ein Breakpoint im Ereignis nicht angesprungen wird.
In der OH steht: "Verwenden Sie die Ereignisbehandlungsroutine
OnMouseEnter, um eine spezielle Weiterverarbeitung eines Steuerelements
zu implementieren, wenn das überordnete Formular auf oberster Ebene
nicht aktiv ist."

Was bedeutet der letzte Teil des Satzes "... auf oberster Ebene nicht
aktiv ist."? Meine Edits sitzen in einem Panel welches wiederum auf dem
Hauptformular sitzt.

Komischerweise funktioniert das bei einem TStaticText einwandfrei.

Irgend ein Tip was ich falsch mache?

Vielen Dank im voraus.
Klaus Dewald
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
 
Old 13-10-08, 11:51 AM
Hans-Peter Diettrich
 
Posts: n/a
Default Re: OnMouseEnter im TEdit

Klaus Dewald schrieb:

> ich möchte in einem TEdit beim Drüberfahren mit der Maus unter
> bestimmten Bedingungen ein Hint anzeigen. Dazu sind wohl die Ereignisse
> OnMouseEnter und OnMouseLeave verfügbar.


Nimm OnMouseMove.

DoDi
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Try the foonews Toolbar!!!
 
Old 13-10-08, 02:03 PM
Klaus Dewald
 
Posts: n/a
Default Re: OnMouseEnter im TEdit

Hans-Peter Diettrich schrieb:
>
> Nimm OnMouseMove.
>

Hallo
zunächst einmal Danke für den Hinweis. Im Prinzip funktioniert das
Event. Es wird zumindest gefeuert. Leider jedoch bei jeder noch so
kleinen Mausbewegung. Dies hat zur Folge das der Hint nicht angezeigt
wird, da er immer wieder durch das Event überschrieben wird. Ich habe
das so gemacht:

procedure TMainForm.suiEdit135MouseMove(Sender: TObject; Shift:
TShiftState; X,
Y: Integer);
begin
If (X > 0) and (X < suiEdit135.Width) then
If (Y > 0) and (Y < suiEdit135.Height) then
begin
If Length(Trim(suiEdit135.Text)) > 40 then
begin
If Edit135ToolTip = Nil then
Edit135ToolTip := TToolTip.Create(Self);
Edit135ToolTip.Titel := '';
Edit135ToolTip.Text := Trim(suiEdit135.Text);
Edit135ToolTip.ShowBalloonTip;
Application.ProcessMessages;
end;
end
Else
If Edit135ToolTip <> Nil then
Edit135ToolTip.Free;
end;

Außerdem wird beim Verlassen und nochmaligem Eintritt eine "Ungültige
Zeigeroperation" ausgelöst. Es gibt leider kein anderes Ereignis womit
ich das Free machen könnte, oder?

Nochmals vielen Dank.
Klaus Dewald
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
 
Old 13-10-08, 02:23 PM
Alfred Gemsa
 
Posts: n/a
Default Re: OnMouseEnter im TEdit

Klaus Dewald schrieb:

> begin
> If (X > 0) and (X < suiEdit135.Width) then
> If (Y > 0) and (Y < suiEdit135.Height) then
> begin
> If Length(Trim(suiEdit135.Text)) > 40 then
> begin
> If Edit135ToolTip = Nil then
> Edit135ToolTip := TToolTip.Create(Self);
> Edit135ToolTip.Titel := '';
> Edit135ToolTip.Text := Trim(suiEdit135.Text);
> Edit135ToolTip.ShowBalloonTip;
> Application.ProcessMessages;
> end;
> end
> Else
> If Edit135ToolTip <> Nil then
> Edit135ToolTip.Free;
> end;


Ohne genau zu schauen vermute ich, dass Du den Compiler mit den
verschachtelten If's und dem Else überforderst.

Worauf soll sich das Else beziehen: Auf das erste oder das zweite If?

In solchen Fällen nehme ich *immer* begin-End-Blöcke, damit alles klar ist.

Alfred
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
 
Old 13-10-08, 02:35 PM
Martin Hentrich
 
Posts: n/a
Default Re: OnMouseEnter im TEdit

On Mon, 13 Oct 2008 14:03:38 +0200, Klaus Dewald
<Klaus.Dewald@EfASoftware.de> wrote:

Das ist ein Monstrum:

>procedure TMainForm.suiEdit135MouseMove(Sender: TObject; Shift:
>TShiftState; X,
> Y: Integer);
>begin
> If (X > 0) and (X < suiEdit135.Width) then
> If (Y > 0) and (Y < suiEdit135.Height) then
> begin
> If Length(Trim(suiEdit135.Text)) > 40 then
> begin
> If Edit135ToolTip = Nil then
> Edit135ToolTip := TToolTip.Create(Self);
> Edit135ToolTip.Titel := '';
> Edit135ToolTip.Text := Trim(suiEdit135.Text);
> Edit135ToolTip.ShowBalloonTip;
> Application.ProcessMessages;
> end;
> end
> Else
> If Edit135ToolTip <> Nil then
> Edit135ToolTip.Free;
>end;


Mit einem Hint ginge es einfach so:

Du füllst bedingungsgemäß:
Edit135.hint := "Ich bin die Meldung!";
Und du setzt in den Eigenschaften:
Edit135.showhint := true;
In MouseMove muß dann gar nicht stehn...

Was sind Deine "besonderen Bedingungen"? MouseMove kümmert sich von
ganz allein um die Kontrolle des Mauszeigers bezogen auf die Größe des
TEdit, das mußt du nicht implementieren - oder welchen Zweck hat dein
If..then...?

Martin
--
Eine als Irrtum anerkannte Meinung ohne falsche Scham aufzugeben,
das ist vielleicht die wunderbarste Kraftersparnis, die unserem
Geist gegönnt ist; und zugleich die, von der wir am seltensten
Gebrauch machen. [Arthur Schnitzler]
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
 
Old 13-10-08, 10:43 PM
Burkhard Schneider
 
Posts: n/a
Default Re: OnMouseEnter im TEdit

"Klaus Dewald" schrieb:

> zunächst einmal Danke für den Hinweis. Im Prinzip funktioniert das Event.
> Es wird zumindest gefeuert. Leider jedoch bei jeder noch so kleinen
> Mausbewegung. Dies hat zur Folge das der Hint nicht angezeigt wird, da er
> immer wieder durch das Event überschrieben wird. Ich habe das so gemacht:


OnMouseMove ist schon der richtige Event für so etwas. Du darfst den
TToolTip nur nicht im OnMouseMove erzeugen, sondern in OnFormCreate. Dann
kannst du ihn auch im OnFormDestroy wieder sauber entfernen.

Verlagere das
Edit135ToolTip := TToolTip.Create(Self);
ins OnFormCreate
(oder muss dass TToolTip.Create(suiEdit135) heißen?)

> If (X > 0) and (X < suiEdit135.Width) then
> If (Y > 0) and (Y < suiEdit135.Height) then


Wozu das? MouseMove wird eh nur gefeuert, wenn sich die Maus über dem
Editfeld befindet.

Dein OnMouseMove reduziert sich dann zu:

procedure TMainForm.suiEdit135MouseMove(Sender: TObject; Shift:
TShiftState; X,
Y: Integer);
begin
If Length(Trim(suiEdit135.Text)) > 40 then
begin
Edit135ToolTip.Text := Trim(suiEdit135.Text);
Edit135ToolTip.ShowBalloonTip;
end;
end;

Und nicht vergessen in OnFormDestroy:
Edit135ToolTip.Free;

Getestet mit deiner Klasse TToolTip aus
http://newsgroups.derkeiler.com/Arch.../msg00048.html
(Was Google so alles findet...)

Gruß
Burkhard Schneider




Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
 
Old 13-10-08, 10:58 PM
Burkhard Schneider
 
Posts: n/a
Default Re: OnMouseEnter im TEdit

"Alfred Gemsa" schrieb:

> Klaus Dewald schrieb:
>
>> begin
>> If (X > 0) and (X < suiEdit135.Width) then
>> If (Y > 0) and (Y < suiEdit135.Height) then
>> begin
>> If Length(Trim(suiEdit135.Text)) > 40 then
>> begin
>> If Edit135ToolTip = Nil then
>> Edit135ToolTip := TToolTip.Create(Self);
>> Edit135ToolTip.Titel := '';
>> Edit135ToolTip.Text := Trim(suiEdit135.Text);
>> Edit135ToolTip.ShowBalloonTip;
>> Application.ProcessMessages;
>> end;
>> end
>> Else
>> If Edit135ToolTip <> Nil then
>> Edit135ToolTip.Free;
>> end;

>
> Ohne genau zu schauen vermute ich, dass Du den Compiler mit den
> verschachtelten If's und dem Else überforderst.
>
> Worauf soll sich das Else beziehen: Auf das erste oder das zweite If?


Der Compiler ist damit sicher nicht überfordert, höchstens derjenige, der
vor dem Bildschirm sitzt. Der Compiler hält sich an klare Regeln und die
besagen in diesem Fall, dass das Else zum ersten If gehört. Ich hätte
allerdings auch die ersten beiden Ifs mit einem "and" zu einem Statement
zusammengefasst, abgesehen davon, dass sie im konkreten Fall ganz
überflüssig sind.

Gruß
Burkhard Schneider


Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
 
Old 14-10-08, 10:27 AM
Alfred Gemsa
 
Posts: n/a
Default Re: OnMouseEnter im TEdit

Burkhard Schneider schrieb:

> Der Compiler ist damit sicher nicht überfordert, höchstens derjenige, der
> vor dem Bildschirm sitzt...


Du hast latürnich recht. Insofern bitte ich den Compiler wegen der
ungerechtfertigten Unterstellung um Entschuldigung :-)

Alfred
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
 
Old 14-10-08, 10:55 AM
Klaus Dewald
 
Posts: n/a
Default Re: OnMouseEnter im TEdit

Burkhard Schneider schrieb:
> Getestet mit deiner Klasse TToolTip aus
> http://newsgroups.derkeiler.com/Arch.../msg00048.html
> (Was Google so alles findet...)

Ja, Google ist schon ein tolles Ding. Die Seite hatte ich noch nie
gesehen. Ich poste normalerweise über btx.dtag.de. Aber die Welt ist ja
bekanntlich klein.

Vielen Dank auch für Deinen Hinweis. Ist ja im Prinzip logisch. Manchmal
sieht man vor lauter Bäumen den dazu gehörigen Wald nicht mehr.

Danke nochmal.
Viele Grüße
Klaus Dewald
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
 
Old 14-10-08, 01:59 PM
Georg Hübner
 
Posts: n/a
Default Re: OnMouseEnter im TEdit

Klaus Dewald schrieb:

> procedure TMainForm.suiEdit135MouseMove(Sender: TObject; Shift:
> TShiftState; X,
> Y: Integer);
> begin
> If (X > 0) and (X < suiEdit135.Width) then
> If (Y > 0) and (Y < suiEdit135.Height) then
> begin
> If Length(Trim(suiEdit135.Text)) > 40 then
> begin
> If Edit135ToolTip = Nil then
> Edit135ToolTip := TToolTip.Create(Self);
> Edit135ToolTip.Titel := '';
> Edit135ToolTip.Text := Trim(suiEdit135.Text);
> Edit135ToolTip.ShowBalloonTip;
> Application.ProcessMessages;
> end;
> end
> Else
> If Edit135ToolTip <> Nil then
> Edit135ToolTip.Free;
> end;


Hallo Klaus,

mein Vorschlag wäre stattdessen das OnChange-Ereignis
zu verwenden:

procedure TMainForm.suiEdit135Change(Sender: TObject);
begin
If Length(Trim(suiEdit135.Text)) > 40 then
begin
suiEdit135.Hint:='Dies ist ein Hinweis!';
suiEdit135.ShowHint:=True;
end else
begin
suiEdit135.Hint:='';
suiEdit135.ShowHint:=False;
end;
end;

Wenn ich die Problemstellung richtig verstanden
habe, funktioniert die Sache dann auch so wie gewünscht. ;-)

MfG


Georg Hübner
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



 RSS Feeds - Archive - Top




All times are GMT +1. The time now is 07:50 PM. Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.1.0 Forum style by ForumMonkeys.com.