23. juni 2000 - 00:31Der 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.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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>).
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.
>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.
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
Synes godt om
Ny brugerNybegynder
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.