|
| Flimmer Fra : Henning Madsen |
Dato : 30-05-04 20:43 |
|
Er der en som kan fortælle mig hvorfor teksten der udlæses til Memo blafrer,
udlæsningen af billedet er tilsyneladende ok. Det kan ikke ses at det
blinker, men det er måske fordi det er et billed ?
I hovedtrækkene går programmet ud på at når der peget på en cirkel, skal et
tilhørende billede hentes ligeledes
en tilhørende tekst.
Har prøvet alt mugligt, men åbenbart ikke det rigtige???
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
Var
Plads : TIniFile;
CirkelX : Integer; // Cirklens midtpunkt.
CirkelY : Integer; // Cirklens midtpunkt.
R : Integer; // Cirklens radius.
Antal : Integer; // Antal cirkler (totalt).
T : Integer; // Tæller.
Begin
R := 4;
Plads := TIniFile.Create(ExtractFilePath(ParamStr(0))+'\'+ 'Plads' +
'.Ini');
Antal := Plads.ReadInteger('Plads','Antal',0);
For T := 1 To Antal Do
Begin
CirkelX := Poster[T].CirkelX;
CirkelY := Poster[T].CirkelY;
If sqrt(sqr(X-CirkelX)+sqr(Y-CirkelY)) <= R then //Hvis musekørseren er i
en cirkel.
Begin
Cursor := crCross; // Cursor
bliver til et kors.
CirkelNr := T; //
Nummeret på den cirkel der peges på. CirkelNr gemmes Globalt.
Edit1.Text := Poster[CirkelNr].CirkelNavn; // Cirkel navnet hentes i
Array og skrives i Edit2.
Edit1.Repaint;
Image2.Picture.LoadFromFile('D:\Egne DELPHI Programmer\Plante
Placering\Navne\'+Poster[CirkelNr].CirkelNavn+'.JPG');
Image2.Repaint;
Memo.Lines.LoadFromFile('D:\Egne DELPHI Programmer\Plante
Placering\Navne\'+Poster[CirkelNr].CirkelNavn+'.Txt');
Cursor := crCross; // Cursor bliver til et
kors.
Break;
End
Else Begin
Cursor := crDefault;
End;
End;
Plads.Free;
End;
Er der en der kan give mig en forklaring og eventuelt hvad der skal rettes.
På forhånd tak.
Mvh
Henning.
| |
Harald (02-06-2004)
| Kommentar Fra : Harald |
Dato : 02-06-04 10:42 |
|
"Henning Madsen" <HKM@madsen.tdcadsl.dk> skrev i en meddelelse
news:40ba393f$0$519$edfadb0f@dread14.news.tele.dk...
> Er der en som kan fortælle mig hvorfor teksten der udlæses til Memo
blafrer,
> udlæsningen af billedet er tilsyneladende ok. Det kan ikke ses at det
> blinker, men det er måske fordi det er et billed ?
> I hovedtrækkene går programmet ud på at når der peget på en cirkel, skal
et
> tilhørende billede hentes ligeledes
> en tilhørende tekst.
> Har prøvet alt mugligt, men åbenbart ikke det rigtige???
Prøv at undgå at læse en ny tekst ind i din memo medmindre teksten har
ændret sig, dvs. et andet filnavn.
/HK
| |
Harald (02-06-2004)
| Kommentar Fra : Harald |
Dato : 02-06-04 10:58 |
|
"Harald" <news10@-REMOVE-THIS-kroning.dk> skrev i en meddelelse
news:40bda0e3$0$467$edfadb0f@dread14.news.tele.dk...
> "Henning Madsen" <HKM@madsen.tdcadsl.dk> skrev i en meddelelse
> news:40ba393f$0$519$edfadb0f@dread14.news.tele.dk...
> > Er der en som kan fortælle mig hvorfor teksten der udlæses til Memo
> blafrer,
> > udlæsningen af billedet er tilsyneladende ok. Det kan ikke ses at det
> > blinker, men det er måske fordi det er et billed ?
> > I hovedtrækkene går programmet ud på at når der peget på en cirkel, skal
> et
> > tilhørende billede hentes ligeledes
> > en tilhørende tekst.
> > Har prøvet alt mugligt, men åbenbart ikke det rigtige???
>
> Prøv at undgå at læse en ny tekst ind i din memo medmindre teksten har
> ændret sig, dvs. et andet filnavn.
En ting mere, det ser ud til at en Memo.Lines.LoadFromFile tricker en ny
OnMouseMove dvs. at når din mus befinder sig i din Image så vil din
Image1MouseMove blive kaldt kontinuelig og derfor flimre memoen.
Løsningen kunne være at sætte din OnMouseMove=Nil lige før du kalder
LoadFromFile og så lige efter indsætte en Application.ProcessMessages og
derefter sætte din OnMouseMove igen.
/HK
| |
Nicolai Hansen (07-06-2004)
| Kommentar Fra : Nicolai Hansen |
Dato : 07-06-04 10:42 |
|
Hmm når jeg tænker over det mener jeg at TMemo er en af de komponenter
hvor der opdateres efter hver eneste linie er indlæst.
Har du eventuelt prøvet at sætte en "Memo.Visible:=false;" ind før du
loader, og selvfølgelig "Memo.Visible:=true" på linien efter?
| |
Christian Iversen (07-06-2004)
| Kommentar Fra : Christian Iversen |
Dato : 07-06-04 13:23 |
|
Nicolai Hansen wrote:
> Hmm når jeg tænker over det mener jeg at TMemo er en af de komponenter
> hvor der opdateres efter hver eneste linie er indlæst.
> Har du eventuelt prøvet at sætte en "Memo.Visible:=false;" ind før du
> loader, og selvfølgelig "Memo.Visible:=true" på linien efter?
For at være ærlig, så er det en Dårlig Løsning (Tm). Du får nu flimmer af en
anden grund, da baggrunden bag en TMemo typisk er grå. Dermed skal der
tegnes Grå baggrund, og derefter hvid TMemo ovenpå når indlæsningen er
færdig. Den korrekte løsning er at lade komponenten vide at du foretager en
blokopdatering:
With Memo.Lines Do
Begin
BeginUpdate;
Add('123');
Add('xyz');
EndUpdate;
End;
Du vil nu kun se én gentegning (det sker ved EndUpdate).
--
M.V.H
Christian Iversen
| |
David Konrad (08-06-2004)
| Kommentar Fra : David Konrad |
Dato : 08-06-04 13:46 |
|
"Christian Iversen" <chrivers@iversen-net.dk> wrote in message
news:ca1mmo$lc8$1@news.cybercity.dk...
> Nicolai Hansen wrote:
>
> > Hmm når jeg tænker over det mener jeg at TMemo er en af de komponenter
> > hvor der opdateres efter hver eneste linie er indlæst.
> > Har du eventuelt prøvet at sætte en "Memo.Visible:=false;" ind før du
> > loader, og selvfølgelig "Memo.Visible:=true" på linien efter?
>
> For at være ærlig, så er det en Dårlig Løsning (Tm). Du får nu flimmer af
en
> anden grund, da baggrunden bag en TMemo typisk er grå. Dermed skal der
> tegnes Grå baggrund, og derefter hvid TMemo ovenpå når indlæsningen er
> færdig. Den korrekte løsning er at lade komponenten vide at du foretager
en
> blokopdatering:
>
> With Memo.Lines Do
> Begin
> BeginUpdate;
> Add('123');
> Add('xyz');
> EndUpdate;
> End;
>
> Du vil nu kun se én gentegning (det sker ved EndUpdate).
Eller memo.DoubleBuffered:=true;
| |
Christian Iversen (08-06-2004)
| Kommentar Fra : Christian Iversen |
Dato : 08-06-04 20:53 |
|
David Konrad wrote:
> "Christian Iversen" <chrivers@iversen-net.dk> wrote in message
> news:ca1mmo$lc8$1@news.cybercity.dk...
>> Nicolai Hansen wrote:
>>
>> > Hmm når jeg tænker over det mener jeg at TMemo er en af de komponenter
>> > hvor der opdateres efter hver eneste linie er indlæst.
>> > Har du eventuelt prøvet at sætte en "Memo.Visible:=false;" ind før du
>> > loader, og selvfølgelig "Memo.Visible:=true" på linien efter?
>>
>> For at være ærlig, så er det en Dårlig Løsning (Tm). Du får nu flimmer af
> en
>> anden grund, da baggrunden bag en TMemo typisk er grå. Dermed skal der
>> tegnes Grå baggrund, og derefter hvid TMemo ovenpå når indlæsningen er
>> færdig. Den korrekte løsning er at lade komponenten vide at du foretager
> en
>> blokopdatering:
>>
>> With Memo.Lines Do
>> Begin
>> BeginUpdate;
>> Add('123');
>> Add('xyz');
>> EndUpdate;
>> End;
>>
>> Du vil nu kun se én gentegning (det sker ved EndUpdate).
>
> Eller memo.DoubleBuffered:=true;
Det virker, men det er ikke smart. DoubleBuffering går ud på at tegne hele
komponenten til en offscreen-buffer, for derefter at kopiere det hele ind
på én gang. Det er både dyrt i hukommelse og tid. BeginUpdate/EndUpdate
sikrer også mod at OnChange-handleren køres N gange for N indsættelser.
Det allerbedste resultat opnås ved at bruge begge metoder. Men vær lige
sikker på at DoubleBuffered er nødvendig :)
--
M.V.H
Christian Iversen
| |
|
|