![]() |
AW: Item in DrawItem ändern?
Und aus diesem Grund ist das in meinen Augen inakzeptabel.
|
AW: Item in DrawItem ändern?
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!
|
AW: Item in DrawItem ändern?
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 |
AW: Item in DrawItem ändern?
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 ...
Zitat:
|
AW: Item in DrawItem ändern?
Zitat:
gruss |
AW: Item in DrawItem ändern?
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? |
AW: Item in DrawItem ändern?
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. |
AW: Item in DrawItem ändern?
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:
im neuen DrawItem am Anfang tut es.if (index>Ftempindex) and Assigned(FOnBeforeDrawItem) then begin FOnBeforeDrawItem(Self, Index, Rect, State); FTempIndex:=index; exit; end; (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? |
AW: Item in DrawItem ändern?
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:
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.
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;
Delphi-Quellcode:
Hier würde ich vermutlich den zweiten Ansatz nehmen, denn der Text muss ja nur verändert werden, wenn noch nicht geändert wurde.
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; Eigentlich ist das 2.Pattern eine Spezialisierung des 1.Patterns, denn das [Delphi]IsModified[SomeObject][/delpi] wird ja durch die Änderung des Objekts abgebildet. |
AW: Item in DrawItem ändern?
Zitat:
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz