AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Item in DrawItem ändern?

Ein Thema von Mattze · begonnen am 21. Jun 2014 · letzter Beitrag vom 23. Jun 2014
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#21

AW: Item in DrawItem ändern?

  Alt 21. Jun 2014, 19:54
Und aus diesem Grund ist das in meinen Augen inakzeptabel.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#22

AW: Item in DrawItem ändern?

  Alt 21. Jun 2014, 19:58
In meinen Augen auch, aber das könnte auch daran liegen, dass ich kein so Genie wie Popov oder Mattze bin, sondern nur ein durchschnittlicher Programmierer, der alles an den Stellen macht, die dafür vorgesehen sind!
Markus Kinzler
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#23

AW: Item in DrawItem ändern?

  Alt 21. Jun 2014, 20:57
Hallo Marcus,

ich halte mich nicht für ein Genie oder solltest Du zynischherweise das Gegenteil gemeint haben?
Gab es da nicht mal sowas wie Nettikette auf deren Einhaltung ein Moderator zu achten hat?

Entschuldige, aber ich dachte tatsächlich, man könne in diesem Forum Fragen stellen über Dinge, die man nicht weiß und die einem aufgefallen sind. Und dass das ohne Beleidigung möglich ist.

Wenn Dich etwas stört, dann antworte doch einfach nicht!

Mattze
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#24

AW: Item in DrawItem ändern?

  Alt 21. Jun 2014, 21:12
Naja, bei völlig sinnfreien Anliegen wie dem deinen kann es schon mal geschehen, daß man was entgegnet, das den Anfänger verletzen könnte. Anders ausgedrückt: Bevor du was unterstellst, solltest du erst einmal zu klären suchen, ob dein Winken mit der Netiquette nicht vielmehr auf Einbildung beruht ...

Wenn Dich etwas stört, dann antworte doch einfach nicht!
Ist dir vielleicht aufgefallen, daß ausnahmslos alle Antworter dir die Sinnlosigkeit deines Vorhabens bescheinigt haben? Vielleicht sollte man auf deine Fragen besser gar nicht mehr antworten?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#25

AW: Item in DrawItem ändern?

  Alt 21. Jun 2014, 21:38
In meinen Augen auch, aber das könnte auch daran liegen, dass ich kein so Genie wie Popov oder Mattze bin, sondern nur ein durchschnittlicher Programmierer, der alles an den Stellen macht, die dafür vorgesehen sind!
Nehme niemand in Schutz desto trotz kann ich nicht erkennen das hier irgend jemand Beleidigt wurde.

gruss
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#26

AW: Item in DrawItem ändern?

  Alt 21. Jun 2014, 21:41
Ich glaube es war Sir Edmund Hillary, der erste erfolgreicher Besteiger des Mount Everest, den man fragte, wieso er diesen Berg bestiegen hat? Er antwortete: weil er da ist.

Es gibt keinen nützlichen Grund einen solchen Berg zu besteigen. Keinen. Auch gibt es keinen nützlichen Grund nach Exoplaneten zu suchen, denn selbst wenn man welche finden würde, die man als Mensch bewohnen kann, die Entfernungen sind einfach zu gewaltig. Und das ist nicht nur eine Frage der Zeit und Technik.

Natürlich kann man hier und da sich fragen welchen Sinn etwas hat, aber genau so wie z. Brainstorming konzeptionell davon ausgeht, dass es keine dumme Ideen gibt, sondern aus einer weniger guten Idee durchaus eine gute Idee entstehen kann, kann man sich darüber unterhalten ob es weniger guten Code gibt? Oder führt jeder Code dazu seine Grenzen zu erweitern?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#27

AW: Item in DrawItem ändern?

  Alt 21. Jun 2014, 22:44
Adrenalinkick, Ruh, Ehere, ein erfüllter Traum und man hat einen geilen Ausblick.

Es hat auch absolut keinen Sinn das Haus zu verschieben, nur weil es im Keller zu dunkel ist und dennoch macht das Keiner, da es "bessere" Lösungen gibt.
$2B or not $2B
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#28

AW: Item in DrawItem ändern?

  Alt 22. Jun 2014, 06:18
Hallo,

ICH halte die Frage nach den Grenzen eines Konzepts für durchaus berechtigt, auch wenn sie zunächst einmal dem einen oder anderen sinnfrei erscheint!

Übrigens: Eigentlich dürfte es nicht gehen, aber erstaunlicherweise scheint es doch zu funktionieren.

Delphi-Quellcode:
  
  if (index>Ftempindex) and Assigned(FOnBeforeDrawItem) then begin
    FOnBeforeDrawItem(Self, Index, Rect, State);
    FTempIndex:=index;
    exit;
  end;
im neuen DrawItem am Anfang tut es.
(FTempIndex ist eine Integer-Variable aus dem private-Bereich der neuen Listbox-Komponente und wird in Create mit -1 initialisiert.)

Es gibt noch beim ersten (und zweiten?) vertikalen Scrollvorgang ein kleines Problem, aber sonst sieht es schon gut aus und das ist verschmerzbar.

Gruß
Mattze

PS: Warum gibt es für Perlsau eigentlich nur Genie oder Anfänger?
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#29

AW: Item in DrawItem ändern?

  Alt 22. Jun 2014, 09:29
Ich finde Mattzes Ansinnen, Fragestellung, Argumenation und Vorgehensweise absolut ok. Dieses 'völlig sinnfreie Anliegen' ist ein sehr wichtiger Bestandteil einer für viele vermutlich komplett überflüssigen Tätigkeit, die unsere Gesellschaft zwar weiterbringt ('Fortschritt'), aber jedoch im eigentlichen Sinne unproduktiv und für Laien teilweise auch blödsinnig ist.

Diese offensichtlich für Einige bekloppte Tätigkeit nennt sich: Forschen und basiert in erster Linie auf Wissensdurst. Und dieser Durst nach Wissen kann nur gestillt werden, wenn Vorbehalte ("Das braucht man doch nicht", "Geht auch anders", "völlig Sinnfrei") mal außen vor gelassen werden. Diese Vorbehalte kommen in der Anwendung zum Einsatz (und sind Antrieb von so etwas wie Wirtschaftlichkeit), haben in der Forschung jedoch nichts zu suchen.

Für Einige scheint Forschung und Programmieren nichts miteinander zu tun zu haben.

Zum Thema: Endllosschleifen in ereignisgesteuerten Programmabläufen lassen sich zuverlässig über Markierungen vermeiden. Grundsätzlich geht da so:
Delphi-Quellcode:
Procedure MyEventHandler(SomeObject : TSomeObject);
Begin
  If IsHandled[SomeObject] then exit;
  IsHandled[SomeObject] := true;
  Try
    DoSomeThingWith(SomeObject); // <<< Löst das Ereignis 'MyEvent' erneut aus
  Finally
    IsHandled[SomeObject] := false;
  End
End;
Eine andere Vorgehensweise ist die, einen die Schleife auslösenden Aufruf nur dann auszuführen, wenn es unbedingt nötig ist. Ein Beispiel ist ein Grid, welches die Spaltenbreite automatisch anpasst, wenn der darzustellende Text breiter als die augenblickliche Spaltenbreite ist. Dann wird die Breite ja nur gesetzt, wenn die Spalte noch nicht breit genug war. Hier findet zwar ein rekursiver Aufruf statt, aber nach dem ersten Aufruf ist Schluss, da die Breite ja beim 2. Aufruf passt.
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  sg : TStringGrid;
begin
  if not (Sender is TStringGrid) then exit;
  sg := TStringGrid(Sender);
  w := sg.Canvas.TextWidth(sg.Cells[aCol, aRow]);

  if w>sg.ColWidths[aCol] then
    sg.ColWidths[aCol] := w; // <<< löst ein erneuten Aufruf von DrawCell aus!
  ...
end;
Hier würde ich vermutlich den zweiten Ansatz nehmen, denn der Text muss ja nur verändert werden, wenn noch nicht geändert wurde.

Eigentlich ist das 2.Pattern eine Spezialisierung des 1.Patterns, denn das [Delphi]IsModified[SomeObject][/delpi] wird ja durch die Änderung des Objekts abgebildet.

Geändert von Dejan Vu (22. Jun 2014 um 09:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#30

AW: Item in DrawItem ändern?

  Alt 22. Jun 2014, 10:19
Ich finde Mattzes Ansinnen, Fragestellung, Argumenation und Vorgehensweise absolut ok.
OnDraw ist zum Malen da und hat nichts an den Daten zu ändern.

Und ja, ich kenn einige Komponenten, welche jedesmal im OnDraw irgendwelche Daten überschreiben, oder erst dort Operationen ausführen, welche eigentlich in ein OnChange reingehören würden.
Das Verhalten solcher Komponenten ist völlig undurchschaubar, da gedade das Paintereignis an unbestimmter Stelle ausgeführt wird und wozu soll ein einmaliges Ereignis bei jeder Zeichenoperation ausgeführt werden?

Vorallem der Code in #16 ist ein gutes Beispiel.
Jenachdem wie oft das Ding gezeichnet werden muß, steht jedesmal was Anderes drin.


Und ja, wenn man was am Ausgabeformat oder den Daten ändert, dann muß sich das Ding doch neu zeichnen.
Drum macht man sowas auch nicht in einer Zeichenoperation.

Wenn man vollkommene Freiheit haben will, dann nimmt man eben sowas wie das VirtualTreeView oder (falls die Komponente es kann) versetzt die komponente in einen virtuellen Modus,
wo man im OnPaint alles anzeigen kann, was man will.
Aber auch da gilt, daß man z.B. an der Item-Größe nicht erst im OnPaint rumzuspielen hat.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz