/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
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

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste