Avatar billede stone Forsker
23. juni 2000 - 00:31 Der er 4 kommentarer og
2 løsninger

listbox og understregning

1.
hvordan får man den afmærkede tekst i en listbox,til at blive vist i en edit?
2.
I en onmousemove vil jeg gerne have teksten understreget i en label.


Avatar billede retep Nybegynder
23. juni 2000 - 00:46 #1
1:

procedure TForm1.ListBox1Click(Sender: TObject);
begin
edit1.text := listbox1.Items.Strings[ListBox1.ItemIndex];
end;

Mvh
Retep
Avatar billede stone Forsker
23. juni 2000 - 01:07 #2
ok retep
men hvad med spørgsmål 2.?
Avatar billede pellelil Nybegynder
23. juni 2000 - 09:04 #3
Selve undestregningen er nem. Du understreger med "Label1.Font.Style := [fsUnderline];" og fjerner den igen med "Label1.Font.Style := [];".

Problemet er at du i "onmousemove" kun kan se hvornår musen bevæges over din label (altså hvornår du skal understrege), men du ser IKKE hvornår musen bevæges væk fra din label (altså hvornår du skal fjerne understregningen).

Den beste måde ville nok være at nedarve fra TCustomLabel også lave en ny label med denne egenskab.

Men her har du en quick-and-dirty løsning: du kan lade formen's (eller hvor du har indsat din label) "onmousemove" nulstille dine labels understregninger (sætte dem alle til: "style := []").

Det virker, men "belaster systemet unødigt" da den kode vil blive udført hvergang du flytter musen et halvt k.... ... (jeg mener flytter musen en smule <G>).
Avatar billede speedy Nybegynder
23. juni 2000 - 11:33 #4
Indsæt følgende i under public (eller private) så det ser sådan ud :

public
  procedure WndProc(var Message : TMessage);


og indsæt følgende under {$R *.DFM} så det kommer til at se sådan ud :


implementation

{$R *.DFM}

procedure TForm1.WndProc(var Message : TMessage);
begin
if Message.LParam = Longint(Label1) then
  begin
  if (Message.Msg = CM_MOUSELEAVE) then
    Label1.Font.Style := Label1.Font.Style - [fsUnderLine];
  if (Message.Msg = CM_MOUSEENTER) then
    Label1.Font.Style := Label1.Font.Style + [fsUnderLine];
  end;
inherited WndProc(Message);
end;


Så kan du jo selv lave begin og end på if'erne hvis der skal ske mere end understregning.

Håber du kan bruge det ;-)

/SpEeDy
Avatar billede pellelil Nybegynder
23. juni 2000 - 11:39 #5
>Speedy
Der er "mindre overhead", men hvad hvis der er flere labels der skal have denne under underline on/off ?.

Hvis du istedet lader hver label's OnMouseMove sætte underline, og så bruger din forms WndProc (som du viser) fjerne underline, så kan du styre flere labels og du har ikke længer et overhead.
Avatar billede stone Forsker
23. juni 2000 - 18:56 #6
speedy's eksempel har jeg brugt følgende.
har indsat under label1 onmousemove:
Label1.Font.Style := Label1.Font.Style + [fsUnderLine];
form1 onmousemove:
Label1.Font.Style := Label1.Font.Style -[fsUnderLine];

det virker fint.
takker
stone
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester